Existe uma maneira de executar um método / class somente na boot do Tomcat / Wildfly / Glassfish?

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

Existe uma maneira de executar um método / class somente na boot do Tomcat?

Você poderia escrever um ServletContextListener que chama seu método a partir do método contextInitialized() . Você anexa o ouvinte à sua aplicação web em web.xml, por exemplo

  my.Listener  

e

 package my; public class Listener implements javax.servlet.ServletContextListener { public void contextInitialized(ServletContext context) { MyOtherClass.callMe(); } } 

Estritamente falando, isso é executado apenas uma vez na boot do webapp, em vez da boot do Tomcat, mas isso pode equivaler à mesma coisa.

Você também pode usar (iniciando o Servlet v3) uma abordagem anotada (não é necessário adicionar 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) { } } 

Tenho certeza que deve haver uma maneira melhor de fazer isso como parte do ciclo de vida do contêiner (edit: Hank tem a resposta – eu estava me perguntando por que ele estava sugerindo um SessonListener antes de responder), mas você poderia criar um Servlet que não tem outra finalidade do que para executar ações únicas quando o servidor é iniciado:

  Does stuff on container startup StartupServlet StartupServlet com.foo.bar.servlets.StartupServlet 1  
Intereting Posts