【发布时间】:2011-05-25 07:17:06
【问题描述】:
我想在我的应用程序(具有业务逻辑、EJB 和客户端、Web 的企业应用程序)部署后立即执行一些操作。 例如,我想让某个实体处于持久状态,或者创建一个文件。 我该怎么做?
谢谢。
【问题讨论】:
标签: java deployment jakarta-ee entity startup
我想在我的应用程序(具有业务逻辑、EJB 和客户端、Web 的企业应用程序)部署后立即执行一些操作。 例如,我想让某个实体处于持久状态,或者创建一个文件。 我该怎么做?
谢谢。
【问题讨论】:
标签: java deployment jakarta-ee entity startup
配置SerlvetContextListener 并覆盖contextInitilized()
在您的 Web 应用程序描述中,web.xml
<web-app ...>
<listener>
<listener-class>com.someCompany.AppNameServletContextListener</listener-class>
</listener>
</web-app
package com.someCompany;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class AppNameServletContextListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("ServletContextListener destroyed");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("ServletContextListener started");
// do the things here
}
}
【讨论】:
“默认”方式是使用带有 init() 方法的 servlet。然后在 servlet-descriptor 中将此 servlet 标记为 load-on-startup 1:
例子:
<servlet-name>Seam Resource Servlet</servlet-name>
<servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
一旦部署了 servlet(在部署 EJB 之后发生),就会调用 init() 方法,您就可以执行所需的任务了。
【讨论】:
在您耳中使用当前的 Web 应用程序时,最简单的方法是使用 ServletContextListener,否则在 EJB 3.1 中您可以使用自动计时器或启动单例会话 bean。
【讨论】: