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.db.ApplicationInfo; 021import org.opengion.fukurou.system.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 * [ -display=[false/true] ] : trueは、接続状況を詳細表示します(初期値:false) 046 * 047 * @og.rev 4.0.0.0 (2007/11/22) DBConfig.xml による DBID(接続先)指定に変更。 048 * @og.rev 6.3.1.0 (2015/06/28) 履歴取得用パラメータの必須解除 049 * 050 * @version 4.0 051 * @author Kazuhiko Hasegawa 052 * @since JDK5.0, 053 */ 054public class Process_DBParam extends AbstractProcess implements ParamProcess { 055 /** 実行しているサーバーの名称 */ 056 private static final String HOST_NAME ; 057 /** 実行しているサーバーのIPアドレス */ 058 private static final String HOST_ADRS ; 059 060 private ApplicationInfo appInfo ; 061 private boolean display ; // 表示しない 062 063 // 5.3.4.0 (2011/04/01) bulkData 関係のメソッドを追加 064 private Set<String> bulkData ; 065 066 /** staticイニシャライザ後、読み取り専用にするので、ConcurrentHashMap を使用しません。 */ 067 private static final Map<String,String> MUST_PROPARTY ; // [プロパティ]必須チェック用 Map 068 /** staticイニシャライザ後、読み取り専用にするので、ConcurrentHashMap を使用しません。 */ 069 private static final Map<String,String> USABLE_PROPARTY ; // [プロパティ]整合性チェック Map 070 071 static { 072 String dmnHost ; 073 String dnmAdrs ; 074 try { 075 final InetAddress address = InetAddress.getLocalHost(); 076 dmnHost = address.getHostName() ; 077 dnmAdrs = address.getHostAddress() ; 078 } 079 catch( final UnknownHostException ex ) { 080 dmnHost = "Unknown"; 081 dnmAdrs = "Unknown"; 082 } 083 HOST_NAME = dmnHost; 084 HOST_ADRS = dnmAdrs; 085 } 086 087 static { 088 MUST_PROPARTY = new LinkedHashMap<>(); 089 // 6.3.1.0 (2015/06/28) 必須から外します。 090 091 USABLE_PROPARTY = new LinkedHashMap<>(); 092 USABLE_PROPARTY.put( "infoUSER" , "DB接続履歴取得用の実行ユーザー" ); 093 USABLE_PROPARTY.put( "infoPGID" , "DB接続履歴取得用の実行プログラムID" ); 094 USABLE_PROPARTY.put( "configFile", "DB接続情報設定 XMLファイル" ); 095 USABLE_PROPARTY.put( "display" , "trueは、接続状況を詳細表示します(初期値:false)" ); // 6.3.1.0 (2015/06/28) 追加 096 } 097 098 /** 099 * デフォルトコンストラクター。 100 * このクラスは、動的作成されます。デフォルトコンストラクターで、 101 * super クラスに対して、必要な初期化を行っておきます。 102 * 103 */ 104 public Process_DBParam() { 105 super( "org.opengion.fukurou.process.Process_DBParam",MUST_PROPARTY,USABLE_PROPARTY ); 106 } 107 108 /** 109 * ApplicationInfoオブジェクトを登録します。 110 * これは、通常の初期処理ではなく、タグリブから起動される場合のみ 111 * 呼ばれるメソッドです。 112 * 初期処理メソッド(init)では、appInfo がセット済みの場合は、 113 * ConnectionFactoryの初期化を行いません。 114 * 115 * @og.rev 4.3.1.1 (2008/09/04) 新規追加(taglib呼出専用) 116 * 117 * @param appInfo アプリ情報オブジェクト 118 */ 119 public void setAppInfo( final ApplicationInfo appInfo ) { 120 this.appInfo = appInfo; 121 } 122 123 /** 124 * プロセスの初期化を行います。初めに一度だけ、呼び出されます。 125 * 初期処理(ファイルオープン、DBオープン等)に使用します。 126 * 127 * @og.rev 4.3.1.1 (2008/09/04) taglib呼出時は、ConnectionFactoryの初期化を行わない 128 * @og.rev 6.3.1.0 (2015/06/28) display属性の追加 129 * 130 * @param paramProcess データベースの接続先情報などを持っているオブジェクト 131 */ 132 @Override 133 public void init( final ParamProcess paramProcess ) { 134 final Argument arg = getArgument(); // 6.3.1.0 (2015/06/28) display属性の追加のため。 135 136 // 4.3.1.1 (2008/09/04) taglib呼出時は、ConnectionFactoryの初期化を行わない 137 if( appInfo == null ) { 138 139 final String infoUSER = arg.getProparty( "infoUSER" ); // DB接続履歴取得用の実行ユーザー 140 final String infoPGID = arg.getProparty( "infoPGID" ); // DB接続履歴取得用の実行プログラムID 141 final String configFile = arg.getProparty( "configFile" ); // DB接続情報設定 XMLファイル 142 143 appInfo = new ApplicationInfo(); 144 // JavaVM 起動時のユーザーID,IPアドレス,ホスト名をセットします。 145 appInfo.setClientInfo( infoUSER,HOST_ADRS,HOST_NAME ); 146 147 // 画面ID,操作,プログラムID 148 appInfo.setModuleInfo( infoPGID,null,"fukurou" ); 149 150 // DBID接続情報の取得先の設定 151 ConnectionFactory.init( null,configFile ); 152 } 153 154 display = arg.getProparty( "display",display ); // 6.3.1.0 (2015/06/28) 155 } 156 157 /** 158 * 指定の 接続先ID に対する コネクションを返します。 159 * 160 * @param key 接続先ID 161 * 162 * @return コネクション 163 * @throws RuntimeException DB接続先が未設定の場合 164 * @og.rtnNotNull 165 */ 166 @Override 167 public Connection getConnection( final String key ) { 168 return ConnectionFactory.connection( key,appInfo ); 169 } 170 171 /** 172 * 検索した結果が設定された Set オブジェクトを設定します。 173 * 174 * @og.rev 5.3.4.0 (2011/04/01) 新規追加 175 * 176 * @param bulkData 検索した結果が設定されたSetオブジェクト 177 */ 178 @Override 179 public void setBulkData( final Set<String> bulkData ) { 180 this.bulkData = bulkData; 181 } 182 183 /** 184 * 検索した結果が設定された Set オブジェクトを返します。 185 * 186 * @og.rev 5.3.4.0 (2011/04/01) 新規追加 187 * 188 * @return 検索した結果が設定された Setオブジェクト 189 */ 190 @Override 191 public Set<String> getBulkData() { 192 return bulkData ; 193 } 194 195 /** 196 * プロセスの終了を行います。最後に一度だけ、呼び出されます。 197 * 終了処理(ファイルクローズ、DBクローズ等)に使用します。 198 * 199 * @og.rev 4.0.0.0 (2007/11/27) commit,rollback,remove 処理を追加 200 * 201 * @param isOK トータルで、OKだったかどうか[true:成功/false:失敗] 202 */ 203 @Override 204 public void end( final boolean isOK ) { 205 // 何もありません。(PMD エラー回避) 206 } 207 208 /** 209 * プロセスの処理結果のレポート表現を返します。 210 * 処理プログラム名、入力件数、出力件数などの情報です。 211 * この文字列をそのまま、標準出力に出すことで、結果レポートと出来るような 212 * 形式で出してください。 213 * 214 * @return 処理結果のレポート 215 */ 216 @Override 217 public String report() { 218 // 7.2.9.5 (2020/11/28) PMD:Consider simply returning the value vs storing it in local variable 'XXXX' 219 return "[" + getClass().getName() + "]" + CR 220// final String report = "[" + getClass().getName() + "]" + CR 221 + ConnectionFactory.information( display ) ; 222 223// return report ; 224 } 225 226 /** 227 * このクラスの使用方法を返します。 228 * 229 * @return このクラスの使用方法 230 * @og.rtnNotNull 231 */ 232 @Override 233 public String usage() { 234 final StringBuilder buf = new StringBuilder( BUFFER_LARGE ) 235 .append( "Process_DBParam は、他のプロセスへ共通のデータベース接続を割り当てる為の、" ).append( CR ) 236 .append( "ParamProcess インターフェースの実装クラスです。" ).append( CR ) 237 .append( CR ) 238 .append( "DB接続 が必要な Process (DBCountFilter、DBMerge、DBReader、DBWriterなど)を" ).append( CR ) 239 .append( "使用して処理する場合に、接続を指定することができます。" ).append( CR ) 240 .append( "DBID(接続先) は、-configFile で指定する DBConfig.xml ファイルを使用します。" ).append( CR ) 241 .append( CR ) 242 .append( "引数文字列中に空白を含む場合は、ダブルコーテーション(\"\") で括って下さい。" ).append( CR ) 243 .append( "引数文字列の 『=』の前後には、空白は挟めません。必ず、-key=value の様に" ).append( CR ) 244 .append( "繋げてください。" ).append( CR ) 245 .append( CR ) 246 .append( "[ -infoUSER=実行ユーザー ] : DB接続履歴取得用の実行ユーザー(例:C00000)" ).append( CR ) 247 .append( "[ -infoPGID=実行プログラムID ] : DB接続履歴取得用の実行プログラムID(例:GE1234)" ).append( CR ) 248 .append( "[ -configFile=実行プログラムID ] : DB接続情報設定 XMLファイル(例:DBConfig.xml)" ).append( CR ) 249 .append( "[ -display=[false/true] ] : trueは、接続状況を詳細表示します(初期値:false)" ).append( CR ) 250 .append( CR ).append( CR ) 251 .append( getArgument().usage() ).append( CR ); 252 253 return buf.toString(); 254 } 255 256 /** 257 * このクラスは、main メソッドから実行できません。 258 * 259 * @param args コマンド引数配列 260 */ 261 public static void main( final String[] args ) { 262 LogWriter.log( new Process_DBParam().usage() ); 263 } 264}