Executar no deploy da aplicação[RESOLVIDO]

6 respostas
brunobuild

Pessoal gostaria de saber se existe algum listener ou algo do tipo que executa no deploy da aplicação JSF 1.2, porém eu preciso que o FacesContext já esteja carregado.

Não encontrei nada,

Me ajudem

6 Respostas

FernandoFranzini

O FacesContext só é carregado nas requisições para o ciclo de vida JSF. Listener de deploy tem, mas não vai dar para acessar nada do JSF.
Qual é seu problema?

brunobuild

O que acontece é um seguinte…
Eu sei que não é certo mas é uma aplicação de demonstração.
Essa minha aplicação é um servidor socket, ele fica escutando uma porta e recebe as informações de alguns terminais, temos um protocolo combinado.
Hoje eu tenho um botão dentro da aplicação que inicia este servidor socket, porém eu gostaria de tirar este botão e fazer este servidor iniciar no deploy ou algum jeito de iniciar automático, sem intervenção de pessoas.

Obrigado pela aajuda

FernandoFranzini

Vc não precisa do faces para fazer…
Retire a logica que faz o esquema do socket em outra classe fora do managed bean.
No listerner de deploy servlet, vc executa esse código…

brunobuild

Cara você me ajudou demais… muito obrigado.

Consegui resolver, salvo o status do servidor no ServletContext e depois eu recupero assim eu consigo saber o Status do servidor dentro da aplicação.

public class ListenerInitialContext implements ServletContextListener
{

	/** (non-Javadoc)
	 * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
	 */
	@Override
	public void contextDestroyed(ServletContextEvent event)
	{
		ServerSocketFacade serverSocketFacade;
		
		serverSocketFacade = new ServerSocketFacade(event.getServletContext());
		serverSocketFacade.stopServer();
	}

	/** (non-Javadoc)
	 * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
	 */
	@Override
	public void contextInitialized(ServletContextEvent event)
	{
		ServerSocketFacade serverSocketFacade;
		
		try
		{
			serverSocketFacade = new ServerSocketFacade(event.getServletContext());
			serverSocketFacade.startServer();
		}
		catch (ViewException e)
		{
			e.printStackTrace();
		}
	}
}
FernandoFranzini
OK :D Vai mais umas dicas... 1. O listener é singleton no web container...então seu codigo ficaria mais elegante assim:
public class ListenerInitialContext implements ServletContextListener {

	private ServerSocketFacade serverSocketFacade;
	
	@Override
	public void contextInitialized(ServletContextEvent event) {
		try {
			serverSocketFacade = new ServerSocketFacade(
					event.getServletContext());
			serverSocketFacade.startServer();
		} catch (ViewException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void contextDestroyed(ServletContextEvent event) {
		serverSocketFacade.stopServer();
	}
}
2. Vc não precisa usar subir um web container inteiro para fazer isso...um programa JSE com public static void main ja resolve. Existe algum motivo especial?
brunobuild

Então na verdade ele é um sistema WEB.
Tenho o controle desses terminais tenho páginas web e etc.

Criado 31 de maio de 2011
Ultima resposta 31 de mai. de 2011
Respostas 6
Participantes 2