如何在webapp中编写长init

时间:2011-04-05 05:23:09

标签: java servlets glassfish

我使用 glassfish 来运行webapp。我使用netbeans。

我的webapp需要很长的初始化。

我在 ServletContextListener.contextInitialized 方法中写道。

我在代码中添加了一些日志。

如果我在contextInitialized方法中编写我的初始化代码,在我看来,init被某人打断:日志停止片刻,我不明白为什么。

如果我在子线程中编写代码,则根本没有日志。

在webapp中执行long init的最佳方法是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

ServeletContextListener是比servlet init更好的地方。由于某种原因(资源短缺或内存管理问题)容器会破坏servlet并重新创建,然后这可能会破坏同一应用程序内其他servlet的数据。

尝试调查停止的原因并按原样保留ServletContextListner

答案 1 :(得分:0)

一个选项是拥有一个servlet load-on-startup。在启动时加载servlet,如下所示

<web-app>

 <servlet>
    <servlet-name>InitProcess</servlet-name>
    <servlet-class>com.my.ServletName</servlet-class>
    <load-on-startup>1</load-on-startup>
 </servlet>

</web-app>

servlet将在启动时加载init(),Servlet的方法将由容器调用。你可以在那里找到你的代码。

<load-on-startup>中的数字决定了加载servlet的顺序。见here。这至少得到了Tomcat和Weblogic的支持。


要获取ServletContext,请使用:

 ServletContext ctx = getServletContext();

请参阅this code block at Java2s