Existe uma maneira de executar um método / classe somente no Tomcat / JBoss Application Server / startup Glassfish?

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

Pergunta

Eu preciso remover arquivos temporários na inicialização Tomcat, o passe para uma pasta que contém arquivos temporários está em applicationContext.xml.

Existe uma maneira de executar um método / classe somente na inicialização do Tomcat?

Foi útil?

Solução

Você poderia escrever um ServletContextListener que chama seu método a partir do método contextInitialized(). Você anexar o ouvinte ao seu webapp em web.xml, por exemplo.

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

e

package my;

public class Listener implements javax.servlet.ServletContextListener {

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

A rigor, isso só é executado uma vez na inicialização webapp, ao invés de inicialização do Tomcat, mas que pode atingir a mesma coisa.

Outras dicas

Você também pode usar (começando Servlet v3) um aproach anotada (sem necessidade de acrescentar nada ao web.xml):

   @WebListener
    public class InitializeListner implements ServletContextListener {

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

        }

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

        }
    }

Eu tenho certeza que deve haver uma maneira melhor de fazê-lo como parte do ciclo de vida do recipiente (edit: Hank tem a resposta - Eu queria saber por que ele estava sugerindo uma SessonListener antes de responder), mas você pode criar um Servlet que não tem outro propósito além de executar ações de uma só vez quando o servidor é iniciado:

<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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top