@Override
 public void lifecycleEvent(LifecycleEvent event) {
   if (Lifecycle.BEFORE_STOP_EVENT.equals(event.getType())) {
     // The container is getting stopped, close all current connections
     Iterator<Request> iterator = cometRequests.iterator();
     while (iterator.hasNext()) {
       Request request = iterator.next();
       // Remove the session tracking attribute as it isn't
       // serializable or required.
       HttpSession session = request.getSession(false);
       if (session != null) {
         session.removeAttribute(cometRequestsAttribute);
       }
       // Close the comet connection
       try {
         CometEventImpl cometEvent = request.getEvent();
         cometEvent.setEventType(CometEvent.EventType.END);
         cometEvent.setEventSubType(CometEvent.EventSubType.WEBAPP_RELOAD);
         getNext().event(request, request.getResponse(), cometEvent);
         cometEvent.close();
       } catch (Exception e) {
         container.getLogger().warn(sm.getString("cometConnectionManagerValve.event"), e);
       }
     }
     cometRequests.clear();
   }
 }
 @Override
 public void sessionDestroyed(HttpSessionEvent se) {
   // Close all Comet connections associated with this session
   Request[] reqs = (Request[]) se.getSession().getAttribute(cometRequestsAttribute);
   if (reqs != null) {
     for (int i = 0; i < reqs.length; i++) {
       Request req = reqs[i];
       try {
         CometEventImpl event = req.getEvent();
         event.setEventType(CometEvent.EventType.END);
         event.setEventSubType(CometEvent.EventSubType.SESSION_END);
         ((CometProcessor) req.getWrapper().getServlet()).event(event);
         event.close();
       } catch (Exception e) {
         req.getWrapper()
             .getParent()
             .getLogger()
             .warn(sm.getString("cometConnectionManagerValve.listenerEvent"), e);
       }
     }
   }
 }