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 * Usage: 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 }