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 */ 016package org.opengion.hayabusa.common; 017 018import org.opengion.fukurou.db.ConnectionFactory; 019import org.opengion.fukurou.util.Cleanable; 020import org.opengion.fukurou.util.HybsEntry; 021import org.opengion.fukurou.util.URLConnect; 022import org.opengion.fukurou.util.LogWriter; 023import java.util.Date; 024import java.util.Map; 025 026import javax.servlet.ServletContextListener; 027import javax.servlet.ServletContextEvent; 028import javax.servlet.ServletContext; 029 030import 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 */ 059public 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起動時に初期処理URL(CONTEXT_INITIAL_CALL_URL)をコールする為に、 156 * 時間差を利用する為、スレッド化して実行させます。 157 * このスレッドは、2秒間スリープ後に、初期処理URLを呼び出します。 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}