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.hayabusa.common; 017 018 import java.io.IOException; 019 import java.io.PrintWriter; 020 import java.io.UnsupportedEncodingException; 021 import java.lang.reflect.Field; 022 import java.lang.reflect.Modifier; 023 import java.net.MalformedURLException; 024 import java.net.URL; 025 import java.sql.Connection; 026 import java.sql.PreparedStatement; 027 import java.sql.ResultSet; 028 import java.sql.SQLException; 029 import java.util.ArrayList; 030 import java.util.Date; 031 import java.util.Enumeration; 032 import java.util.HashMap; 033 import java.util.LinkedHashMap; 034 import java.util.TreeMap; 035 import java.util.List; 036 import java.util.Locale; 037 import java.util.Map; 038 import java.util.Set; 039 040 import javax.servlet.ServletContext; 041 042 import org.opengion.fukurou.db.ConnectionFactory; 043 import org.opengion.fukurou.util.Closer; 044 import org.opengion.fukurou.util.FindClassFiles; 045 import org.opengion.fukurou.util.LogWriter; 046 import org.opengion.fukurou.util.StringUtil; 047 048 /** 049 * ログインしたサーブレ?コン?ストに対応したシス?パラメータ??タを取得するクラスです? 050 * 051 * シス?パラメータ??タ(GE12)は、パラメータ(PARAM_ID)に対して、各種設定?(PARAM)? 052 * 持って?す? 053 * 従来は、resource.シス?パラメータ の?設定用の シス?パラメータ ファイルと 054 * エンジン?で持って? org/hsgw/hayabusa/resource/properties の 055 * シス?パラメータ ファイルにより維持されて?したが?シス?パラメータ 056 * 定義??ブル(GE12)と、commom/SystemData.java クラスによる管?変更されました? 057 * 058 * シス?パラメータは??へのアクセスを決定するため?初期設定?を定義する?があります? 059 * これは、?アプリケーション・?スクリプタ(WEB-INF/web.xml)に、context-param として? 060 * キーと値のセ?で、?期アクセス用の??を渡します? 061 * シス?パラメータ定義??ブル(GE12)には、SYSTEM_IDとして??常のシス?IDと? 062 * エンジンパラメータがあります?エンジンパラメータは、SYSTEM_ID='**'として、登録 063 * されて?す? 064 * 065 * <table border="1" frame="box" rules="all" > 066 * <tr><th>種? </th><th>SYSTEM_ID</th><th>KBSAKU</th><th>説?/th></tr> 067 * <tr><td>エンジン共?/td><td>** </td><td>0 </td><td>エンジン共通で定義して?パラメータ</td></tr> 068 * <tr><td>エンジン個別</td><td>個別 </td><td>0 </td><td>シス?毎にエンジンが登録して?パラメータ</td></tr> 069 * <tr><td>シス?共?/td><td>** </td><td>1 </td><td>シス?毎にエンジンが登録して?パラメータ</td></tr> 070 * <tr><td>シス?個別</td><td>個別 </td><td>1 </td><td>シス?毎に??が独自に登録して?パラメータ</td></tr> 071 * </table> 072 * 073 * アプリケーション・?スクリプタ(WEB-INF/web.xml)設定情報 074 * <table border="1" frame="box" rules="all" > 075 * <tr><th>パラメータ </th><th>設定??/th><th>解説</th></tr> 076 * <tr><td>SYSTEM_ID </td><td>GE </td>こ?アプリケーションのシス?ID</tr> 077 * <tr><td>TOMCAT_PORT</td><td>8823 </td>Tomcat起動時ポ?ト番号</tr> 078 * <tr><td>LOG_FILE </td><td>log/log_$(yyyyMMdd).txt</td>JSPアクセスログ出力?</tr> 079 * </table> 080 * 081 * ※ 5.6.7.0 (2013/07/27) 082 * InitFileLoader により、特定?クラスパス?? 拡張XDK 形式? xml ファイル を??ます? 083 * クラスパスが?"/resource" 以下?すべての xml ファイルは、DBID?RESOURCE の接続?に対して処?れます? 084 * クラスパスが?"/xml" 以下?すべての xml ファイルは、DBID?DEFAULT の接続?に対して処?れます? 085 * ?ラスパス以下?ファイルは、実フォル?も?jar形式に圧縮された形式でも??れます? 086 * 087 * @og.rev 4.0.0.0 (2005/01/31) 新規作? 088 * @og.rev 4.0.0.0 (2007/10/26) loadDBResourceのコネクションをFactoryから取るように変更 089 * @og.group 初期? 090 * 091 * @version 4.0 092 * @author Kazuhiko Hasegawa 093 * @since JDK5.0, 094 */ 095 public final class SystemParameter { 096 097 /** 098 * ?ォルトコンストラクターをprivateにして? 099 * オブジェクト?生?をさせな??する? 100 * 101 */ 102 private SystemParameter() {} 103 104 /** plugin クラスの取得用クラスパス??{@value} */ 105 public static final String PLUGIN = "org/opengion/plugin"; 106 107 /** シス?共?個別パラメータ(SYSTEM_ID in ('**',?) KBSAKU != '0')の?読込のクエリー {@value} */ 108 // public static final String QUERY = "SELECT PARAM_ID,PARAM,FGCRYPT" 109 // + " FROM GE12 WHERE SYSTEM_ID IN (?,'**')" 110 // + " AND ( CONTXT_PATH IS NULL OR CONTXT_PATH = ?)" 111 // + " AND FGJ='1' AND KBSAKU != '0'" 112 // + " ORDER BY SYSTEM_ID,CONTXT_PATH DESC,KBSAKU,SEQNO" ; 113 // 4.0.0.0 (2007/10/05) CONTXT_PATH に、DEFAULT '**' NOT NULL 制?付ける? 114 /** シス?共?個別パラメータ(SYSTEM_ID in ('**',?) KBSAKU > '0')の?読込のクエリー {@value} */ 115 public static final String QUERY = "SELECT PARAM_ID,PARAM,FGCRYPT" 116 + " FROM GE12 WHERE SYSTEM_ID IN (?,'**')" 117 + " AND CONTXT_PATH IN (?,'**')" 118 + " AND FGJ='1' AND KBSAKU > '0'" 119 + " ORDER BY SYSTEM_ID,CONTXT_PATH,FGJ,KBSAKU,SEQNO" ; 120 121 /** シス?共?個別パラメータ(SYSTEM_ID in ('**',?) KBSAKU > '0')の?登録のクエリー {@value} */ 122 public static final String INS_SYS = "INSERT INTO GE12" 123 + " ( SYSTEM_ID,CONTXT_PATH,PARAM_ID,SEQNO,PARAM,TITLE,CONTENTS,PARAM_LVL,FGJ,KBSAKU )" 124 + " SELECT" 125 + " ?,?,?,?,?,TITLE,CONTENTS,PARAM_LVL,'1','0'" 126 + " FROM GE12 WHERE SYSTEM_ID='**' AND FGJ='1' AND KBSAKU='0' AND PARAM_ID=?" ; 127 128 /** エンジン個別(SYSTEM_ID='個別' KBSAKU='0' CONTXT_PATH='自身')パラメータの?削除のクエリー {@value} */ 129 public static final String DEL_SYS = "DELETE FROM GE12 WHERE SYSTEM_ID=? AND KBSAKU='0' AND CONTXT_PATH=?"; 130 131 /** シス?パラメータ構築中のエラーをセ?して?ます? */ 132 private static final List<String> errMsgList = new ArrayList<String>(); 133 134 /** 135 * コン?スト毎に シス?パラメータオブジェクトを作?します? 136 * こ?クラスのスタート?イントメソ?になります? 137 * 138 * @og.rev 4.1.0.1 (2008/01/23) ログ出力?の変更(全てLogWriter経由で出? 139 * @og.rev 5.5.4.4 (2012/07/20) LogWriter.log 追? 140 * @og.rev 5.5.4.4 (2012/07/20) SQLException は、catch して?ので、loadDBResource からは、throws されな?? 141 * @og.rev 5.7.2.0 (2014/01/10) Throwable の??をも?し詳細に出します? 142 * 143 * @param context Servletコン?ス? 144 * 145 * @return シス?パラメータのマッ? 146 */ 147 public static Map<String,String> makeSystemParameter( final ServletContext context ) { 148 // 4.1.0.1 (2008/01/23) ログ出力?全てLogWriterで行うため、? 149 // try { 150 // String file = context.getInitParameter( "LOG_FILE" ); 151 // if( file != null ) { 152 // // 日付フォー??ファイル名を変換します? 153 // DateSet dateSet = new DateSet(); 154 // file = dateSet.changeString( file ); 155 // // 4.1.0.0 (2008/01/12) 絶対パスでな??合?連? 156 // if( ! new File( file ).isAbsolute() ) { 157 // String path = context.getRealPath( "/" ); 158 // file = path + file; 159 // } 160 // 161 // // append モードで自動フラ?ュON 162 // System.setErr( new PrintStream( new FileOutputStream( file,true ),true ) ); 163 // } 164 // } 165 // catch( FileNotFoundException ex ) { 166 // LogWriter.log( "web.xml InitParameter \"LOG_FILE\" is abusion." ); 167 // LogWriter.log( ex.getMessage() ); 168 // } 169 170 errMsgList.clear() ; // 呼び出し?度、エラーリストをクリアします? 171 172 Map<String,String> engParam = null; 173 Map<String,String> sysParam = null; 174 try { 175 String contextName = getContextName( context ); 176 177 System.out.println( "Context Initialized [" + contextName + "] " + new Date() ); 178 System.out.print( " Version [" + BuildNumber.VERSION_NO + " " ); 179 System.out.print( BuildNumber.BUILD_TYPE ); 180 System.out.println( "]" ); 181 182 // シス???タクラスより、エンジンパラメータ??を?期設定します? 183 // エンジンパラメータは、SystemData クラスの public static メンバ?です? 184 engParam = loadParameter( SystemData.class ); 185 186 // コン?ストより取得できるシス?パラメータ??を取得します? 187 // web.xml で設定したパラメータを取得します? 188 // SYSTEM_ID,DB_DRIVER,DB_URL などは、loadDBResource で使用します? 189 sysParam = loadInitialParameter( context,contextName ); 190 191 // シス?個別に設定される、エンジン起動時??を?期設定します? 192 // エンジン起動時??は、BuildNumber クラスの public static メンバ?です? 193 sysParam.putAll( loadParameter( BuildNumber.class ) ); 194 sysParam.putAll( loadParameter( PLUGIN ) ); 195 196 // GE12 ??タベ?スより読み取ります? 197 // 引数のMapに読み込んだ値を追??Map を返します? 198 // つまり?シス?パラメータ??の上書きを行います? 199 // 5.5.4.4 (2012/07/20) SQLException は、catch して?ので、loadDBResource からは、throws されな?? 200 // try { 201 sysParam = loadDBResource( sysParam ); 202 // } 203 // catch( SQLException ex ) { 204 // String errMsg = "DB終?close)処?実行できませんでした? + HybsSystem.CR 205 // + ex.getMessage() + ":" + ex.getSQLState() ; 206 // LogWriter.log( ex ); // 5.5.4.4 (2012/07/20) LogWriter.log 追? 207 // errMsgList.add( errMsg ); 208 // } 209 } 210 catch( Throwable th ) { // 3.6.1.0 (2005/01/05) 211 LogWriter.log( th ); // 5.5.4.4 (2012/07/20) LogWriter.log 追? 212 // 5.7.2.0 (2014/01/10) Throwable の??をも?し詳細に出します? 213 // errMsgList.add( th.getMessage() ); 214 String errMsg = "処?実行できませんでした? + HybsSystem.CR 215 + th.getMessage() + HybsSystem.CR 216 + StringUtil.ogStackTrace( th ) ; 217 errMsgList.add( errMsg ); 218 } 219 finally { 220 // 初期値のエンジンパラメータに個別のシス?パラメータを追?定します? 221 // つまり?エンジンパラメータ??に上書きを行います? 222 if( engParam != null ) { 223 engParam.putAll( sysParam ); 224 } 225 else { 226 engParam = new HashMap<String,String>(); 227 } 228 229 int errCnt = errMsgList.size(); 230 if( errCnt > 0 ) { 231 StringBuilder buf = new StringBuilder(); 232 buf.append( "【シス?パラメータの初期化に失敗しました。?" ); 233 buf.append( HybsSystem.CR ); 234 buf.append( "Tomcat の設定状況をご確認く???" ); 235 buf.append( HybsSystem.CR ); 236 buf.append( "========================================" ); 237 buf.append( HybsSystem.CR ); 238 239 for( int i=0; i<errCnt; i++ ) { 240 buf.append( errMsgList.get(i) ); 241 buf.append( HybsSystem.CR ); 242 buf.append( "----------------------------------------" ); 243 buf.append( HybsSystem.CR ); 244 } 245 System.out.println( buf ); 246 engParam.put( HybsSystem.LOCAL_CONTX_ERR_KEY,buf.toString() ); 247 } 248 } 249 return engParam ; 250 } 251 252 /** 253 * コン?ストより?アプリケーション設定情報を取得します? 254 * 初期値は、アプリケーション・?スクリプタ(WEB-INF/web.xml)に 255 * context-param として、キーと値のセ?で、?期アクセス用の??を渡します? 256 * ??タベ?スへの接続?、WEB-INF の DBConfig.xml で設定された??を使用します? 257 * 258 * ここでは、各コン?スト毎????を取得します?そ?中には? 259 * BuildNumber クラスで定義されて??フィールド属?も含まれます? 260 * 261 * REAL_PATH : アドレス(/)に対する、実ディレクトリパス 262 * CONTEXT_NAME : アクセス先?仮想フォル?(URLのコン?スト名) 263 * JSP : アクセス先?JSPフォル?(/URLのコン?スト名/jsp) 264 * SYSTEM_ID : web.xml で?する?SYSTEM_ID の設定? 265 * TOMCAT_PORT : web.xml で?する?Tomcat起動時ポ?ト番号(8823) 266 * LOG_FILE : web.xml で?する?JSPアクセスログ出力?(log/log_$(yyyyMMdd).txt) 267 * SERVER_INFO : サーバ??? [例?HN50G5 ( 200.1.50.165 ) ] 268 * SERVLET_INFO : サーブレ??? [例?Apache Tomcat/5.5.9 ] 269 * TOMCAT_WORK : Tomcatワークの位置 [例?H:\java\tomcat5.5.17\work\Catalina\localhost\ver4 ] 270 * TOMCAT_HOME : Tomcat環??位置 [例?H:\java\tomcat5.5.17 ] 271 * JAVA_HOME : Java実行環??位置 [例?H:\java\jdk150\jre ] 272 * ENGINE_INFO : バ?ジョン番号 [例?4.3.6.6 ] 273 * 274 * RESOURCE_DBID : "RESOURCE" 固定?を設定?WEB-INF/web.xml で?しても無効です? 275 * 276 * @og.rev 4.1.0.0 (2007/12/27) web.xmlからTOMCAT_PORTを読???追? 277 * @og.rev 4.2.0.0 (2008/02/18) TOMCAT_PORTを環?数から取得するよ?更 278 * @og.rev 4.2.0.0 (2008/02/20) web.xmlでSYSTEM_IDが空白の場合に大?コン?スト名が設定されるよう変更 279 * @og.rev 4.3.6.6 (2009/05/15) コン?スト単位にエンジンバ?ジョン??を持つ(バ?ジョンア??判定用) 280 * @og.rev 5.6.7.1 (2013/08/09) RESOURCE_DBID の値に?RESOURCE" を設定しておきます? 281 * @og.rev 5.6.7.3 (2013/08/23) TOMCAT_HOME を追? 282 * 283 * @param context Servletコン?ス? 284 * @param contextName コン?スト名 285 * 286 * @return シス?パラメータのマッ? 287 */ 288 private static Map<String,String> loadInitialParameter( final ServletContext context,final String contextName ) { 289 Map<String,String> map = new LinkedHashMap<String,String>(); 290 291 // コン?スト?初期化パラメータ他???を登録しておきます? 292 Enumeration<?> enume = context.getInitParameterNames() ; // 4.3.3.6 (2008/11/15) Generics警告対? 293 while( enume.hasMoreElements() ) { 294 String key = (String)enume.nextElement(); 295 String val = context.getInitParameter( key ); 296 if( val != null && val.length() == 0 ) { val = null; } 297 map.put( key,val ); 298 } 299 300 // SYSTEM_IDがnullの場合?大??コン?スト名を設? 301 if( map.get( "SYSTEM_ID" ) == null ){ // 4.2.0.0 (2008/02/20) 302 map.put( "SYSTEM_ID", contextName.toUpperCase( Locale.JAPAN ) ); 303 } 304 305 // ?シス???を登録しておきます? 306 map.put( "REAL_PATH" ,context.getRealPath( "/" ) ); 307 map.put( "CONTEXT_NAME" ,contextName ); 308 map.put( "JSP" ,"/" + contextName + "/jsp" ); 309 map.put( "SERVLET_INFO" ,context.getServerInfo() ); 310 map.put( "TOMCAT_WORK" ,String.valueOf( context.getAttribute( "javax.servlet.context.tempdir" ) ) ); 311 map.put( "TOMCAT_HOME" ,System.getProperty( "catalina.home" ) ); // 5.6.7.3 (2013/08/23) 312 map.put( "JAVA_HOME" ,System.getProperty( "java.home" ) ); 313 314 map.put( "HOST_NAME" ,HybsSystem.HOST_NAME ); 315 map.put( "HOST_ADRS" ,HybsSystem.HOST_ADRS ); 316 map.put( "SERVER_INFO" ,HybsSystem.HOST_NAME + " ( " + HybsSystem.HOST_ADRS + " )" ); 317 map.put( "ENGINE_INFO" ,BuildNumber.ENGINE_INFO ); 318 String TOMCAT_PORT = System.getenv( "CONNECTOR_PORT" ); // 4.2.0.0 (2008/02/18) ポ?ト番号を環?数から取得に変更 319 if( TOMCAT_PORT == null || TOMCAT_PORT.length() == 0 ) { // 互換性のためweb.xmlからの取得を残す 320 TOMCAT_PORT = map.get( "TOMCAT_PORT" ); // 4.1.0.0 (2007/12/27) 321 } 322 323 String HOST_URL; 324 if( TOMCAT_PORT == null || TOMCAT_PORT.length() == 0 ) { // 両?も?が取得できな??合?** 325 HOST_URL = "**"; 326 } 327 else { 328 HOST_URL = HybsSystem.HOST_NAME + ":" + TOMCAT_PORT + "/" + contextName + "/"; 329 } 330 map.put( "HOST_URL", HOST_URL ); 331 332 // 5.6.7.1 (2013/08/09) RESOURCE_DBID の値に?RESOURCE" を設定しておきます? 333 map.put( "RESOURCE_DBID", "RESOURCE" ); 334 335 System.out.println( " Load Initial Parameter [" + map.size() + "] finished." ); 336 return map ; 337 } 338 339 /** 340 * アプリケーション個別に設定して?リソース??(GE12)を取得します? 341 * 342 * ??タベ?スへの接続?、WEB-INF の DBConfig.xml で設定された??を?に? 343 * org.opengion.fukurou.db.ConnectionFactory で接続?を取得します? 344 * ここでは、web.xml で定義された各アプリケーション個別のパラメ―タを取得します? 345 * SYSTEM_ID(??) です? 346 * 347 * @og.rev 4.0.0.0 (2007/10/10) 接続???の管?直?コン?スト?期設? 348 * @og.rev 4.0.0.0 (2007/10/26) コネクションをファクトリーから取ってくるように変更 349 * @og.rev 4.3.6.5 (2009/05/08) dataパス??XMLファイルも読み取るようにする 350 * @og.rev 4.3.6.6 (2009/05/15) ↑を?。?動インスト?ル対応? 351 * @og.rev 5.1.2.0 (2010/01/01) connection.setAutoCommit は、ConnectionFactory で設定済みなので、コメントアウ? 352 * @og.rev 5.1.9.0 (2010/08/01) 自動インスト?ルの設定見直?画面からのインスト?ル対? 353 * @og.rev 5.5.4.4 (2012/07/20) SQLException は、catch して?ので、このメソ?からは、throws されな?? 354 * @og.rev 5.5.4.5 (2012/07/27) 初期起動時のDB接続?は、RESOURCE_DBID とする? 355 * @og.rev 5.6.6.1 (2013/07/12) xml パス??XMLファイルがあれ?、DB登録します? 356 * @og.rev 5.6.7.0 (2013/07/27) InitFileLoader で、resource以下?、DBID=RESOURCE xml以下?、DBID=DEFAULT に登録します? 357 * @og.rev 5.6.7.3 (2013/08/23) DBID=RESOURCE 漏れ 358 * @og.rev 5.7.2.0 (2014/01/10) RuntimeException は、catch しな??します? 359 * 360 * @param sysParam 入力シス?パラメータマッ? 361 * 362 * @return シス?パラメータのマッ? 363 */ 364 // private static Map<String,String> loadDBResource( final Map<String,String> sysParam ) throws SQLException { 365 private static Map<String,String> loadDBResource( final Map<String,String> sysParam ) { 366 String SYSTEM_ID = sysParam.get( "SYSTEM_ID" ); 367 String CONTEXT_NAME = sysParam.get( "CONTEXT_NAME" ); // コン?スト別シス?リソース 368 String HOST_URL = sysParam.get( "HOST_URL" ); // 4.1.0.0 (2007/12/21) TOMCATへのアクセス用 369 String RESOURCE_DBID = sysParam.get( "RESOURCE_DBID" ); // 5.5.4.5 (2012/07/27) 初期起動時のDB接続? 370 371 // ???チェ?を行います?SYSTEM_IDは??です? 372 // これは、web.xml で定義が?です? 373 // 4.0.0.0 (2007/10/23)接続情報XML化につきDB_URLチェ?を削除 374 if( ( SYSTEM_ID == null || SYSTEM_ID.length() == 0 ) ) { 375 String errMsg = "シス?パラメータの???(SYSTEM_ID,DB_URL)?null です?" + HybsSystem.CR 376 + "SYSTEM_ID=[" + SYSTEM_ID + "] " + HybsSystem.CR 377 + "Versino=[" + BuildNumber.VERSION_NO + "] " + HybsSystem.CR ; 378 errMsgList.add( errMsg ); 379 return sysParam ; 380 } 381 382 // Connection connection = null; 383 Connection defConn = null; // 5.6.7.0 (2013/07/27) DBID=DEFAULT のコネクション 384 Connection rscConn = null; // 5.6.7.0 (2013/07/27) DBID=RESOURCE のコネクション 385 PreparedStatement pstmt = null; 386 ResultSet resultSet = null; 387 boolean errFlag = true; 388 try { 389 // 4.0.0.0(2007/10/25)ConnectionをConnectionFactory経由で取得するよ?変更する? 390 // コン?スト名で接続しに??pplicationInfoは使わな??でnull 391 ConnectionFactory.init( CONTEXT_NAME, null ); // ConnectionFactoryの初期? 392 // connection = ConnectionFactory.connection( null, null ); 393 // connection = ConnectionFactory.connection( RESOURCE_DBID, null ); // 5.5.4.5 (2012/07/27) 初期起動時のDB接続?は、RESOURCE_DBID とする? 394 // connection.setAutoCommit( false ); // 5.1.2.0 (2010/01/01) 395 396 defConn = ConnectionFactory.connection( null, null ); // 5.6.7.0 (2013/07/27) DBID=DEFAULT のコネクション 397 rscConn = ConnectionFactory.connection( RESOURCE_DBID, null ); // 5.6.7.0 (2013/07/27) DBID=RESOURCE のコネクション 398 399 // 4.3.6.6 (2009/05/15) 400 // 5.1.9.0 (2010/08/01) 自動インスト?ルの設定見直?画面からのインスト?ル対? 401 // SystemInstaller installer = new SystemInstaller( connection, new PrintWriter( System.out, true ) ); 402 SystemInstaller installer = new SystemInstaller( defConn , rscConn , new PrintWriter( System.out, true ) ); 403 installer.autoInsUpd( SYSTEM_ID, CONTEXT_NAME, HOST_URL ); 404 405 // resource パス??XMLファイルがあれ?、?にDB登録します?(DBID=RESOURCE) 406 // InitFileLoader loader = new InitFileLoader( connection ); 407 InitFileLoader loader = new InitFileLoader( rscConn ); // こ?コンストラクタは/resource フォル?検索します? 408 loader.loadInitFiles( true ) ; 409 410 // 5.6.6.1 (2013/07/12) xml パス??XMLファイルがあれ?、DB登録します? 411 // loader = new InitFileLoader( connection, "xml" ); 412 loader = new InitFileLoader( defConn, "xml" ); 413 loader.loadInitFiles( true ) ; 414 415 // コン?スト単位?シス?パラメータ?GE12 に設定します? 416 // dbXMLResourceInsert の後に登録する?があります? 417 // dbResourceUpdate( connection,sysParam ); 418 // connection.commit(); 419 dbResourceUpdate( rscConn,sysParam ); // 5.6.7.0 (2013/07/27) DBID=RESOURCE のコネクション 420 rscConn.commit(); 421 422 // DBを検索して、ユーザー設定リソース??を取得します? 423 // pstmt = connection.prepareStatement( QUERY ); 424 pstmt = rscConn.prepareStatement( QUERY ); // 5.6.7.0 (2013/07/27) DBID=RESOURCE のコネクション 425 pstmt.setString( 1,SYSTEM_ID ); 426 pstmt.setString( 2,HOST_URL ); // 4.1.0.0 (2007/12/21) 427 Map<String,String> userMap = new HashMap<String,String>(100); 428 resultSet = pstmt.executeQuery(); 429 430 while( resultSet.next() ) { 431 String key = resultSet.getString(1); 432 String val = resultSet.getString(2); 433 if( val != null && val.length() == 0 ) { val = null; } 434 userMap.put( key,val ); 435 } 436 437 System.out.println( " Load DB Resource [" + userMap.size() + "] finished." ); 438 // リソースを?ージします? 439 sysParam.putAll( userMap ); 440 errFlag = false; // エラーでな? 441 } 442 catch (SQLException ex) { 443 // Closer.rollback( connection ); 444 Closer.rollback( defConn ); // 5.6.7.0 (2013/07/27) DBID=DEFAULT のコネクション 445 Closer.rollback( rscConn ); // 5.6.7.0 (2013/07/27) DBID=RESOURCE のコネクション 446 LogWriter.log( ex ); 447 String errMsg = ex.getMessage() + ":" + ex.getSQLState() ; 448 errMsgList.add( errMsg ); 449 } 450 catch (UnsupportedEncodingException ex) { 451 // Closer.rollback( connection ); 452 Closer.rollback( defConn ); // 5.6.7.0 (2013/07/27) DBID=DEFAULT のコネクション 453 Closer.rollback( rscConn ); // 5.6.7.0 (2013/07/27) DBID=RESOURCE のコネクション 454 LogWriter.log( ex ); 455 String errMsg = "UTF-8 がサポ?トされて??Java VM は、正規VMではありません? 456 + ex.getMessage(); 457 errMsgList.add( errMsg ); 458 } 459 catch (RuntimeException ex) { 460 // Closer.rollback( connection ); 461 Closer.rollback( defConn ); // 5.6.7.0 (2013/07/27) DBID=DEFAULT のコネクション 462 Closer.rollback( rscConn ); // 5.6.7.0 (2013/07/27) DBID=RESOURCE のコネクション 463 // 5.7.2.0 (2014/01/10) RuntimeException は、catch しな??します? 464 // LogWriter.log( ex ); 465 // String errMsg = "処?実行できませんでした? + HybsSystem.CR 466 // + " SYSTEM_ID = [" + SYSTEM_ID + "]" + HybsSystem.CR 467 // + ex.getMessage() ; 468 // errMsgList.add( errMsg ); 469 throw ex ; 470 } 471 finally { 472 Closer.resultClose( resultSet ); 473 Closer.stmtClose( pstmt ); 474 if( errFlag ) { 475 // ConnectionFactory.remove( connection, null ); 476 ConnectionFactory.remove( defConn, null ); // 5.6.7.0 (2013/07/27) DBID=DEFAULT のコネクション 477 // ConnectionFactory.remove( rscConn, null ); // 5.6.7.0 (2013/07/27) DBID=RESOURCE のコネクション 478 ConnectionFactory.remove( rscConn, RESOURCE_DBID ); // 5.6.7.3 (2013/08/23) DBID=RESOURCE 漏れ 479 } 480 else { 481 // ConnectionFactory.close( connection, null ); 482 ConnectionFactory.close( defConn, null ); // 5.6.7.0 (2013/07/27) DBID=DEFAULT のコネクション 483 // ConnectionFactory.close( rscConn, null ); // 5.6.7.0 (2013/07/27) DBID=RESOURCE のコネクション 484 ConnectionFactory.close( rscConn, RESOURCE_DBID ); // 5.6.7.3 (2013/08/23) DBID=RESOURCE 漏れ 485 } 486 } 487 488 return sysParam ; 489 } 490 491 /** 492 * エンジン?定義の初期リソース??をDB(GE12)に登録します? 493 * 494 * 初期リソース??は、KBSAKU='0' で登録されて???で、?すべて削除 495 * してから、?てのリソース??を追?ると?形をとります? 496 * ただし?属???(名称?要など)を別途登録する場合?、?て? 497 * 削除せずに、UPDATE する方向で検討したいと思います? 498 * なお?こ???をDB登録する?は、リソースの設定?を変えたい場合に? 499 * キーが判らな?JavaDOCからしか読み取れな?のでは不便な為に 500 * 用意しておく?で、?部では SystemData オブジェクトとして定義 501 * されて?値を使用するため、この??タベ?ス値は、使用して?せん? 502 * 503 * @param conn 登録用コネクション(リソース用) 504 * @param map 入力シス?パラメータマッ? 505 * @throws SQLException 506 */ 507 private static void dbResourceUpdate( final Connection conn,final Map<String,String> map ) 508 throws SQLException { 509 510 String systemId = map.get( "SYSTEM_ID" ); 511 String HOST_URL = map.get( "HOST_URL" ); // 4.1.0.0 (2007/12/21) 512 513 // 既存?設定?を?件DELETEします? 514 int delCnt; 515 PreparedStatement pstmt = null; 516 try { 517 pstmt = conn.prepareStatement( DEL_SYS ); 518 pstmt.setString( 1, systemId ); 519 pstmt.setString( 2, HOST_URL ); // 4.1.0.0 (2007/12/21) 520 delCnt = pstmt.executeUpdate(); 521 } 522 finally { 523 Closer.stmtClose( pstmt ); 524 } 525 526 // 新設定?を?件INSERTします? 527 Set<String> keyset = map.keySet(); 528 String[] keys = keyset.toArray( new String[keyset.size()] ); 529 530 int insCnt = 0; 531 try { 532 pstmt = conn.prepareStatement( INS_SYS ); 533 for( int i=0; i<keys.length; i++ ) { 534 pstmt.setString( 1,systemId ); 535 pstmt.setString( 2,HOST_URL); 536 pstmt.setString( 3,keys[i] ); 537 pstmt.setInt( 4,( i + 1 ) * 10 ); 538 pstmt.setString( 5,map.get( keys[i] ) ); 539 pstmt.setString( 6,keys[i] ); 540 insCnt += pstmt.executeUpdate(); 541 } 542 } 543 finally { 544 Closer.stmtClose( pstmt ); 545 } 546 547 System.out.print( " DB Context Resource Reconfiguration " ); 548 System.out.println( "DELETE=[" + delCnt + "],INSERT=[" + insCnt + "] finished." ); 549 } 550 551 /** 552 * ServletContext の名称を取得します? 553 * 554 * コン?スト?アクセスされたパス( /training など )の名称を? 555 * 取得します?(アクセス先?仮想フォル?) 556 * 以前???備記述?WEB-INF/web.xml)の display-name 要?見て? 557 * 無ければ、実フォル?を返して?した? 558 * 559 * @param context Servletコン?ス? 560 * 561 * @return コン?スト?コン?スト名 562 */ 563 private static String getContextName( final ServletContext context ) { 564 String name = null; 565 try { 566 String path = context.getResource( "/" ).getFile(); 567 int idx = path.lastIndexOf( '/',path.length()-2 ); 568 name = path.substring( idx+1,path.length()-1 ); 569 } 570 catch( MalformedURLException ex ) { 571 LogWriter.log( ex ); 572 String errMsg = "こ?パス名?、正しいフォー?はありません?" 573 + ex.getMessage(); 574 errMsgList.add( errMsg ); 575 } 576 return name ; 577 } 578 579 /** 580 * ??クラスの public static なフィールドキーと値のマップを作?します? 581 * 主に、エンジン関連のクラスにパラメータファイルをクラスとして定義し? 582 * エンジンとともに配?ます?配?れたクラスを?に、パラメータ? 583 * 読み取ります? 584 * こ?処?? リフレクションを使用してクラスの public static フィールドを 585 * 取得し、LinkedHashMap により、取得?をキープしたまま、Mapを返します? 586 * 587 * @og.rev 5.7.2.0 (2014/01/10) errMsgList は、???に変換してから追?ます? 588 * 589 * @param cls クラスオブジェク? 590 * 591 * @return シス?パラメータのマッ? 592 */ 593 private static Map<String,String> loadParameter( final Class<?> cls ) { // 4.3.3.6 (2008/11/15) Generics警告対? 594 Field[] field = cls.getFields(); // public フィールド?み 595 Map<String,String> map = new LinkedHashMap<String,String>( (int)(field.length * 1.5) ); // ?係数より大きい目に取る? 596 597 try { 598 for( int i=0; i<field.length; i++ ) { 599 if( Modifier.isStatic( field[i].getModifiers() ) ) { 600 map.put( field[i].getName() , (String)field[i].get( null ) ); 601 } 602 } 603 } 604 catch( IllegalAccessException ex ) { 605 LogWriter.log( ex ); 606 // 5.7.2.0 (2014/01/10) errMsgList は、???に変換してから追?ます? 607 // errMsgList.add( ex.getMessage() ); 608 String errMsg = "クラスから、パラメータを取得できませんでした? + HybsSystem.CR 609 + " クラス?[" + cls.getName() + "]" + HybsSystem.CR 610 + ex.getMessage(); 611 errMsgList.add( errMsg ); 612 } 613 614 System.out.println( " ClassLoad " + cls.getName() + " Parameter [" + map.size() + "] finished." ); 615 return map; 616 } 617 618 /** 619 * ??キーワード?ファイルをクラスパスより取得し、キーと値のマップを作?します? 620 * 主に、エンジン関連のクラスにパラメータファイルをPlugInクラスとして定義し?配?ます? 621 * こ?処??取得に、クラスパスの?が関係します???に取得されたキーは、あとから 622 * 読み取られたクラスパスは、?セ?しません? 623 * 624 * @og.rev 5.3.6.0 (2011/06/01) 並び?、キーの名称?する? 625 * @og.rev 5.7.2.0 (2014/01/10) errMsgList は、???に変換してから追?ます? 626 * @og.rev 5.7.2.0 (2014/01/10) RuntimeException は、catch しな??します? 627 * 628 * @param keyword クラスオブジェクトを検索する? 629 * 630 * @return キーと値のマッ? 631 */ 632 private static Map<String,String> loadParameter( final String keyword ) { 633 // Map<String,String> map = new HashMap<String,String>(); 634 Map<String,String> map = new TreeMap<String,String>(); // 5.3.6.0 (2011/06/01) 並び?、キーの名称?する? 635 try { 636 ClassLoader loader = Thread.currentThread().getContextClassLoader(); 637 Enumeration<URL> enume = loader.getResources( keyword ); // 4.3.3.6 (2008/11/15) Generics警告対? 638 while( enume != null && enume.hasMoreElements() ) { 639 URL url = enume.nextElement(); // 4.3.3.6 (2008/11/15) Generics警告対? 640 // jar:file:/実ディレクトリ また?、file:/実ディレクトリ 641 String dir = url.getFile(); 642 // System.out.println( dir ); 643 644 FindClassFiles filenames = new FindClassFiles( dir,keyword ); 645 String[] names = filenames.getFilenames(); 646 for( int i=0; i<names.length; i++ ) { 647 String val = names[i]; 648 String key = val.substring( val.lastIndexOf( '.' )+1 ); 649 if( key.indexOf( '_' ) >= 0 && !map.containsKey( key ) && key.indexOf( '$' ) < 0 ) { 650 map.put( key , val ); 651 } 652 } 653 System.out.println( " FileCheck " + dir + " [" + names.length + "] find." ); 654 } 655 } 656 catch( IOException ex ) { 657 LogWriter.log( ex ); 658 // 5.7.2.0 (2014/01/10) errMsgList は、???に変換してから追?ます? 659 // errMsgList.add( ex.getMessage() ); 660 String errMsg = "キーワードから?パラメータを取得できませんでした? + HybsSystem.CR 661 + " キーワード名=[" + keyword + "]" + HybsSystem.CR 662 + ex.getMessage(); 663 errMsgList.add( errMsg ); 664 } 665 // 5.7.2.0 (2014/01/10) RuntimeException は、catch しな??します? 666 // catch( RuntimeException ex ) { 667 // LogWriter.log( ex ); 668 // errMsgList.add( ex.getMessage() ); 669 // } 670 System.out.println( " FileLoad " + keyword + " Parameter [" + map.size() + "] finished." ); 671 return map; 672 } 673 }