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 System.out.println();
132 }
133
134 // 読取方法ã?オブジェクトを生æ?しã?伝é?プロセスにセãƒ?ƒˆしますã?
135 read = (TransferRead)StringUtil.newInstance( READ_CLASS_BASE + config.getKbRead() );
136
137 // 実行方法ã?オブジェクトを生æ?しã?伝é?プロセスにセãƒ?ƒˆしますã?
138 exec = (TransferExec)StringUtil.newInstance( EXEC_CLASS_BASE + config.getKbExec() );
139
140 String[] vals = read.read( config, tran );
141 exec.execute( vals, config, tran );
142 read.complete( config, tran );
143
144 // ãƒ?ƒ�ãƒ?‚°æƒ??をå?力しますã?
145 if( isDebug ) {
146 System.out.println();
147 System.out.print( " END = " + new Date() );
148 System.out.print( "[" + dmnName + "]:[" + config.toString() + "]" );
149 System.out.println();
150 }
151 }
152 }
153 catch( Throwable ex ) {
154 if( tran != null ) {
155 tran.rollback();
156 tran.close();
157 tran = null; // エラー発生時は、接続を終äº?�—ますã?(次の状況更新でãƒ?ƒƒドロãƒ?‚¯になるたã‚?
158 }
159
160 if( read != null ) {
161 read.error( config, appInfo );
162 }
163
164 throw new RuntimeException( ex );
165 }
166 finally {
167 if( tran != null ) { tran.close(); }
168 }
169 }
170
171 /**
172 * 実行用のメインメソãƒ?ƒ‰
173 *
174 * Usage: java org.opengion.hayabusa.transfer.TransferProcess
175 * -kbRead=読取方æ³?-readObj=読取対象 [-readPrm=読取パラメーター]
176 * -kbExec=実行方æ³?-execObj=実行対象 [-execPrm=実行パラメーター]
177 * -DBConfig=DBConfig.xml [-execDbid=実行接続å?DBID] [-hfrom=送りå…??ストコード]
178 * [-debug=true/false]
179 *
180 * @og.rev 5.8.3.2 (2015/01/30) debug追åŠ?
181 * @og.rev 5.8.4.2 (2015/02/28) 修正
182 *
183 * @param args コマンド引数配å?
184 */
185 public static void main( final String[] args ) {
186 boolean debug = false; // 5.8.3.2 (2015/01/30)
187 try {
188 if( args.length < 5 ) {
189 LogWriter.log( "Usage: java org.opengion.hayabusa.transfer.TransferProcess" );
190 LogWriter.log( " -kbRead=読取方æ³?-readObj=読取対象 [-readPrm=読取パラメーター]" );
191 LogWriter.log( " -kbExec=実行方æ³?-execObj=実行対象 [-execPrm=実行パラメーター]" );
192 LogWriter.log( " -DBConfig=DBConfig.xml [-execDbid=実行接続å?DBID] [-hfrom=送りå…??ストコード]" );
193 return;
194 }
195
196 String kbRead = null;
197 String readObj = null;
198 String readPrm = null;
199 String kbExec = null;
200 String execObj = null;
201 String execPrm = null;
202 String dbConfig = null;
203 String execDbid = null;
204 String hfrom = null;
205
206
207 for( int i=0; i<args.length; i++ ) {
208 String arg = args[i];
209 if( arg.startsWith( "-kbRead=" ) ) {
210 kbRead = arg.substring( 8 );
211 }
212 else if( arg.startsWith( "-readObj=" ) ) {
213 readObj = arg.substring( 9 );
214 }
215 else if( arg.startsWith( "-readPrm=" ) ) {
216 readPrm = arg.substring( 9 );
217 }
218 else if( arg.startsWith( "-kbExec=" ) ) {
219 kbExec = arg.substring( 8 );
220 }
221 else if( arg.startsWith( "-execObj=" ) ) {
222 execObj = arg.substring( 9 );
223 }
224 else if( arg.startsWith( "-execPrm=" ) ) {
225 execPrm = arg.substring( 9 );
226 }
227 else if( arg.startsWith( "-DBConfig=" ) ) {
228 dbConfig = arg.substring( 10 );
229 }
230 else if( arg.startsWith( "-execDbid=" ) ) {
231 execDbid = arg.substring( 10 );
232 }
233 else if( arg.startsWith( "-hfrom=" ) ) {
234 hfrom = arg.substring( 7 );
235 }
236 else if( arg.startsWith( "-debug=" ) ) { // 5.8.3.2 (2015/01/30)
237 if( "true".equals(arg.substring( 7 )) ){ debug = true; } // 5.8.4.2 (2015/02/28)
238 }
239 }
240
241 if( kbRead == null || kbRead.length() == 0
242 || readObj == null || readObj.length() == 0
243 || kbExec == null || kbExec.length() == 0
244 || execObj == null || execObj.length() == 0
245 || dbConfig == null || dbConfig.length() == 0 ) {
246 LogWriter.log( "以下ã?パラメーターはå¿??ですã?" );
247 LogWriter.log( "-kbRead=読取方æ³?-readObj=読取対象" );
248 LogWriter.log( "-kbExec=実行方æ³?-execObj=実行対象" );
249 LogWriter.log( "-DBConfig=DBConfig.xml" );
250 }
251
252 // HybsSystem.setInitialData( new HashMap<String,String>() );
253
254 // DBID接続情報の取得å?の設å®?
255 ConnectionFactory.init( null,dbConfig );
256
257 // 伝é?設定オブジェクãƒ?
258 TransferConfig config = new TransferConfig(
259 kbRead, readObj, readPrm
260 , kbExec, execDbid, execObj, execPrm
261 , null, hfrom, null, -1 );
262 Set<TransferConfig> configSet = new HashSet<TransferConfig>();
263 configSet.add( config );
264
265 // 伝é?処ç�?‚’実行しますã?
266 TransferProcess proc = new TransferProcess( configSet );
267 if( debug ){ // 5.8.3.2 (2015/01/30)
268 proc.setDebug();
269 }
270
271
272 System.out.println( "EXEC START Config=[" + config.toString() + "]" );
273 proc.process();
274 System.out.println( "EXEC END Config=[" + config.toString() + "]" );
275 }
276 catch( Throwable ex ) {
277 ex.printStackTrace();
278 // 5.8.3.2 (2015/01/30)
279 if( debug ){
280 System.out.println( ex.toString() );
281 }
282 // 異常終äº??場å�?
283 System.exit( 1 );
284 }
285
286 // 正常終äº??場å�?
287 System.exit( 0 );
288 }
289 }