在部署之后立即启动类,而不是在JSF的会话启动时启动

时间:2010-02-15 09:54:03

标签: java jsf web-applications facelets

对于Web应用程序,我使用JSF 1.2和Facelets。

问题是我们现在通过单例模式进行初始化,并且需要 5-15秒因为它读入数据文件(我们没有使用数据库)。当第一个用户浏览到相应的网页时会发生这种情况(第二个用户没有此延迟)。

我希望在部署之后立即初始化此单例。我怎样才能做到这一点?我试图添加一个应用程序bean,但它没有被调用。我还尝试添加一个servlet如下:

  <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中所需更改的示例将很不错!

1 个答案:

答案 0 :(得分:1)

如何使用ServletContextListener?在初始化上下文时将调用其contextInitialized(..)方法。它映射在web.xml中,如下所示:

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

另外,(不确定这会起作用),你可以配置你的faces-servlet在启动时加载。:

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

澄清:对于侦听器方法,您的侦听器必须实现ServletContextListener

public class MyServletContextListener implements ServletContextListener { .. }