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