Java EE企业应用程序:在部署/启动时执行某些操作

11

当我的应用程序(具有业务逻辑、EJB和客户端Web的企业应用程序)部署时,我想立即执行某些操作。例如,我想使一些实体处于持久状态,或者创建一个文件。如何做到这一点?

谢谢。

3个回答

15

在你的web应用程序描述文件web.xml中配置ServletContextListener并重写contextInitialized()方法。

<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 
    }
}

非常感谢!嗯...我在JEE方面还是个新手。我该如何配置ContextListener? - Mauro
@Mauro 按下 F5,添加了信息。 - jmj
非常感谢!我会尝试的... 我会告诉你的。 - Mauro
1
更容易了…现在,@WebListener注释已添加到Servlet 3.0规范,无需编辑web.xml文件即可获得此行为。请参见[BalusC的启示性答案] (https://dev59.com/HWox5IYBdhLWcg3wf0VP#9186070)。 - Basil Bourque

0

“默认”的方式是创建一个带有init()方法的servlet。然后在servlet描述符中将此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()方法就会被调用,然后您可以执行所需的任务。

0

如果您正在使用现有的Web应用程序,最简单和最简单的方法是使用ServletContextListener,否则在EJB 3.1中,您可以使用自动计时器或启动单例会话bean。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接