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