0

Webアプリケーションには、JSF1.2とFaceletsを使用します。

問題は、シングルトンパターンを介して初期化を行うことです。これは、データファイルを読み込むため(データベースを使用していないため)、約5〜15秒かかります。これは、最初のユーザーが対応するWebページを参照したときに発生します(2番目以降のユーザーにはこの遅延はありません)。

このシングルトンをデプロイ直後に初期化してもらいたいです。これどうやってするの?アプリケーションBeanを追加しようとしましたが、呼び出されません。また、次のようにサーブレットを追加しようとしました。

  <servlet>
    <description>MyApplicationContextListener Servlet</description>
    <display-name>MyApplicationContextListener Servlet</display-name>
    <servlet-name>MyApplicationContextListener</servlet-name>
    <servlet-class>mydomain.beans.MyApplicationContextListener</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <listener>
    <listener-class>mydomain.beans.MyApplicationContextListener</listener-class>
  </listener>

次のコードで:

package mydomain.beans;
import javax.servlet.ServletContextEvent;

public class MyApplicationContextListener {


    public void contextInitialized(ServletContextEvent event) {
        System.out.println("MyApplicationContextListener.contextInitialized started");
    }

    public void contextDestroyed(ServletContextEvent event) {
        System.out.println("MyApplicationContextListener.contextInitialized stopped");
    }

}

web.xmlやfaces-config.xmlで必要な変更を含む例がいいでしょう!

4

1 に答える 1

1

使ってServletContextListenerみませんか?そのcontextInitialized(..)メソッドは、コンテキストが初期化されたときに呼び出されます。次のようにマッピングされweb.xmlます。

<listener>
    <listener-class>com.example.MyServletContextListener</listener-class>
</listener>

また、(これが機能するかどうかはわかりませんが)、起動時にロードされるようにfacesサーブレットを構成できます。

<load-on-startup>1</load-on-startup>

明確化:リスナーアプローチの場合、リスナーはServletContextListener:を実装する必要があります。

public class MyServletContextListener implements ServletContextListener { .. }
于 2010-02-15T10:01:23.313 に答える