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 }