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    }