2010-09-02 2 views
1

Я использую CometProcessor для реализации долгого опроса на Tomcat 7.0. Меня беспокоит то, что я не получаю никаких других событий, кроме CometEvent.EventType.BEGIN. Пример кода:Отсутствие кометных событий на Tomcat 7 CometProcessor

@Override 
    public void event(CometEvent event) throws IOException, ServletException { 

    HttpServletRequest request = event.getHttpServletRequest(); 
    HttpServletResponse response = event.getHttpServletResponse(); 
    if (event.getEventType() == CometEvent.EventType.BEGIN) { 
     LOGGER.info("Begin for session: " + request.getSession(true).getId()); 
    } else if (event.getEventType() == CometEvent.EventType.ERROR) { 
     LOGGER.error("Error for session: " + request.getSession(true).getId()); 
     event.close(); 
    } else if (event.getEventType() == CometEvent.EventType.END) { 
     LOGGER.info("End for session: " + request.getSession(true).getId()); 
     event.close(); 
    } else if (event.getEventType() == CometEvent.EventType.READ) { 
     LOGGER.info("Read from session: " + request.getSession(true).getId()); 
    } 

Я предполагаю, что это может привести к утечкам памяти, потому что на событие начала я хранить объект ответа в моем локальном массиве.

Есть ли у кого-нибудь идеи, что может быть неправильным?

ответ

1

Кажется, нет ничего, чтобы вызвать конец запроса, чтобы он просто сидел там до тех пор, пока не произойдет тайм-аут. По моему опыту, END запускается при вызове close, вне контекста потока, который вызывает начало.

Смежные вопросы