Executar um evento após a inicialização do container

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…

Use o metodo init() do Servlet:
http://thejavatrainer.com/?src=the-init-method.htm

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.