001 /* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016 package org.opengion.fukurou.transfer; 017 018 import java.util.Date; 019 import java.util.HashSet; 020 import java.util.Set; 021 022 import org.opengion.fukurou.db.ConnectionFactory; 023 import org.opengion.fukurou.db.Transaction; 024 import org.opengion.fukurou.db.TransactionReal; 025 import org.opengion.fukurou.util.ApplicationInfo; 026 import org.opengion.fukurou.util.LogWriter; 027 import org.opengion.fukurou.util.StringUtil; 028 029 /** 030 * ä¼é?処ç?‚’実行ã™ã‚‹ãŸã‚ã?クラスã§ã™ã? 031 * 032 * ä¼é?ãƒ??モンã§ã‚»ãƒ?ƒˆã•れãŸèªå–方法ã?実行方法ã?基ã¥ãä¼é?処ç?‚’実行ã—ã¾ã™ã? 033 * ä¼é?処ç??以下ã?フãƒãƒ¼ã§å®Ÿè¡Œã•れã¾ã™ã? 034 * 035 * â‘?ƒ‡ãƒ¼ã‚¿ã®èªã¿å–り 036 * ã€?ªå–方法ã«å¯¾å¿œã™ã‚‹å„実è£?‚¯ãƒ©ã‚¹ã®å‡¦ç?‚’呼ã³å‡ºã—データをèªã¿å–りã¾ã™ã? 037 * ②処ç?®Ÿè¡? 038 * ã€?®Ÿè¡Œæ–¹æ³•ã«å¯¾å¿œã™ã‚‹å„実è£?‚¯ãƒ©ã‚¹ã®å‡¦ç?‚’呼ã³å‡ºã—â‘ ã§å–å¾—ã—ãŸãƒ‡ãƒ¼ã‚¿ã«å¯¾ã—ã¦å‡¦ç?‚’実行ã—ã¾ã™ã? 039 * ③終äº??ç? 040 * ã€?‘ ã€â‘¡ãŒæ£å¸¸çµ‚äº?—ãŸå?åˆï¼Œèªå–方法ã?クラスã§å®šç¾©ã•れãŸçµ‚äº??ç?‚’実行ã—ã¾ã™ã? 041 * ã€?‘ ã€â‘¡ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå?åˆã?èªå–方法ã?クラスã§å®šç¾©ã•れãŸã‚¨ãƒ©ãƒ¼å‡¦ç?‚’実行ã—ã¾ã™ã? 042 * 043 * @og.group ä¼é?シスãƒ?ƒ 044 * 045 * @version 5.0 046 * @author Hiroki.Nakamura 047 * @since JDK1.6 048 */ 049 public class TransferProcess { 050 051 // 実行方法ã«å¯¾å¿œã™ã‚‹å®Ÿè£?‚¯ãƒ©ã‚¹ã®åŸºæº–å 052 private static final String READ_CLASS_BASE = "org.opengion.fukurou.transfer.TransferRead_" ; 053 054 // 実行方法ã«å¯¾å¿œã™ã‚‹å®Ÿè£?‚¯ãƒ©ã‚¹ã®åŸºæº–å 055 private static final String EXEC_CLASS_BASE = "org.opengion.fukurou.transfer.TransferExec_" ; 056 057 // 実行対象ã®ä¼é?ã‚»ãƒ?ƒˆã‚ªãƒ–ジェクトã?ã‚»ãƒ?ƒˆ 058 private final Set<TransferConfig> configSet; 059 060 // æœ?¾Œã«å®Ÿè¡Œã—ãŸä¼é?è¨å®šã‚ªãƒ–ジェクãƒ? 061 private TransferConfig config = null; 062 063 // 実行デーモンå? 064 private String dmnName = null; 065 066 // DBæŽ¥ç¶šæƒ…å ±è¨˜éŒ² 067 private ApplicationInfo appInfo; 068 069 // ãƒ?ƒãƒ?‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹ 070 private boolean isDebug = false; 071 072 /** 073 * コンストラクタã§ã™ã? 074 * 075 * @param configSet ä¼é?è¨å®šã‚ªãƒ–ジェクトã?ã‚»ãƒ?ƒˆ 076 */ 077 public TransferProcess( final Set<TransferConfig> configSet ) { 078 this.configSet = configSet; 079 } 080 081 /** 082 * ãƒ??モンåã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã? 083 * 084 * @param dmnName ãƒ??モンå? 085 */ 086 public void setDmnName( final String dmnName ) { 087 this.dmnName = dmnName; 088 } 089 090 /** 091 * DBæŽ¥ç¶šæƒ…å ±ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã? 092 * 093 * @param appInfo DBæŽ¥ç¶šæƒ…å ± 094 */ 095 public void setAppInfo( final ApplicationInfo appInfo ) { 096 this.appInfo = appInfo; 097 } 098 099 /** 100 * ãƒ?ƒãƒ?‚°æƒ??ã‚’å?力ã—ã¾ã™ã? 101 */ 102 public void setDebug() { 103 isDebug = true; 104 } 105 106 /** 107 * æœ?¾Œã«å®Ÿè¡Œã—ãŸä¼é?è¨å®šã‚ªãƒ–ジェクトを返ã—ã¾ã™ã? 108 * 109 * @return ä¼é?è¨å®šã‚ªãƒ–ジェクãƒ? 110 */ 111 public TransferConfig getLastConfig() { 112 return config; 113 } 114 115 /** 116 * ä¼é?処ç?‚’実行ã—ã¾ã™ã? 117 */ 118 public void process() { 119 Transaction tran = new TransactionReal( appInfo ); 120 TransferRead read = null; 121 TransferExec exec = null; 122 try { 123 for( TransferConfig c : configSet ) { 124 config = c; 125 126 // ãƒ?ƒãƒ?‚°æƒ??ã‚’å?力ã—ã¾ã™ã? 127 if( isDebug ) { 128 System.out.println(); 129 System.out.print( " START = " + new Date() ); 130 System.out.print( "[" + dmnName + "]:[" + config.toString() + "]" ); 131 } 132 133 // èªå–方法ã?オブジェクトを生æ?ã—ã?ä¼é?プãƒã‚»ã‚¹ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã? 134 read = (TransferRead)StringUtil.newInstance( READ_CLASS_BASE + config.getKbRead() ); 135 136 // 実行方法ã?オブジェクトを生æ?ã—ã?ä¼é?プãƒã‚»ã‚¹ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã? 137 exec = (TransferExec)StringUtil.newInstance( EXEC_CLASS_BASE + config.getKbExec() ); 138 139 String[] vals = read.read( config, tran ); 140 exec.execute( vals, config, tran ); 141 read.complete( config, tran ); 142 143 // ãƒ?ƒãƒ?‚°æƒ??ã‚’å?力ã—ã¾ã™ã? 144 if( isDebug ) { 145 System.out.println(); 146 System.out.print( " END = " + new Date() ); 147 System.out.print( "[" + dmnName + "]:[" + config.toString() + "]" ); 148 } 149 } 150 } 151 catch( Throwable ex ) { 152 if( tran != null ) { 153 tran.rollback(); 154 tran.close(); 155 tran = null; // エラー発生時ã¯ã€æŽ¥ç¶šã‚’終äº?—ã¾ã™ã?(次ã®çŠ¶æ³æ›´æ–°ã§ãƒ?ƒƒãƒ‰ãƒãƒ?‚¯ã«ãªã‚‹ãŸã‚? 156 } 157 158 if( read != null ) { 159 read.error( config, appInfo ); 160 } 161 162 throw new RuntimeException( ex ); 163 } 164 finally { 165 if( tran != null ) { tran.close(); } 166 } 167 } 168 169 /** 170 * 実行用ã®ãƒ¡ã‚¤ãƒ³ãƒ¡ã‚½ãƒ?ƒ‰ 171 * 172 * java org.opengion.hayabusa.transfer.TransferProcess 173 * -kbRead=èªå–æ–¹æ³?-readObj=èªå–対象 [-readPrm=èªå–パラメーター] 174 * -kbExec=実行方æ³?-execObj=実行対象 [-execPrm=実行パラメーター] 175 * -DBConfig=DBConfig.xml [-execDbid=実行接続å?DBID] [-hfrom=é€ã‚Šå…??ストコード] 176 * 177 * @param args コマンド引数é…å? 178 */ 179 public static void main( final String[] args ) { 180 try { 181 if( args.length < 5 ) { 182 LogWriter.log( "Usage: java org.opengion.hayabusa.transfer.TransferProcess" ); 183 LogWriter.log( "-kbRead=èªå–æ–¹æ³?-readObj=èªå–対象 [-readPrm=èªå–パラメーター]" ); 184 LogWriter.log( "-kbExec=実行方æ³?-execObj=実行対象 [-execPrm=実行パラメーター]" ); 185 LogWriter.log( "-DBConfig=DBConfig.xml [-execDbid=実行接続å?DBID] [-hfrom=é€ã‚Šå…??ストコード]" ); 186 return; 187 } 188 189 String kbRead = null; 190 String readObj = null; 191 String readPrm = null; 192 String kbExec = null; 193 String execObj = null; 194 String execPrm = null; 195 String dbConfig = null; 196 String execDbid = null; 197 String hfrom = null; 198 199 for( int i=0; i<args.length; i++ ) { 200 String arg = args[i]; 201 if( arg.startsWith( "-kbRead=" ) ) { 202 kbRead = arg.substring( 8 ); 203 } 204 else if( arg.startsWith( "-readObj=" ) ) { 205 readObj = arg.substring( 9 ); 206 } 207 else if( arg.startsWith( "-readPrm=" ) ) { 208 readPrm = arg.substring( 9 ); 209 } 210 else if( arg.startsWith( "-kbExec=" ) ) { 211 kbExec = arg.substring( 8 ); 212 } 213 else if( arg.startsWith( "-execObj=" ) ) { 214 execObj = arg.substring( 9 ); 215 } 216 else if( arg.startsWith( "-execPrm=" ) ) { 217 execPrm = arg.substring( 9 ); 218 } 219 else if( arg.startsWith( "-DBConfig=" ) ) { 220 dbConfig = arg.substring( 10 ); 221 } 222 else if( arg.startsWith( "-execDbid=" ) ) { 223 execDbid = arg.substring( 10 ); 224 } 225 else if( arg.startsWith( "-hfrom=" ) ) { 226 hfrom = arg.substring( 7 ); 227 } 228 } 229 230 if( kbRead == null || kbRead.length() == 0 231 || readObj == null || readObj.length() == 0 232 || kbExec == null || kbExec.length() == 0 233 || execObj == null || execObj.length() == 0 234 || dbConfig == null || dbConfig.length() == 0 ) { 235 LogWriter.log( "以下ã?パラメーターã¯å¿??ã§ã™ã?" ); 236 LogWriter.log( "-kbRead=èªå–æ–¹æ³?-readObj=èªå–対象" ); 237 LogWriter.log( "-kbExec=実行方æ³?-execObj=実行対象" ); 238 LogWriter.log( "-DBConfig=DBConfig.xml" ); 239 } 240 241 // HybsSystem.setInitialData( new HashMap<String,String>() ); 242 243 // DBIDæŽ¥ç¶šæƒ…å ±ã®å–å¾—å?ã®è¨å®? 244 ConnectionFactory.init( null,dbConfig ); 245 246 // ä¼é?è¨å®šã‚ªãƒ–ジェクãƒ? 247 TransferConfig config = new TransferConfig( 248 kbRead, readObj, readPrm 249 , kbExec, execDbid, execObj, execPrm 250 , null, hfrom, null, -1 ); 251 Set<TransferConfig> configSet = new HashSet<TransferConfig>(); 252 configSet.add( config ); 253 254 // ä¼é?処ç?‚’実行ã—ã¾ã™ã? 255 TransferProcess proc = new TransferProcess( configSet ); 256 257 System.out.println( "EXEC START Config=[" + config.toString() + "]" ); 258 proc.process(); 259 System.out.println( "EXEC END Config=[" + config.toString() + "]" ); 260 } 261 catch( Throwable ex ) { 262 ex.printStackTrace(); 263 // 異常終äº??å ´å? 264 System.exit( 1 ); 265 } 266 267 // æ£å¸¸çµ‚äº??å ´å? 268 System.exit( 0 ); 269 } 270 }