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.BufferedReader;
019 import java.io.File;
020 import java.io.InputStream;
021 import java.io.InputStreamReader;
022 import java.io.PrintWriter;
023 import java.io.Reader;
024 import java.io.UnsupportedEncodingException;
025 import java.sql.Connection;
026 import java.sql.PreparedStatement;
027 import java.sql.ResultSet;
028 import java.sql.SQLException;
029 import java.sql.Statement;
030 import java.util.ArrayList;
031 import java.util.List;
032 import java.util.Locale;
033
034 import org.opengion.fukurou.util.Closer;
035 import org.opengion.fukurou.util.FileUtil;
036 import org.opengion.fukurou.util.StringUtil;
037 import org.opengion.fukurou.util.ZipFileUtil;
038 import org.opengion.fukurou.xml.HybsXMLSave;
039 import org.opengion.fukurou.db.DBUtil;
040
041 /**
042 * シスãƒ?ƒ の自動インストã?ルと自動更新を行いますã?
043 *
044 * (1)初期インストã?ル・自動更新(#autoInsUpd)
045 * â‘??期è?動インストã?ルを行うには、起動時の環å¢?¤‰数にINSTALL_CONTEXTSã�?
046 * 設定されてã�?‚‹å¿?¦�がありますã?
047 * こã?環å¢?¤‰数が設定されてã�?‚‹場合ã?シスãƒ?ƒ リソースãƒ??ブル(GE12)が存在しなければã€?
048 * エンジンがインストã?ルされてã�?�ªã�?�¨判断しã?自動インストã?ルを行いますã?
049 * INSTALL_CONTEXTSにge,gfが指定されてã�?‚‹場合ã?ã€?–‹発環å¢?‚’含めたフルバã?ジョンã�?
050 * インストã?ルされますã?
051 * geのみが指定されてã�?‚‹場合ã?、コアモジュールであるgeのみがインストã?ルされますã?
052 *
053 * インストã?ルスクリプトはã€?
054 * webapps/[CONTEXT]/db/[DBNAME]/xml/install DBID=DEFAULT
055 * webapps/[CONTEXT]/db/[DBNAME]/xml/update DBID=DEFAULT
056 * 以下にあるXMLファイルがå?て実行されますã?
057 * またã?同時に
058 * webapps/[CONTEXT]/db/common/xml/install DBID=DEFAULT
059 * webapps/[CONTEXT]/db/common/xml/update DBID=DEFAULT
060 * webapps/[CONTEXT]/db/resource/xml/install DBID=RESOURCE (5.6.7.0 (2013/07/27) 追åŠ?
061 * webapps/[CONTEXT]/db/resource/xml/update DBID=RESOURCE (5.6.7.0 (2013/07/27) 追åŠ?
062 * 以下にあるãƒ??タロードスクリプトもå?て実行されますã?
063 *
064 * ②自動更新につã�?�¦は、シスãƒ?ƒ リソースãƒ??ブル(GE12)の更新と、各シスãƒ?ƒ の更新の2つがありますã?
065 * GE12更新の判断基準ã?、シスãƒ?ƒ ID='**'に格納されてã�?‚‹バã?ジョン(同ä¸??GE12を使用ã�?
066 * てã�?‚‹シスãƒ?ƒ のæœ?¤§バã?ジョン番号)がアãƒ??した場合ですã?
067 * こã?場合に、エンジンå†?ƒ¨で保持してã�?‚‹XMLファイルよりシスãƒ?ƒ リソースの再ロードを行いますã?
068 * å�?‚·スãƒ?ƒ の更新の判断基準ã?、シスãƒ?ƒ ID=å�?‚·スãƒ?ƒ のバã?ジョン番号がアãƒ??されたå?合ですã?
069 *
070 * 更新スクリプトはã€?
071 * webapps/[CONTEXT]/db/[DBNAME]/xml/update DBID=DEFAULT
072 * 以下にあるXMLファイルがå?て実行されますã?
073 * またã?同時に
074 * webapps/[CONTEXT]/db/common/xml/update DBID=DEFAULT
075 * webapps/[CONTEXT]/db/resource/xml/update DBID=RESOURCE (5.6.7.0 (2013/07/27) 追åŠ?
076 * 以下にあるãƒ??タロードスクリプトもå?て実行されますã?
077 *
078 * (2)インストã?ル(#install)
079 * 自動インストã?ルはã€??常は画面からコンãƒ?‚ストã?アーカイブをæŒ?®šして行いますã?
080 *
081 * アーカイブã?å†?®¹としては、アーカイブã?直下がコンãƒ?‚スト名のフォルãƒ?�¨なってã�?‚‹å¿?¦�がありますã?
082 * こã?コンãƒ?‚ストフォルãƒ?‚’webapps以下に展開しますã?
083 *
084 * またã?Tomcatのコンãƒ?‚ストã?設定ファイルã€?[CONTEXT].xml)ã�?WEB-INFの直下を配置してã�?‚‹å¿?¦�がありますã?
085 *
086 * こã?インストã?ルでは、Tomcatに対するコンãƒ?‚スト定義のXMLファイルの配備及ã?ã€?
087 * å�?¨®DB、データのロードを行いますã?
088 *
089 * インストã?ルスクリプトはã€?
090 * webapps/[CONTEXT]/db/[DBNAME]/xml/install DBID=DEFAULT
091 * 以下にあるXMLファイルがå?て実行されますã?
092 * またã?同時に
093 * webapps/[CONTEXT]/db/common/xml/install DBID=DEFAULT
094 * webapps/[CONTEXT]/db/resource/xml/install DBID=RESOURCE (5.6.7.0 (2013/07/27) 追åŠ?
095 * 以下にあるãƒ??タロードスクリプトもå?て実行されますã?
096 *
097 * @og.rev 4.3.6.6 (2009/05/15) 新規作æ?
098 * @og.group 初期åŒ?
099 *
100 * @version 4.0
101 * @author Hiroki Nakamura
102 * @since JDK5.0,
103 */
104 public final class SystemInstaller {
105 // private final String VERSION; // 5.5.4.4 (2012/07/20) VERSION は、直接 BuildNumber.ENGINE_INFO を使用ã€?
106 // private final Connection connection;
107 private final Connection defConn; // 5.6.7.0 (2013/07/27) DBID=DEFAULT のコネクション
108 private final Connection rscConn; // 5.6.7.0 (2013/07/27) DBID=RESOURCE のコネクション
109 private final PrintWriter out; // 5.1.9.0 (2010/08/01)
110 private final String DBNAME; // 5.5.4.4 (2012/07/20) 共通化 (DBID=DEFAULT のDBå�?
111
112 /** エンジン共通パラメータ(SYSTEM_ID='**' KBSAKU='0')のXML ファイルのæŒ?®?{@value} */
113 public static final String GE12_XML = "org/opengion/hayabusa/common/GE12.xml";
114
115 /** エンジン共通パラメータ(SYSTEM_ID='**' KBSAKU='0')のENGINE_INFO 読み取りクエリー {@value} */
116 public static final String SEL_MAX_ENG = "select PARAM from GE12"
117 + " where SYSTEM_ID='**' and PARAM_ID='ENGINE_INFO'"
118 + " and FGJ='1' and KBSAKU='0'" ;
119
120 /** エンジン個別(SYSTEM_ID='個別' KBSAKU='0' CONTXT_PATH='自身')のバã?ジョンæƒ??を取得するクエリーー{@value} 4.3.6.6 (2009/05/15) */
121 public static final String SEL_SYS_ENG = "select PARAM from GE12"
122 + " where SYSTEM_ID=? and PARAM_ID='ENGINE_INFO' and KBSAKU='0' and CONTXT_PATH=? and FGJ='1'";
123
124 private static final String FS = File.separator ; // 5.5.4.4 (2012/07/20) static�
125 private static final String APP_BASE = System.getenv( "APP_BASE" ) + FS; // 5.5.4.4 (2012/07/20) static�
126
127
128 /**
129 * ãƒ??タベã?ス処ç�?‚’おこなã�?�«当たりã?処ç�??タイプをæŒ?®šするためã?、enum 定義ですã?
130 * æ–?—å?で扱ってã�?�Ÿç®?‰€をã?enum と置き換えますã?
131 *
132 * @og.rev 5.5.4.4 (2012/07/20) 新規追åŠ?
133 */
134 private static enum EXEC_TYPE { INSTALL , UPDATE } ;
135
136 /**
137 * シスãƒ?ƒ インストã?ル・更新クラスのコンストラクタでã�?
138 *
139 * なおã?こã?クラスの中の処ç�?�§、エラーが発生してもã?Connection は、close 等しませんã€?
140 * 呼び出しå?で、try ??finally で、å?ç�?�—てくださいã€?
141 *
142 * @og.rev 5.5.4.4 (2012/07/20) VERSIONは、直接 BuildNumber.ENGINE_INFO を使用ã€?
143 * @og.rev 5.6.7.0 (2013/07/27) アプリケーション登録用とリソース登録用のコネクションをå?ける
144 *
145 * @param defConn アプリケーション登録用コネクション
146 * @param rscConn リソース登録用コネクション
147 * @param out 表示用のWriter
148 */
149 // public SystemInstaller( final Connection conn, final PrintWriter out ) {
150 public SystemInstaller( final Connection defConn, final Connection rscConn, final PrintWriter out ) {
151 // connection = conn;
152 this.defConn = defConn; // 5.6.7.0 (2013/07/27) アプリケーション登録用
153 this.rscConn = rscConn; // 5.6.7.0 (2013/07/27) リソース登録用
154 this.out = out;
155
156 // VERSION = BuildNumber.ENGINE_INFO;
157
158 // 5.6.7.0 (2013/07/27) ProductName は、DBUtil 経由で取得するã?
159 // String dbName ;
160 // try {
161 // dbName = connection.getMetaData().getDatabaseProductName().toLowerCase( Locale.JAPAN );
162 // }
163 // catch( SQLException ex ) {
164 // out.println( " -> DatabaseProductName is NONE " + ex.getMessage() );
165 // dbName = "none";
166 // }
167 // DBNAME = dbName;
168
169 DBNAME = DBUtil.getProductName( defConn ); // 5.6.7.0 (2013/07/27) DBID=DEFAULT のDBå�?
170 }
171
172 /**
173 * シスãƒ?ƒ の初期自動インストã?ル・自動更新を行いますã?
174 *
175 * 詳細は、クラスドキュメントを参ç?して下さã�??
176 *
177 * @og.rev 5.1.9.0 (2010/08/01) 新規作æ?
178 * @og.rev 5.5.4.4 (2012/07/20) VERSIONは、直接 BuildNumber.ENGINE_INFO を使用ã€?
179 *
180 * @param systemId シスãƒ?ƒ ID
181 * @param context コンãƒ?‚スト名
182 * @param hostUrl ホスト文字å?
183 * @throws UnsupportedEncodingException エンコード名 "UTF-8" が存在しなかったå?合ã?
184 * @see #dbXMLResourceInsert()
185 */
186 // public void autoInsUpd( final String systemId, final String context, final String hostUrl ) throws SQLException, UnsupportedEncodingException {
187 public void autoInsUpd( final String systemId, final String context, final String hostUrl ) throws UnsupportedEncodingException {
188 String oldMaxVersion = getOldMaxVersion();
189 String oldSystemVersion = getOldSystemVersion( systemId, hostUrl );
190
191 out.println( " System Version Information ( " + systemId + " )" );
192 // out.println( " Load Version [ " + VERSION + " ]" );
193 out.println( " Load Version [ " + BuildNumber.ENGINE_INFO + " ]" ); // 5.5.4.4 (2012/07/20)
194 out.println( " -> Resource Version[ " + oldMaxVersion + " ]" );
195 out.println( " -> System Version[ " + oldSystemVersion + " ]" );
196
197 // 初期自動インストã?ル
198 if( "none".equalsIgnoreCase( oldMaxVersion ) ) {
199 out.println( " !!! openGion ENVIROMENT IS NOT INSTALLED !!!" );
200
201 String INSTALL_CONTEXTS = System.getenv( "INSTALL_CONTEXTS" );
202 if( INSTALL_CONTEXTS == null || INSTALL_CONTEXTS.length() == 0 ) {
203 out.println( " !!! \"INSTALL_CONTEXT\" IS NOT CONFIGURED\" !!!" );
204 out.println( " !!! \"SET ENRIVOMENT PARAMETER NAMED \"INSTALL_CONTEXT\" ON INIT_SCRIPT !!!" );
205 return;
206 }
207 out.println( " Start Initiall Enviroment Install : install type ( " + INSTALL_CONTEXTS + " )" );
208 String[] insSys = StringUtil.csv2Array( INSTALL_CONTEXTS );
209 for( int i=0; i<insSys.length; i++ ) {
210 out.println( " install ( " + insSys[i] + " )" );
211 // loadXMLScript( "install", insSys[i] );
212 loadXMLScript( EXEC_TYPE.INSTALL, insSys[i] );
213 // connection.commit();
214 // Closer.commit( connection ); // 5.5.4.4 (2012/07/20) commit で、SQLException を発生させなã�??
215 out.println( " completed ( " + insSys[i] + " )" );
216 }
217
218 out.println( " Start SystemParameter reload" );
219 dbXMLResourceInsert();
220 // connection.commit();
221 // Closer.commit( connection ); // 5.5.4.4 (2012/07/20) commit で、SQLException を発生させなã�??
222 out.println( " completed" );
223 }
224 // 自動更新
225 else {
226 // if ( oldSystemVersion == null || oldSystemVersion.compareTo( VERSION ) < 0 ){
227 if ( oldSystemVersion == null || oldSystemVersion.compareTo( BuildNumber.ENGINE_INFO ) < 0 ){ // 5.5.4.4 (2012/07/20)
228 out.println( " Start Enviroment Update ( " + context + " )" );
229 // loadXMLScript( "update", context );
230 loadXMLScript( EXEC_TYPE.UPDATE , context );
231 // connection.commit();
232 // Closer.commit( connection ); // 5.5.4.4 (2012/07/20) commit で、SQLException を発生させなã�??
233 out.println( " completed ( " + context + " )" );
234 }
235
236 // if( oldMaxVersion == null || oldMaxVersion.compareTo( VERSION ) < 0 ){
237 if( oldMaxVersion == null || oldMaxVersion.compareTo( BuildNumber.ENGINE_INFO ) < 0 ){ // 5.5.4.4 (2012/07/20)
238 out.println( " Start SystemParameter Reload" );
239 dbXMLResourceInsert();
240 // connection.commit();
241 // Closer.commit( connection ); // 5.5.4.4 (2012/07/20) commit で、SQLException を発生させなã�??
242 out.println( " completed" );
243 }
244 }
245 }
246
247 /**
248 * シスãƒ?ƒ の自動インストã?ルを行いますã?
249 *
250 * 詳細は、クラスドキュメントを参ç?して下さã�??
251 *
252 * @og.rev 5.1.9.0 (2010/08/01) 新規作æ?
253 * @og.rev 5.5.4.4 (2012/07/20) FS , APP_BASE をã?共通に設å®?
254 *
255 * @param buildArchive コンãƒ?‚ストã?アーカイブファイル
256 */
257 // public void install( final File buildArchive ) throws SQLException {
258 public void install( final File buildArchive ) {
259 // final String FS = File.separator ;
260 // final String tempDir = HybsSystem.sys( "REAL_PATH" ) + HybsSystem.sys( "FILE_URL" ) + String.valueOf( System.currentTimeMillis() + FS );
261 final String tempDir = HybsSystem.sys( "REAL_PATH" ) + HybsSystem.sys( "FILE_URL" ) + System.currentTimeMillis() + FS;
262 final String ctxtXmlDir = System.getenv( "CATALINA_HOME" ) + FS + "conf" + FS + System.getenv( "ENGINE_NAME" ) + FS + "localhost" + FS;
263 // final String appBase = System.getenv( "APP_BASE" ) + FS; // 5.5.4.4 (2012/07/20) APP_BASE をå?通に設å®?
264
265 out.println( " Check Archive File and Enviroment" );
266
267 // アーカイブã?存在チェãƒ?‚¯
268 if( !buildArchive.exists() ) {
269 out.println( " !!! Archive File does not exists File=[ " + buildArchive.getAbsolutePath() + "] !!!" );
270 out.println( " !!! Install Aborted !!! " );
271 return;
272 }
273
274 // アーカイブをä¸?™‚ファイルに展開しますã?
275 ZipFileUtil.unCompress( tempDir, buildArchive.getAbsolutePath() );
276
277 // アーカイブã?å†?®¹チェãƒ?‚¯
278 File[] ctxts = new File( tempDir ).listFiles();
279 for( File ctxt : ctxts ) {
280 // 5.1.9.0 (2010/08/01) if の条件をå?れ替えますã?(Avoid if (x != y) ..; else ..;)
281 String context = ctxt.getName();
282 if( ctxt.isDirectory() ) {
283 // String context = ctxt.getName();
284
285 // アーカイブ中に[CONTEXT].xmlが存在してã�?�ªã�??合ã?エラー(何も処ç�?�—なã�?
286 File srcCtxtXml = new File( tempDir + context + FS + "WEB-INF" + FS + context + ".xml" );
287 if( !srcCtxtXml.exists() ) {
288 out.println( " !!! Context XML Does not exists =[ " + srcCtxtXml.getAbsolutePath() + "] !!!" );
289 out.println( " !!! Install Aborted !!! " );
290 return;
291 }
292
293 // [CONTEXT].xmlが既に存在してã�?‚‹場合ã?エラー(何も処ç�?�—なã�?
294 File ctxtXml = new File( ctxtXmlDir + context + ".xml" );
295 if( ctxtXml.exists() ) {
296 out.println( " !!! Context XML File Already Installed File=[ " + ctxtXml.getAbsolutePath() + "] !!!" );
297 out.println( " !!! Install Aborted !!! " );
298 return;
299 }
300
301 // webapps/[CONTEXT]が既に存在してã�?‚‹場合ã?エラー(何も処ç�?�—なã�?
302 // File webAppsDir = new File( appBase + context ); // 5.5.4.4 (2012/07/20) APP_BASE をå?通に設å®?
303 File webAppsDir = new File( APP_BASE + context );
304 if( webAppsDir.exists() ) {
305 out.println( " !!! Context Path Already Exists Path=[ " + webAppsDir.getAbsolutePath() + "] !!!" );
306 out.println( " !!! Install Aborted !!! " );
307 return;
308 }
309
310 // out.println( " This Archive includes SYSTEM ( " + ctxt.getName() + " ) for Install" );
311 out.println( " This Archive includes SYSTEM ( " + context + " ) for Install" ); // 5.5.4.4 (2012/07/20)
312 }
313 // ファイルが含まれてã�?‚‹場合ã?エラー(何も処ç�?�—なã�?
314 else {
315 // out.println( " !!! This Archive is not Installer. Because include FILE not DIRECTORY. File=[ " + ctxt.getName() + "] !!!" );
316 out.println( " !!! This Archive is not Installer. Because include FILE not DIRECTORY. File=[ " + context + "] !!!" ); // 5.5.4.4 (2012/07/20)
317 out.println( " !!! Install Aborted !!! " );
318 return;
319 }
320 }
321
322 // アーカイブをコンãƒ?‚ストファイル以下にコピã?
323 for( File ctxt : ctxts ) {
324 String context = ctxt.getName();
325 out.println( " Start Enviroment Install ( " + context + " )" );
326
327 // コンãƒ?‚ストã?ファイルをコピã?しますã?
328 // FileUtil.copyDirectry( tempDir + context, appBase + context ); // 5.5.4.4 (2012/07/20) APP_BASE をå?通に設å®?
329 FileUtil.copyDirectry( tempDir + context, APP_BASE + context );
330
331 // [CONTEXT].xmlをTomcatのconf以下に展開しますã?
332 FileUtil.copy( tempDir + context + FS + "WEB-INF" + FS + context + ".xml", ctxtXmlDir + context + ".xml" );
333
334 // DBスクリプトをロードしますã?
335 // loadXMLScript( "install", context );
336 loadXMLScript( EXEC_TYPE.INSTALL , context );
337 // connection.commit();
338 // Closer.commit( connection ); // 5.5.4.4 (2012/07/20) commit で、SQLException を発生させなã�??
339 out.println( " completed ( " + context + " )" );
340 }
341 out.println( " Install Process All Completed." );
342 }
343
344 /**
345 * インストã?ル、更新用のXMLスクリプトをロードしますã?
346 *
347 * @og.rev 5.0.0.2 (2009/09/15) .xmlファイル以外ã?読み込まなã�?‚ˆã�?�«修正
348 * @og.rev 5.1.1.0 (2009/12/01) コメントを出して、å?ç�?¸とã�?�†ことが判る様にしますã?
349 * @og.rev 5.1.9.0 (2010/08/01) DB非依存ã?定義・ãƒ??タの読み込み対å¿?
350 * @og.rev 5.5.4.4 (2012/07/20) FS , APP_BASE , DBNAME をã?共通に設å®?
351 * @og.rev 5.6.7.0 (2013/07/27) アプリケーション登録用とリソース登録用のコネクションをå?ける
352 *
353 * @param type 更新タイプ[EXEC_TYPE.INSTALL/EXEC_TYPE.UPDATE]
354 * @param context コンãƒ?‚スト名
355 */
356 // private void loadXMLScript( final String type, final String context ) throws SQLException {
357 private void loadXMLScript( final EXEC_TYPE type, final String context ) {
358 // final String FS = File.separator ;
359 // final String APP_BASE = System.getenv( "APP_BASE" ); // 5.5.4.4 (2012/07/20) APP_BASE をå?通に設å®?
360 // final String DBNAME = connection.getMetaData().getDatabaseProductName().toLowerCase( Locale.JAPAN );
361
362 // DB名からスクリプトをæ?納してã�?‚‹フォルãƒ?‚’探しますã?
363 // String scriptBase = APP_BASE + FS + context.toLowerCase( Locale.JAPAN ) + FS + "db";
364 String scriptBase = APP_BASE + context.toLowerCase( Locale.JAPAN ) + FS + "db";
365 File[] dbDir = new File( scriptBase ).listFiles();
366 if( dbDir == null || dbDir.length == 0 ) {
367 out.println( " DB Folder not found. [" + scriptBase + "]" );
368 return;
369 }
370
371 String scriptPath = null;
372 for ( int i = 0; i < dbDir.length; i++ ) {
373 if ( DBNAME.indexOf( dbDir[i].getName() ) >= 0 ) {
374 scriptPath = dbDir[i].getAbsolutePath();
375 break;
376 }
377 }
378 if( scriptPath == null ) {
379 out.println( " !!! Script Folder for [ " + DBNAME + " ] not found !!!" );
380 return;
381 }
382
383 // webapps/[CONTEXT]/db/[DBNAME]/
384 // execScripts( scriptPath, type );
385 // execScripts( type , scriptPath ); // 5.5.4.4 (2012/07/20) typeのenum化と、引数のé ?•ªを親に合わすã?
386 execScripts( type , scriptPath , defConn ); // 5.6.7.0 (2013/07/27) DBID=DEFAULT に登録
387
388 // 5.1.9.0 (2010/08/01) DB非依存ã?定義・ãƒ??タの読み込み対å¿?
389 // webapps/[CONTEXT]/db/common/
390 // execScripts( scriptBase + FS + "common" + FS, type );
391 // execScripts( type , scriptBase + FS + "common" ); // 5.5.4.4 (2012/07/20) typeのenum化と、引数のé ?•ªを親に合わすã?
392 execScripts( type , scriptBase + FS + "common" , defConn ); // 5.6.7.0 (2013/07/27) DBID=DEFAULT に登録
393
394 // 5.6.7.0 (2013/07/27) DBID=RESOURCE に登録
395 // webapps/[CONTEXT]/db/resource/
396 execScripts( type , scriptBase + FS + "resource" , rscConn ); // 5.6.7.0 (2013/07/27) DBID=RESOURCE に登録
397
398 // // webapps/[CONTEXT]/db/xml å†??スクリプトを実行しまã�?
399 // File[] dataDir = new File( scriptBase + FS + "xml" ).listFiles();
400 // if( dataDir != null && dataDir.length > 0 ) {
401 // for ( int i=0; i<dataDir.length; i++ ) {
402 // String dtNm = dataDir[i].getName() ;
403 // if( dtNm.endsWith( ".xml" ) ) { // 5.0.0.2 (2009/09/15)
404 // Reader reader = new BufferedReader( FileUtil.getBufferedReader( dataDir[i], "UTF-8" ) );
405 // HybsXMLSave save = new HybsXMLSave( connection, dtNm );
406 // save.insertXML( reader );
407 // }
408 // }
409 // out.println( " DB Data Files Installed , [ " + dataDir.length + " ] files loaded " );
410 // }
411 }
412
413 /**
414 * XMLファイルで定義されたDBスクリプトを実行しますã?
415 *
416 * 引数のtypeに応じて、å?ç�?�™るフォルãƒ?�Œ異なりますã?
417 * type=INSTALL の場合ã?、[scriptPath]/xml/install と、[scriptPath]/xml/update 以下ã? xml ファイル
418 * type=それ以外ã?場合ã?、[scriptPath]/xml/update 以下ã? xml ファイル
419 * ですã?
420 *
421 * 現時点では、scriptPath には、下記ã? ?“種類ã?アドレスが渡され、それぞれã?登録するコネクションが異なりますã?
422 * webapps/[CONTEXT]/db/[DBNAME]/ DBID=DEFAULT
423 * webapps/[CONTEXT]/db/common/ DBID=DEFAULT
424 * webapps/[CONTEXT]/db/resource/ DBID=RESOURCE
425 *
426 * @og.rev 5.1.9.0 (2010/08/01) 新規作æ?
427 * @og.rev 5.5.4.4 (2012/07/20) FS , APP_BASE をã?共通に設å®?
428 * @og.rev 5.5.8.4 (2012/11/22) firebird対応ã?フォルãƒ?�˜位commitを行う
429 * @og.rev 5.6.7.0 (2013/07/27) Connection引数追åŠ??リソースとアプリをå?りå?けるã€?
430 * @og.rev 5.6.9.2 (2013/10/18) EXEC_SQL のエラー時に Exception を発行しなã�??
431 *
432 * @param type 更新タイプ[EXEC_TYPE.INSTALL/EXEC_TYPE.UPDATE]
433 * @param scriptPath XMLファイルのあるパス
434 * @param conn コネクションオブジェクãƒ?
435 */
436 // private void execScripts( final String scriptPath, final String type ) {
437 // private void execScripts( final EXEC_TYPE type, final String scriptPath ) {
438 private void execScripts( final EXEC_TYPE type, final String scriptPath, final Connection conn ) {
439 // final String FS = File.separator ;
440
441 // webapps/[CONTEXT]/db/[DBNAME]/xml/(install|update) å†??スクリプトを実行しまã�?
442 List<String> list = new ArrayList<String>();
443
444 // if( "install".equalsIgnoreCase( type ) ) {
445 if( type == EXEC_TYPE.INSTALL ) {
446 FileUtil.getFileList( new File( scriptPath + FS + "xml" + FS + "install" ), true, list );
447 // FileUtil.getFileList( new File( scriptPath + FS + "xml" + FS + "update" + FS + "const" ), true, list );
448 FileUtil.getFileList( new File( scriptPath + FS + "xml" + FS + "update" ), true, list );
449 }
450 else {
451 // FileUtil.getFileList( new File( scriptPath + FS + "xml" + FS + "update" + FS + "const" ), true, list );
452 FileUtil.getFileList( new File( scriptPath + FS + "xml" + FS + "update" ), true, list );
453
454 /*******************************************************************************
455 * updateの場合に、更新前ã?バã?ジョンからの変更スクリプトを実行する機è?がå¿?¦?
456 *******************************************************************************/
457 }
458
459 if( ! list.isEmpty() ) {
460 String dir1 = null; // 5.1.1.0 (2009/12/01)
461 for ( String name : list ) {
462 if( name.endsWith( ".xml" ) ) { // 5.0.0.2 (2009/09/15)
463 File xml = new File( name );
464 // 5.1.1.0 (2009/12/01) 処ç�?¸コメント:フォルãƒ?�˜位に表示
465 String dir2 = xml.getParent();
466 if( dir1 == null || !dir1.equalsIgnoreCase( dir2 ) ) {
467 out.println( " processing ... " + dir2 );
468 dir1 = dir2;
469 // Closer.commit( connection ); // 5.5.8.4 (2012/11/22)
470 Closer.commit( conn ); // 5.6.7.0 (2013/07/27) Connection引数追åŠ?
471 }
472
473 Reader reader = new BufferedReader( FileUtil.getBufferedReader( xml, "UTF-8" ) );
474 // HybsXMLSave save = new HybsXMLSave( connection, xml.getName() );
475 HybsXMLSave save = new HybsXMLSave( conn, xml.getName() ); // 5.6.7.0 (2013/07/27) Connection引数追åŠ?
476 save.onExecErrException( false ); // 5.6.9.2 (2013/10/18) EXEC_SQL のエラー時に Exception を発行しなã�??
477 save.insertXML( reader );
478 }
479 }
480 Closer.commit( conn ); // 5.6.7.0 (2013/07/27) メソãƒ?ƒ‰å†?�§コミットå?ç�?‚’行うã€?
481 out.println( " DB Enviroment " + type + "ed , [ " + list.size() + " ] scripts loaded " );
482 }
483 }
484
485 /**
486 * æœ?¾Œに起動された際ã?バã?ジョン番号を取得しますã?(シスãƒ?ƒ ID='**')
487 *
488 * エンジンがまã�?‚¤ンストã?ルされてã�?�ªã�?‰ã?原因でエラーが発生したå?合ã?ã€?
489 * "none"とã�?�†æ–?—å?を返しますã?
490 *
491 * @og.rev 5.1.1.0 (2009/12/01) 実行エラー時に、rollback を追åŠ?PostgreSQL対å¿?
492 * @og.rev 5.6.7.0 (2013/07/27) リソース用コネクションから取り出しますã?
493 * @og.rev 5.7.2.0 (2014/01/10) ãƒ??ブルが無ã�??に正常終äº?�™るケースがある為、ver の初期値ã‚?"none" にしておきますã?
494 *
495 * @return バã?ジョン番号
496 */
497 private String getOldMaxVersion() {
498 // エンジンパラメータのエンジンæƒ??(バã?ジョン番号 + ビルドタイãƒ?を取得しますã?
499 Statement stmt = null;
500 ResultSet resultSet = null;
501 // String ver = null;
502 String ver = "none"; // 5.7.2.0 (2014/01/10) 初期値ã‚?null â‡?"none" へ変更ã€?
503 try {
504 // stmt = connection.createStatement();
505 stmt = rscConn.createStatement(); // 5.6.7.0 (2013/07/27)
506 resultSet = stmt.executeQuery( SEL_MAX_ENG );
507 while( resultSet.next() ) {
508 ver = resultSet.getString(1);
509 }
510 }
511 catch( SQLException ex ) {
512 // ver = "none"; // 5.7.2.0 (2014/01/10) 初期値を変更したため、設定不要ã?
513 // Closer.rollback( connection ); // 5.1.1.0 (2009/12/01)
514 Closer.rollback( rscConn ); // 5.6.7.0 (2013/07/27)
515 }
516 finally {
517 Closer.resultClose( resultSet );
518 Closer.stmtClose( stmt );
519 }
520 return ver;
521 }
522
523 /**
524 * æœ?¾Œに起動された際ã?バã?ジョン番号を取得しますã?(シスãƒ?ƒ ID=å�?‚·スãƒ?ƒ )
525 *
526 * @og.rev 5.1.1.0 (2009/12/01) 実行エラー時に、rollback を追åŠ?PostgreSQL対å¿?
527 * @og.rev 5.6.7.0 (2013/07/27) リソース用コネクションから取り出しますã?
528 *
529 * @param systemId シスãƒ?ƒ ID
530 * @param hostUrl ホスãƒ?RL
531 *
532 * @return バã?ジョン番号
533 */
534 private String getOldSystemVersion( final String systemId, final String hostUrl ) {
535 // エンジンパラメータのエンジンæƒ??(バã?ジョン番号 + ビルドタイãƒ?を取得しますã?
536 PreparedStatement pstmt = null;
537 ResultSet resultSet = null;
538 String ver = null;
539 try {
540 // pstmt = connection.prepareStatement( SEL_SYS_ENG );
541 pstmt = rscConn.prepareStatement( SEL_SYS_ENG ); // 5.6.7.0 (2013/07/27)
542 pstmt.setString( 1, systemId );
543 pstmt.setString( 2, hostUrl );
544 resultSet = pstmt.executeQuery();
545 while( resultSet.next() ) {
546 ver = resultSet.getString(1);
547 }
548 }
549 catch( SQLException ex ) {
550 // Closer.rollback( connection ); // 5.1.1.0 (2009/12/01)
551 Closer.rollback( rscConn ); // 5.6.7.0 (2013/07/27)
552 }
553 finally {
554 Closer.resultClose( resultSet );
555 Closer.stmtClose( pstmt );
556 }
557 return ver;
558 }
559
560 /**
561 * エンジンå†?ƒ¨定義の初期リソースæƒ??をDB(GE12)に登録しますã?
562 *
563 * 初期リソースæƒ??は、KBSAKU='0' で登録されてã�?‚‹æƒ??で、ä¸?—¦すべて削除
564 * してから、å?てのリソースæƒ??を追åŠ?�™るとã�?�†形をとりますã?
565 * リソースは、すでに、Oracle XDK により XMLファイル化してありますã?
566 * なおã?こã?æƒ??をDB登録するç�?”±は、リソースの設定å?を変えたい場合にã€?
567 * キーが判らなã�?JavaDOCからしか読み取れなã�?のでは不便な為に
568 * 用意しておくã�?�‘で、å?部では SystemData オブジェクトとして定義
569 * されてã�?‚‹値を使用するため、このãƒ??タベã?ス値は、使用してã�?�¾せんã€?
570 *
571 * @og.rev 4.3.6.6 (2009/05/15) バã?ジョン判定部åˆ?‚’åˆ?›¢
572 * @og.rev 5.6.7.0 (2013/07/27) リソース用コネクションに登録しますã?
573 * @og.rev 5.6.9.2 (2013/10/18) EXEC_SQL のエラー時に Exception を発行しなã�??
574 *
575 * @throws UnsupportedEncodingException エンコード名 "UTF-8" が存在しなかったå?合ã?
576 */
577 private void dbXMLResourceInsert() throws UnsupportedEncodingException {
578 // 新設定å?をå?件INSERTしますã?
579 // common フォルãƒ?�«セãƒ?ƒˆして、ClassLoader で読み取る方æ³?
580 ClassLoader loader = Thread.currentThread().getContextClassLoader();
581 InputStream stream = loader.getResourceAsStream( GE12_XML );
582
583 Reader reader = new BufferedReader( new InputStreamReader( stream,"UTF-8" ) );
584 // HybsXMLSave save = new HybsXMLSave( connection,"GE12" );
585 HybsXMLSave save = new HybsXMLSave( rscConn,"GE12" ); // 5.6.7.0 (2013/07/27)
586 save.onExecErrException( false ); // 5.6.9.2 (2013/10/18) EXEC_SQL のエラー時に Exception を発行しなã�??
587 save.insertXML( reader );
588 int insCnt = save.getInsertCount();
589 int delCnt = save.getDeleteCount();
590
591 out.print( " XML Engine Resource Reconfiguration " );
592 out.println( "DELETE=[" + delCnt + "],INSERT=[" + insCnt + "] finished." );
593
594 // 5.6.7.0 (2013/07/27) コミットをメソãƒ?ƒ‰の中で処ç�?�—ますã?
595 Closer.commit( rscConn );
596 }
597 }