Приложение 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.