¿Hay alguna forma de ejecutar un método / clase solo en el inicio de Tomcat / Wildfly / Glassfish?

StackOverflow https://stackoverflow.com/questions/158336

Pregunta

Necesito eliminar los archivos temporales en el inicio de Tomcat, el paso a una carpeta que contiene archivos temporales se encuentra en applicationContext.xml.

¿Hay alguna forma de ejecutar un método / clase solo en el inicio de Tomcat?

¿Fue útil?

Solución

Podría escribir un ServletContextListener que llame a su método desde el método contextInitialized () . Adjuntar el oyente a su aplicación web en web.xml, por ejemplo,

<listener>
   <listener-class>my.Listener</listener-class>
</listener>

y

package my;

public class Listener implements javax.servlet.ServletContextListener {

   public void contextInitialized(ServletContext context) {
      MyOtherClass.callMe();
   }
}

Estrictamente hablando, esto solo se ejecuta una vez en el inicio de la aplicación web, en lugar del inicio de Tomcat, pero eso puede ser lo mismo.

Otros consejos

También puede usar (iniciando Servlet v3) un enfoque anotado (no es necesario agregar nada a web.xml):

   @WebListener
    public class InitializeListner implements ServletContextListener {

        @Override
        public final void contextInitialized(final ServletContextEvent sce) {

        }

        @Override
        public final void contextDestroyed(final ServletContextEvent sce) {

        }
    }

Estoy seguro de que debe haber una mejor manera de hacerlo como parte del ciclo de vida del contenedor (edición: Hank tiene la respuesta; me preguntaba por qué estaba sugiriendo un SessonListener antes de responder) , pero puede crear un Servlet que no tiene otro propósito que realizar acciones únicas cuando se inicia el servidor:

<servlet>
  <description>Does stuff on container startup</description>
  <display-name>StartupServlet</display-name>
  <servlet-name>StartupServlet</servlet-name>
  <servlet-class>com.foo.bar.servlets.StartupServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet> 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top