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 }