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.process;
017    
018    import org.opengion.fukurou.db.ConnectionFactory;
019    import org.opengion.fukurou.util.Argument;
020    import org.opengion.fukurou.util.ApplicationInfo;
021    import org.opengion.fukurou.util.LogWriter;
022    
023    import java.util.Set ;
024    import java.util.Map ;
025    import java.util.LinkedHashMap ;
026    import java.net.InetAddress;
027    import java.net.UnknownHostException;
028    
029    import java.sql.Connection;
030    
031    /**
032     * Process_DBParam は、他ã?プロセスへ共通ã?ãƒ??タベã?ス接続を割り当てる為のã€?
033     * ParamProcess インターフェースの実è£?‚¯ラスですã?
034     *
035     * DB接ç¶?がå¿?¦�な Process (DBCountFilter、DBMerge、DBReader、DBWriterなど)ã‚?
036     * 使用して処ç�?�™るå?合に、接続をæŒ?®šすることができますã?
037     * DBID(接続å?) は、Process_DBParam の -configFile でæŒ?®šすã‚?DBConfig.xml ファイルを使用しますã?
038     *
039     * @og.formSample
040     *  Process_DBParam -infoUSER=C00000 -infoPGID=GE1234 -configFile=DBConfig.xml
041     *
042     *     -infoUSER=実行ユーザー         ??DB接続履歴取得用の実行ユーザー(ä¾?C00000)
043     *     -infoPGID=実行ã?ログラãƒ?D     ??DB接続履歴取得用の実行ã?ログラãƒ?D(ä¾?GE1234)
044     *     -configFile=実行ã?ログラãƒ?D   ??DB接続情報設å®?XMLファイル(ä¾?DBConfig.xml)
045     *
046     * @og.rev 4.0.0.0 (2007/11/22) DBConfig.xml による DBID(接続å?)æŒ?®šに変更ã€?
047     *
048     * @version  4.0
049     * @author   Kazuhiko Hasegawa
050     * @since    JDK5.0,
051     */
052    public class Process_DBParam extends AbstractProcess implements ParamProcess {
053            /** 実行してã�?‚‹サーバã?の名称 */
054            private static final String HOST_NAME ;
055            /** 実行してã�?‚‹サーバã?のIPアドレス */
056            private static final String HOST_ADRS ;
057    
058            static {
059                    String dmnHost ;
060                    String dnmAdrs ;
061                    try {
062                            InetAddress address = InetAddress.getLocalHost();
063                            dmnHost = address.getHostName() ;
064                            dnmAdrs = address.getHostAddress() ;
065                    }
066                    catch( UnknownHostException ex ) {
067                            dmnHost = "Unknown";
068                            dnmAdrs = "Unknown";
069                    }
070                    HOST_NAME = dmnHost;
071                    HOST_ADRS = dnmAdrs;
072            }
073    
074            private ApplicationInfo appInfo = null;
075    
076            // 5.3.4.0 (2011/04/01) bulkData 関係ã?メソãƒ?ƒ‰を追åŠ?
077            private Set<String> bulkData ;
078    
079            private static final Map<String,String> mustProparty   ;  // ?»プロパティ?½å¿??チェãƒ?‚¯用 Map
080            private static final Map<String,String> usableProparty ;  // ?»プロパティ?½整合æ?チェãƒ?‚¯ Map
081    
082            static {
083                    mustProparty = new LinkedHashMap<String,String>();
084                    mustProparty.put( "infoUSER",   "DB接続履歴取得用の実行ユーザー" );
085                    mustProparty.put( "infoPGID",   "DB接続履歴取得用の実行ã?ログラãƒ?D" );
086                    mustProparty.put( "configFile", "DB接続情報設å®?XMLファイル" );
087    
088                    usableProparty = new LinkedHashMap<String,String>();
089            }
090    
091            /**
092             * ãƒ?ƒ•ォルトコンストラクターã€?
093             * こã?クラスは、動çš?½œæ?されますã?ãƒ?ƒ•ォルトコンストラクターでã€?
094             * super クラスに対して、å¿?¦�な初期化を行っておきますã?
095             *
096             */
097            public Process_DBParam() {
098                    super( "org.opengion.fukurou.process.Process_DBParam",mustProparty,usableProparty );
099            }
100    
101            /**
102             * ApplicationInfoオブジェクトを登録しますã?
103             * これはã€??常の初期処ç�?�§はなくã?タグリブから起動される場合ã?み
104             * 呼ばれるメソãƒ?ƒ‰ですã?
105             * 初期処ç�?ƒ¡ソãƒ?ƒ‰(init)では、appInfo がセãƒ?ƒˆ済みの場合ã?ã€?
106             * ConnectionFactoryの初期化を行いませんã€?
107             *
108             * @og.rev 4.3.1.1 (2008/09/04) 新規追åŠ?taglib呼出専用)
109             *
110             * @param   appInfo アプリæƒ??オブジェクãƒ?
111             */
112            public void setAppInfo( final ApplicationInfo appInfo ) {
113                    this.appInfo = appInfo;
114            }
115    
116            /**
117             * プロセスの初期化を行いますã?初めにä¸?º¦ã�?�‘、呼び出されますã?
118             * 初期処ç�?ファイルオープンã€?¼¤?¢オープンç­?に使用しますã?
119             *
120             * @og.rev 4.3.1.1 (2008/09/04) taglib呼出時ã?、ConnectionFactoryの初期化を行わなã�?
121             *
122             * @param   paramProcess ãƒ??タベã?スの接続å?æƒ??などを持ってã�?‚‹オブジェクãƒ?
123             */
124            public void init( final ParamProcess paramProcess ) {
125                    // 4.3.1.1 (2008/09/04) taglib呼出時ã?、ConnectionFactoryの初期化を行わなã�?
126                    if( appInfo == null ) {
127                            Argument arg = getArgument();
128    
129                            String infoUSER = arg.getProparty( "infoUSER" );        // DB接続履歴取得用の実行ユーザー
130                            String infoPGID = arg.getProparty( "infoPGID" );        // DB接続履歴取得用の実行ã?ログラãƒ?D
131                            String configFile = arg.getProparty( "configFile" );    // DB接続情報設å®?XMLファイル
132    
133                            appInfo = new ApplicationInfo();
134                            // JavaVM 起動時のユーザーID,IPアドレス,ホスト名をセãƒ?ƒˆしますã?
135                            appInfo.setClientInfo( infoUSER,HOST_ADRS,HOST_NAME );
136    
137                            // 画面ID,操ä½?プログラãƒ?D
138                            appInfo.setModuleInfo( infoPGID,null,"fukurou" );
139    
140                            // DBID接続情報の取得å?の設å®?
141                            ConnectionFactory.init( null,configFile );
142                    }
143            }
144    
145            /**
146             * æŒ?®šã? 接続å?ID に対する コネクションを返しますã?
147             *
148             * @param       key     接続å?ID
149             *
150             * @return      コネクション
151             * @throws      RuntimeException DB接続å?が未設定ã?場å�?
152             */
153            public Connection getConnection( final String key ) {
154                    return ConnectionFactory.connection( key,appInfo );
155            }
156    
157            /**
158             * 検索した結果が設定された Set オブジェクトを設定しますã?
159             *
160             * @og.rev 5.3.4.0 (2011/04/01) 新規追åŠ?
161             *
162             * @param       bulkData        検索した結果が設定された Setオブジェクãƒ?
163             */
164            public void setBulkData( final Set<String> bulkData ) {
165                    this.bulkData = bulkData;
166            }
167    
168            /**
169             * 検索した結果が設定された Set オブジェクトを返しますã?
170             *
171             * @og.rev 5.3.4.0 (2011/04/01) 新規追åŠ?
172             *
173             * @return      検索した結果が設定された Setオブジェクãƒ?
174             */
175            public Set<String> getBulkData() {
176                    return bulkData ;
177            }
178    
179            /**
180             * プロセスの終äº?‚’行いますã?æœ?¾Œにä¸?º¦ã�?�‘、呼び出されますã?
181             * 終äº??ç�?ファイルクローズã€?¼¤?¢クローズç­?に使用しますã?
182             *
183             * @og.rev 4.0.0.0 (2007/11/27) commit,rollback,remove 処ç�?‚’追åŠ?
184             *
185             * @param   isOK トã?タルで、OKã�?�£たかどã�?�‹[true:成功/false:失敗]
186             */
187            public void end( final boolean isOK ) {
188                    // 何もありませんã€?PMD エラー回避)
189            }
190    
191            /**
192             * プロセスの処ç�?µ�果のレポã?ト表現を返しますã?
193             * 処ç�??ログラãƒ?��、å?力件数、å?力件数などのæƒ??ですã?
194             * こã?æ–?­—å?をそのまま、標準å?力に出すことで、結果レポã?トと出来るよã�?�ª
195             * 形式で出してくださいã€?
196             *
197             * @return   処ç�?µ�果のレポã?ãƒ?
198             */
199            public String report() {
200                    String report = "[" + getClass().getName() + "]" + CR
201                                    + ConnectionFactory.information();
202    
203                    return report ;
204            }
205    
206            /**
207             * こã?クラスの使用方法を返しますã?
208             *
209             * @return      こã?クラスの使用方æ³?
210             */
211            public String usage() {
212                    StringBuilder buf = new StringBuilder();
213    
214                    buf.append( "Process_DBParam は、他ã?プロセスへ共通ã?ãƒ??タベã?ス接続を割り当てる為のã€? ).append( CR );
215                    buf.append( "ParamProcess インターフェースの実è£?‚¯ラスですã?"                                                              ).append( CR );
216                    buf.append( CR );
217                    buf.append( "DB接ç¶?がå¿?¦�な Process (DBCountFilter、DBMerge、DBReader、DBWriterなど)ã‚?      ).append( CR );
218                    buf.append( "使用して処ç�?�™るå?合に、接続をæŒ?®šすることができますã?"                                               ).append( CR );
219                    buf.append( "DBID(接続å?) はã€?configFile でæŒ?®šすã‚?DBConfig.xml ファイルを使用しますã?"      ).append( CR );
220                    buf.append( CR );
221                    buf.append( "引数æ–?­—å?中に空白を含ã‚??合ã?、ダブルコーãƒ??ション(\"\") で括って下さã�??" ).append( CR );
222                    buf.append( "引数æ–?­—å?の ã€?』ã?前後には、空白は挟めません。å¿?�šã€?key=value の様に"             ).append( CR );
223                    buf.append( "繋げてくださいã€?                                                                                                                              ).append( CR );
224                    buf.append( CR ).append( CR );
225    
226                    buf.append( getArgument().usage() ).append( CR );
227    
228                    return buf.toString();
229            }
230    
231            /**
232             * こã?クラスは、main メソãƒ?ƒ‰から実行できませんã€?
233             *
234             * @param       args    コマンド引数配å?
235             */
236            public static void main( final String[] args ) {
237                    LogWriter.log( new Process_DBParam().usage() );
238            }
239    }