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.taglib;
017
018 import static org.opengion.fukurou.util.StringUtil.nval;
019
020 import java.io.File;
021 import java.io.PrintWriter;
022 import java.sql.Connection;
023 import java.sql.SQLException;
024
025 import org.opengion.fukurou.db.ConnectionFactory;
026 import org.opengion.fukurou.util.StringUtil;
027 import org.opengion.hayabusa.common.HybsSystem;
028 import org.opengion.hayabusa.common.HybsSystemException;
029 import org.opengion.hayabusa.common.SystemInstaller;
030
031 /**
032 * シスãƒ?ƒ のインストã?ルを行うためのタグですã?
033 *
034 * シスãƒ?ƒ インストã?ル用のアーカイãƒ?ZIP)形式をæŒ?®šすることで、以下ã?設定を自動で行いますã?
035 * â‘?ebapps以下へのコンãƒ?‚ストファイルの展開T
036 * ②Tomcatのコンãƒ?‚スト設å®?
037 * ③å�?¨®DB環å¢??インストã?ル
038 *
039 * 5.6.7.0 (2013/07/27)
040 * ※ インストã?ルするãƒ??タベã?スは、dbid パラメータでæŒ?®šできますが、リソースを登録するãƒ??タベã?スは
041 * 実行してã�?‚‹ コンãƒ?‚ストã? RESOURCE_DBID で、外部からæŒ?®šできません。ご注意くã�?�•ã�??
042 *
043 * こã?アーカイブã?、ルートディレクトリにコンãƒ?‚ストパスのドキュメントã?ースがé?置されてã�?‚‹å¿?¦�がありますã?
044 *
045 * [アーカイブã?構æ?]
046 * xx.zip - gf - db - ... (DB環å¢?‚¤ンストã?ル用のスクリプト)
047 * - filetemp - ... (ä¸?™‚ファイルの保存å?æ‰?※中身は空)
048 * - jsp - ... (画面JSP)
049 * - log - ... (ログファイルの保存å?æ‰?※中身は空)
050 * - WEB-INF - ... (接続å?æƒ??、openGionのjarファイル)
051 * - [CONTEXT].xml(コンãƒ?‚スト設定ファイル)
052 *�
053 * ※WEB-INF直下ã?[CONTEXT].xmlは、Tomcatのconfãƒ?‚£レクトリ以下に、コンãƒ?‚スト設定ファイルとして、コピã?されますã?
054 * なおã?こã?[CONTEXT].xmlがアーカイブに含まれてã�?�ªã�??合ã?インストã?ルは行われませんã€?
055 *
056 * @og.formSample
057 * ●形式ï¼?lt;og:sysInstall fileURL="…" insFile="…" />
058 * ●body?šなã�?
059 *
060 * ●Tag定義??
061 * <og:sysInstall
062 * insFile ○ã?TAG】インストã?ルファイルを指定しまã�?å¿??)ã€?
063 * fileURL 【TAG】操作するファイルのãƒ?‚£レクトリを指定しまã�?(初期値:FILE_URL[=filetemp/])
064 * dbid 【TAGã€?通常は使ã�?�¾せん)インストã?ルを行うDB接続IDを指定しますã?
065 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
066 * />
067 *
068 * ●使用ä¾?
069 * ・Calc(ods)ファイルをPDFに変換
070 * <og:sysInstall insFile="context.zip" />
071 *
072 * @og.group そã?他部å“?
073 *
074 * @version 4.0
075 * @author Hiroki Nakamura
076 * @since JDK5.0,
077 */
078 public class SysInstallTag extends CommonTagSupport {
079 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
080 private static final String VERSION = "5.6.7.0 (2013/07/27)";
081
082 private static final long serialVersionUID = 567020130727L ;
083
084 private String insFile = null;
085 private String fileURL = HybsSystem.sys( "FILE_URL" );
086 private String dbid = null; // 5.5.4.5 (2012/07/27) 新規追åŠ?
087
088 private final String RESOURCE_DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.6.7.0 (2013/07/27) リソース系DBID
089
090 /**
091 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
092 *
093 * @return 後続å?ç�??æŒ?¤º( SKIP_BODY )
094 */
095 @Override
096 public int doStartTag() {
097 return ( SKIP_BODY );
098 }
099
100 /**
101 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
102 *
103 * @og.rev 5.5.4.5 (2012/07/27) dbid 新規追åŠ?
104 * @og.rev 5.6.7.0 (2013/07/27) リソース登録用とアプリケーション登録用のコネクションをå?ける
105 *
106 * @return 後続å?ç�??æŒ?¤º
107 */
108 @Override
109 public int doEndTag() {
110 debugPrint();
111
112 String directory = HybsSystem.url2dir( fileURL );
113 File buildFile = new File( StringUtil.urlAppend( directory,insFile ) );
114
115 // Connection conn = ConnectionFactory.connection( null, null );
116 // Connection conn = ConnectionFactory.connection( dbid, getApplicationInfo() ); // 5.5.4.5 (2012/07/27)
117 // PrintWriter out = new PrintWriter( pageContext.getOut() );
118 // SystemInstaller installer = new SystemInstaller( conn, out );
119
120 // try {
121 // installer.install( buildFile );
122 // }
123 //// catch( SQLException ex ) {
124 // catch( Throwable ex ) {
125 // String msg = "インストã?ル中に、DB処ç�?�§エラーが発生しましたã€?;
126 // throw new HybsSystemException( msg, ex );
127 // }
128
129 // 5.6.7.0 (2013/07/27) リソース登録用とアプリケーション登録用のコネクションをå?ける
130 // エラー処ç�?‚‚合わせて、修正しておきますã?
131 Connection defConn = null;
132 Connection rscConn = null;
133 boolean errFlag = true;
134 try {
135 defConn = ConnectionFactory.connection( dbid, getApplicationInfo() );
136 rscConn = ConnectionFactory.connection( RESOURCE_DBID, getApplicationInfo() );
137 PrintWriter out = new PrintWriter( pageContext.getOut() );
138 SystemInstaller installer = new SystemInstaller( defConn , rscConn , out ); // 5.6.7.0 (2013/07/27)
139 installer.install( buildFile );
140 errFlag = false; // エラーではなã�?
141 }
142 catch( Throwable ex ) {
143 String errMsg = "インストã?ル中に、DB処ç�?�§エラーが発生しましたã€?
144 + ex.getMessage() + HybsSystem.CR ;
145 throw new HybsSystemException( errMsg, ex );
146 }
147 finally {
148 // 以下ã?コーãƒ?‚£ングの見直しをè€?�ˆるå¿?¦�有りã?
149 // Connection はプã?ルしてã�?‚‹為、close() してもå?利用されるだけã?
150 if( errFlag ) {
151 ConnectionFactory.remove( defConn,dbid ); // 削除
152 ConnectionFactory.remove( rscConn,RESOURCE_DBID );
153 }
154 else {
155 ConnectionFactory.close( defConn,dbid ); // 返却
156 ConnectionFactory.close( rscConn,RESOURCE_DBID );
157 }
158 }
159
160 return( EVAL_PAGE );
161 }
162
163 /**
164 * タグリブオブジェクトをリリースしますã?
165 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
166 *
167 * @og.rev 5.5.4.5 (2012/07/27) dbid 新規追åŠ?
168 */
169 @Override
170 protected void release2() {
171 super.release2();
172 insFile = null;
173 fileURL = HybsSystem.sys( "FILE_URL" );
174 dbid = null; // 5.5.4.5 (2012/07/27) 新規追åŠ?
175 }
176
177 /**
178 * 【TAG】操作するファイルのãƒ?‚£レクトリを指定しまã�?
179 * (初期値:FILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
180 *
181 * @og.tag
182 * こã?属æ?でæŒ?®šされるãƒ?‚£レクトリのファイルを操作しますã?
183 * æŒ?®š方法ã?ã€??常の fileURL 属æ?と同様に、å?頭がã?'/' (UNIX) またã?ã€?¼’文字目がã?
184 * ":" (Windows)の場合ã?、指定ã?URLそã?ままのãƒ?‚£レクトリに、そã�?�§なã�??合ã?ã€?
185 * (初期値:シスãƒ?ƒ 定数のFILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
186 *
187 * @param url ファイルURL
188 * @see org.opengion.hayabusa.common.SystemData#FILE_URL
189 */
190 public void setFileURL( final String url ) {
191 String furl = nval( getRequestParameter( url ),null );
192 if( furl != null ) {
193 char ch = furl.charAt( furl.length()-1 );
194 if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
195 fileURL = StringUtil.urlAppend( fileURL,furl );
196 }
197 }
198
199 /**
200 * 【TAG】インストã?ルファイルを指定しますã?
201 *
202 * @og.tag
203 * インストã?ルファイルを指定しますã?
204 * å�?‚³ンãƒ?‚ストã?インストã?ル用アーカイブをæŒ?®šするå¿?¦�がありますã?
205 *
206 * @param fname 出力ファイルå�?
207 */
208 public void setInsFile( final String fname ) {
209 insFile = nval( getRequestParameter( fname ),insFile );
210 }
211
212 /**
213 * 【TAGã€?通常は使ã�?�¾せん)インストã?ルを行うDB接続IDを指定しますã?
214 *
215 * @og.tag Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
216 *
217 * @og.rev 5.5.4.5 (2012/07/27) dbid 新規追åŠ?
218 *
219 * @param id ãƒ??タベã?ス接続ID
220 */
221 public void setDbid( final String id ) {
222 dbid = nval( getRequestParameter( id ),dbid );
223 }
224
225 /**
226 * こã?オブジェクトã?æ–?—å?表現を返しますã?
227 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
228 *
229 * @return こã?クラスのæ–?—å?表現
230 */
231 @Override
232 public String toString() {
233 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
234 .println( "VERSION" ,VERSION )
235 .println( "insFile" ,insFile )
236 .println( "fileURL" ,fileURL )
237 .println( "dbid" ,dbid ) // 5.5.4.5 (2012/07/27) 新規追åŠ?
238 .println( "Other..." ,getAttributes().getAttribute() )
239 .fixForm().toString() ;
240 }
241 }