sábado, 8 de maio de 2010

Servlet Listeners - ServletContextListener

Olá Javeiros de plantão! Continuando nossa sequência de posts sobre o exame para SCWCD vamos falar hoje sobre Servlet Listeners. O exame requer que o candidato saiba criar e configurar listeners para os escopos do ciclo de vida de uma aplicação, listeners de atributos e também serem capazes de escolher um filtro apropriado para um determinado cenário. Iremos ver como funcionam os listeners cobrados no exame. Neste artigo falaremos especificamente do listener de contexto (criação ou destruição).

Suponhamos que uma aplicação web necessite de alguns recursos para que esta possa funcionar corretamente. É importante que estes recursos esteja disponíveis assim que a aplicação esteja no "ar", mas como saber se aplicação já foi carregada pelo container? E como garantir que os recursos serão liberados após a aplicação ser desativada? Para resolver o problema descrito neste cenário a API de Servlet disponibiliza um listener de contexto. Através dele e possível sabermos o momento em que a aplicação está sendo carregada ou destruída.

O processo de criação de um listener resume-se basicamente em implementar a interface do listener desejado e fazer a configuração do mesmo no descritor da aplicação (web.xml). Para esse primeiro post iremos utilizar a interface javax.servlet.ServletContextListener. Esta interface deve ser utilizada para a criação de listeners de contexto e ela possui dois métodos que devem ser sobrescritos pela classe implementadora. Os dois métodos são:
  • void contextInitialized (ServletContextEvent): Este método é executado no momento em que a aplicação é carregada pelo container, através do parâmetro ServletContextEvent, que é injetado automaticamente pelo container, é possível obter o objeto ServletContext, onde poderemos adicionar, remover ou capturar atributos ou fazer a leitura de parâmetros de inicialização. ATENÇÃO: este método só é chamado UMA ÚNICA vez durante o toda a vida da aplicação.
  • void contextDestroyed (ServletContextEvent): Este método é executado no momento em que aplicação está sendo destruída (parada) pelo container. Assim como o método de inicialização este método também só é executado uma vez.
Abaixo temos um exemplo simples de como criar um listener de contexto. No nosso exemplo apenas adicionamos um atributo contendo o momento em que aplicação subiu e podemos usar este atributo para saber quanto tempo a aplicação ficou ativa. O exemplo não é dos melhores, mas você aprenderá com ele que é capaz adicionar atributos que serão visíveis por toda a aplicação no momento seguinte à subida da mesma. Quando a aplicação for destruída o sistema irá exibir uma mensagem contendo o tempo total em segundos que a aplicação ficou no ar.

Primeiramente vamos criar a classe que irá implementar a interface ServletContextListener e vamos também implementar seus dois métodos:












Agora precisamos configurar o nosso listener no arquivo descritor da aplicação, que é o arquivo web.xml da aplicação. Vejamos abaixo como configurar o nosso listener.









A configuração de um listener é bastante simples e resume-se em declarar a classe que implementa a interface de listener. A aplicação irá carregar os listeners na ordem em que eles aparecerem no arquivo web.xml.
Espero que este post seja útil de alguma forma pra você! Até o próximo post!

Nenhum comentário:

Postar um comentário