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    }