Estou usando Glassfish, existe alguma forma de um código em Java (poder um Servlet, um Bean, uma classe qualquer, etc) ser executado quando o container for inicializado?
pode usar ServletContextListener…
O metodo public void contextInitialized(ServletContextEvent servletContextEvent) {} quando o container publicar sua aplicação…
Com ele nao é necessario criar servlet e nada… acho bem mais simples, pois apenas o declara-lo no web.xml
Espero ter ajudado…
sim. vc pode deixar o arquivo *.war na pasta webapps do container.
quando o servidor for iniciado, a aplicação também será iniciada.
crie um servlet e implemente o método init()
Sobreescrever o método init() do servlet não garante que esse codigo será executado quando a aplicação for inicializada.( além disso seria preciso configurar o web.xml para escolher a ordem de carregamento do servlet, e mesmo assim não ha garantia que o container vai fazer isso logo que inicializa a aplicação. Pode,por exemplo adiar até que o servlet é usado pela primeira vez)
Exatamente para isso a interface ServletContextListener foi criada. É ela que deve ser usada nesses casos.
A proxima expecificação da servlet api prevê uma forma programática de definir o que hoje se define no web.xml isso significa que a aplicação terá poderes de configurar o ambiente antes de começar a correr. isso será feito dentro do ServletContextListener.
A interface ServletContextListener é um listener utilizado para verificar quando uma aplicação é iniciada e finalizada. A classe que implementa essa interface deve sobrescrever os métodos contextInitialized e contextDestroyed que serão chamado assim que a aplicação é iniciada e finalizada respectivamente.
[code]package meupacote.listeners;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
public class MeuServletContextListener implements ServletContextListener
{
public void contextInitialized(ServletContextEvent e)
{
System.out.println("MeuServletContextListener - iniciado: " +
e.getServletContext().getServerInfo()
);
}
public void contextDestroyed(ServletContextEvent e)
{
System.out.println(“MeuServletContextListener - finalizado”);
}
}[/code]
FONTE: :thumbup:
:arrow: http://programandosemcafeina.blogspot.com/2007/04/pra-que-server-e-como-funciona-o.html
[quote=Marcio Duran]A interface ServletContextListener é um listener utilizado para verificar quando uma aplicação é iniciada e finalizada. A classe que implementa essa interface deve sobrescrever os métodos contextInitialized e contextDestroyed que serão chamado assim que a aplicação é iniciada e finalizada respectivamente.
[code]package meupacote.listeners;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
public class MeuServletContextListener implements ServletContextListener
{
public void contextInitialized(ServletContextEvent e)
{
System.out.println("MeuServletContextListener - iniciado: " +
e.getServletContext().getServerInfo()
);
}
public void contextDestroyed(ServletContextEvent e)
{
System.out.println(“MeuServletContextListener - finalizado”);
}
}[/code]
FONTE: :thumbup:
:arrow: http://programandosemcafeina.blogspot.com/2007/04/pra-que-server-e-como-funciona-o.html[/quote]
Fiquei com uma dúvida, como o container vai saber que deve usar esta classe?
Eu nem uso Servlets, apenas beans, porém, preciso criar um timer para ficar executando temporariamente um Bean, e preciso que este timer seja criado assim que o servidor subir e não somente após o primeiro acesso de um cliente.