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    }