Приложение Java EE Enterprise: выполните некоторые действия по развертыванию/запуску

Я хотел бы выполнить некоторые действия, как только мое приложение (Enterprise Application with Business Logic, EJB и Client, Web) будет развернуто. Например, я хотел бы сделать какой-то объект в постоянном состоянии или иным образом создать файл. Как я могу это сделать?

Спасибо.

Ответ 1

Настроить SerlvetContextListener и переопределить contextInitilized()

в описании вашего веб-приложения, 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 
    }
}

Ответ 2

По умолчанию используется сервлет с методом init(). Затем в сервлет-дескрипторе вы отмечаете этот сервлет как загрузку при запуске 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>

Как только сервлет развертывается (что происходит после развертывания EJB), вызывается этот метод init(), и вы можете выполнить нужную задачу.

Ответ 3

При использовании существующего веб-приложения в ухе самым простым и простым было бы использовать ServletContextListener, иначе в EJB 3.1 вы могли бы использовать автоматические таймеры или сеанс одноранговой автозагрузки beans.