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 org.opengion.fukurou.db.ConnectionFactory;
019 import org.opengion.fukurou.util.Cleanable;
020 import org.opengion.fukurou.util.HybsEntry;
021 import org.opengion.fukurou.util.URLConnect;
022 import org.opengion.fukurou.util.LogWriter;
023 import java.util.Date;
024 import java.util.Map;
025
026 import javax.servlet.ServletContextListener;
027 import javax.servlet.ServletContextEvent;
028 import javax.servlet.ServletContext;
029
030 import java.io.IOException;
031
032 /**
033 * ServletContextListener を実è£?�—たã?コンãƒ?‚ストã?監視オブジェクトですã?
034 * これは、コンãƒ?‚スãƒ?Webアプリケーション)の起å‹?シャãƒ?ƒˆãƒ?‚¦ンを監視できるã€?
035 *
036 * ServletContextListener はã€?
037 *
038 * ConnectionFactory のコネクションプã?ルへのアクセス?�開放
039 * ResourceFactory のリソースæƒ??へのアクセス?�開放
040 *
041 * の作業を行いますã?
042 *
043 * こã?リスナã?は、WEB-INF/web.xml で、çµ?�¿込みますã?
044 *
045 * 【WEB-INF/web.xmlã€?
046 *
047 * <listener>
048 * <listener-class>
049 * org.opengion.hayabusa.common.HybsContextListener
050 * </listener-class>
051 * </listener>
052 *
053 * @og.group 初期åŒ?
054 *
055 * @version 4.0
056 * @author Kazuhiko Hasegawa
057 * @since JDK5.0,
058 */
059 public class HybsContextListener implements ServletContextListener {
060 // 4.0.0.0 (2007/10/26) ConnectionFactoryのhayabusa依存をåˆ?‚‹ために移動してきた
061 static {
062 final Cleanable clr = new Cleanable() {
063 public void clear() {
064 ConnectionFactory.realClose();
065 }
066 };
067 SystemManager.addCleanable( clr );
068 }
069
070 /**
071 * ServletContextListener インターフェースの実è£?
072 *
073 * Webアプリケーションがリクエストを処ç�?�§きる状態になったことã‚?
074 * リスナã?に通知するã€?
075 *
076 * @og.rev 3.0.0.0 (2002/12/25) バã?ジョンチェãƒ?‚¯、HybsSystem初期化追åŠ?
077 * @og.rev 3.4.0.0 (2003/09/01) Contextのpathによる、シスãƒ?ƒ パラメータ のåˆ?‚Š替え対å¿?
078 * @og.rev 3.4.0.3 (2003/09/10) ServletContext の名称をã?仮想パス名とするã€?
079 * @og.rev 3.5.3.1 (2003/10/31) シスãƒ?ƒ パラメータ ファイルの読み取りタイミングを遅らせますã?
080 * @og.rev 4.0.0.0 (2005/01/31) Ver4 のシスãƒ?ƒ パラメータæƒ??の取得å?ç�?‚’追åŠ?�—ますã?
081 * @og.rev 4.1.0.1 (2008/01/23) ログ出力å?の設定å?ç�?‚’追åŠ?
082 * @og.rev 4.3.4.1 (2008/12/08) ログの環å¢?¤‰数対å¿?
083 *
084 * @param event コンãƒ?‚ストイベンãƒ?
085 */
086 public void contextInitialized( final ServletContextEvent event ) {
087 ServletContext context = event.getServletContext();
088
089 // // 4.0.0.0 (2007/10/26) ConnectionFactoryのhayabusa依存をåˆ?‚‹ために移動してきた
090 // final Cleanable clr = new Cleanable() {
091 // public void clear() {
092 // ConnectionFactory.realClose();
093 // }
094 // };
095 // SystemManager.addCleanable( clr );
096
097 Map<String,String> param = SystemParameter.makeSystemParameter( context );
098 HybsSystem.setInitialData( param ); // 4.0.0 (2005/01/31)
099
100 // 4.3.4.1 (2008/12/08) ログの環å¢?¤‰数対å¿?
101 // LogWriter.init( HybsSystem.url2dir( HybsSystem.sys( "SYS_LOG_URL" ) ) ); // 4.1.0.1 (2008/01/23)
102 LogWriter.init( HybsSystem.url2dir( System.getProperty( "SYS_LOG_URL" ,HybsSystem.sys( "SYS_LOG_URL" ) ) ) );
103
104 // CONTEXT_INITIAL_CALL_URL で登録されたURLを実行しますã?
105 // 処ç�??、contextInitialized が終äº?�—てから実行するå¿?¦�がありますã?
106 new Thread( new InitialCallURL() ).start();
107
108 System.out.println( "-------" );
109 }
110
111 /**
112 * ServletContextListener インターフェースの実è£?
113 *
114 * Webアプリケーションがシャãƒ?ƒˆãƒ?‚¦ンされることã‚?
115 * リスナã?に通知するã€?
116 *
117 * @og.rev 3.1.1.1 (2003/04/03) キャãƒ?‚·ュクリアメソãƒ?ƒ‰を新規追åŠ??
118 * @og.rev 3.3.3.3 (2003/08/06) HybsTimerTaskManager を終äº?™‚にキャンセルするロジãƒ?‚¯を追åŠ??
119 * @og.rev 3.5.2.1 (2003/10/27) リンクエラー対策:永続化セãƒ?‚·ョン(SESSIONS.ser)からオブジェクトを削除しておくã€?
120 * @og.rev 3.6.0.0 (2004/09/17) CalendarFactory.clear() を追åŠ?�—ますã?
121 * @og.rev 4.0.0.0 (2005/01/31) コンãƒ?‚スト名の取り方を変更しますã?
122 * @og.rev 4.0.0.0 (2005/01/31) Cleanable インターフェースによる初期化å?ç�?
123 * @og.rev 4.0.0.0 (2005/01/31) HybsTimerTaskManager は、Cleanable インターフェースによる初期åŒ?
124 * @og.rev 4.1.0.0 (2007/12/27) GE12のクリア処ç�?¿½åŠ?
125 * @og.rev 4.3.0.0 (2008/07/18) soffice.binのタスクを削除する処ç�?‚’追åŠ?
126 * @og.rev 5.0.2.0 (2009/11/01) 再編成機è?追åŠ?
127 *
128 * @param event コンãƒ?‚ストイベンãƒ?
129 */
130 public void contextDestroyed( final ServletContextEvent event ) {
131 String name = HybsSystem.sys( "CONTEXT_NAME" );
132 System.out.println( "Context Destroyed [" + name + "] " + new Date() );
133
134 // 4.1.0.0 (2007/12/26) GE12からSystemParameterで設定したコンãƒ?‚スト関係ã?æƒ??
135 SystemManager.clearGE12();
136
137 // 4.0.0 (2005/01/31) Cleanable インターフェースによる初期化å?ç�?
138 SystemManager.allClear( true ) ;
139
140 // 4.3.0.0 (2008/07/18) soffice.binをå?てkillしまã�?
141 // SystemManager.sofficeKill();
142
143 SystemManager.sessionDestroyed(); // 3.5.2.1 (2003/10/27)
144
145 SystemManager.deleteGUIAccessInfo(); // 5.0.2.0 (2009/11/01)
146
147 System.out.println( "-------" );
148 }
149
150 /**
151 * CONTEXT_INITIAL_CALL_URL を起動する為のスレãƒ?ƒ‰å†?ƒ¨クラスですã?
152 *
153 * HybsContextListener が正常終äº?�—なã�?�¨、Tomcatが起動したことになってã�?�ªã�?‚ºã€?
154 * 通常のJSP処ç�?�Œ出来ませんã€?
155 * ここでは、Tomcat起動時に初期処ç�?RL(CONTEXT_INITIAL_CALL_URL)をコールする為にã€?
156 * 時間差を利用する為、スレãƒ?ƒ‰化して実行させますã?
157 * こã?スレãƒ?ƒ‰はã€?¼’秒間スリープ後に、å?期å?ç�?RLを呼び出しますã?
158 *
159 * @og.rev 4.2.2.0 (2008/05/22) 初期URLの接続ユーザーをシスãƒ?ƒ リソースより取å¾?
160 *
161 * @og.group ログイン制御
162 *
163 * @version 4.0
164 * @author Kazuhiko Hasegawa
165 * @since JDK5.0,
166 */
167 private static class InitialCallURL implements Runnable {
168 /**
169 * スレãƒ?ƒ‰の処ç�?–‹始メソãƒ?ƒ‰
170 *
171 */
172 public void run() {
173 try {
174 Thread.sleep( 2000 );
175 }
176 catch ( InterruptedException ex) {
177 LogWriter.log( "InterruptedException:" + ex.getMessage() );
178 }
179
180 HybsEntry[] urls = HybsSystem.sysEntry( "CONTEXT_INITIAL_CALL_URL" );
181 // String userPass = "SYSTEM:MANAGER" ;
182 String userPass = HybsSystem.sys( "CONTEXT_INITIAL_CALL_USERPASS" );
183 boolean isCall = false;
184 for( int i=0; i<urls.length; i++ ) {
185 String url = urls[i].getValue();
186 if( url == null || url.length() == 0 ) { continue; }
187 URLConnect conn = new URLConnect( url,userPass );
188 try {
189 conn.connect();
190 String msg = conn.getCode() + ":" + conn.getMessage() ;
191 conn.disconnect();
192 System.out.println( " URL[" + i + "]:" + url );
193 System.out.println( " " + msg );
194 isCall = true ;
195 }
196 catch( IOException ex ) {
197 LogWriter.log( " URL[" + i + "]:" + url );
198 LogWriter.log( " " + ex.getMessage() );
199 }
200 }
201 if( isCall ) {
202 System.out.println( " CONTEXT_INITIAL_CALL_URL" );
203 System.out.println( "-------" );
204 }
205 }
206 }
207 }