Задача
Требуется понять, что J2EE приложение выгружается, обновляется или еще каким-то способом уничтожается. Понимание такое требуется для освобождения занятых ресурсов (например, глушения прослушивания TCP порта)Решение.
1. Создаем класс, наследованный от ServletContextListener.
2. Реализуем в нем методы (обработчики) contextInitialized и contextDestroyed
3. Описываем его в web.xml в разделе listener
Результат:
При старте приложения, до вызова всевозможных методов init() и прочих @PostConstruct, будет вызван методо созданного класса contextInitialize.При завершении работы приложения, при его остановке или выгрузке, но еще до уничтожения объектов (бинов сервлетов и пр.) будет вызван методо contextDestroyed.
Пример
import javax.ejb.EJB;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import ru.itsph.iqwave.renegade.api.ITcpControler;
public class TcpDestroyListener implements ServletContextListener {
private Logger log = Logger.getLogger(TcpDestroyListener.class.getName() );
@EJB(name="TcpControler")
ITcpControler theControler;
public TcpDestroyListener() { ; }
public void contextInitialized(ServletContextEvent arg0) {
log.info("TCP context initialisation");
}
public void contextDestroyed(ServletContextEvent arg0) {
log.info("TCP context destroyed");
if(theControler != null) theControler.stopAll();
else log.info("Out of TcpControler");
}
}
<web-app ...>
...
<listener>
<listener-class>ru.itsph.iqwave.renegade.web.TcpDestroyListener</listener-class>
</listener>
...
</web-app>
Кроме того:
На самом деле, эта технология гораздо богаче. Почитать о ней можно здесьПоток сознания на эту тему можно почитать здесь.
Комментариев нет:
Отправить комментарий