    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 */
    016package org.opengion.fukurou.process;
    017
    018import org.opengion.fukurou.db.ConnectionFactory;
    019import org.opengion.fukurou.util.Argument;
    020import org.opengion.fukurou.util.ApplicationInfo;
    021import org.opengion.fukurou.util.LogWriter;
    022
    023import java.util.Set ;
    024import java.util.Map ;
    025import java.util.LinkedHashMap ;
    026import java.net.InetAddress;
    027import java.net.UnknownHostException;
    028
    029import 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=実行プログラムID     ： DB接続履歴取得用の実行プログラムID(例:GE1234)
    044 *     -configFile=実行プログラムID   ： 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 */
    052public 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接続履歴取得用の実行プログラムID" );
    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接続履歴取得用の実行プログラムID
    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,操作,プログラムID
    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}