Что не так с моим слушателем в моем web.xml?

Мы используем JBoss 4.22 с портлетами. Если тег слушателя отсутствует в файле web.xml, портлет загружается, но слушатель sessionDestroyed() никогда не вызывается (очевидно). При добавлении портлет не загружается, и нет никаких исключений или сообщений в журнале. Есть ли какие-то ошибки, о которых я должен знать?

   <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
             version="2.4">


           <!-- Listeners used by application -->
        <listener>
            <listener-class>listenerpackage.MyClassThatImplementsHttpSessionListener</listener-class>
        </listener>
    ...Other tags...
    </web-app>

В ответ на комментарии я просматривал код, чтобы найти проблемные места. У моего конструктора Listener есть некоторые возможные проблемы. Обычно (не в качестве прослушивателя) экземпляр создается соответствующим конструктором портлета (тот, который не загружается, когда прослушиватель добавляется в файл web.xml). Могу ли я по-прежнему ожидать, что это так, или контейнер сам создает экземпляр?


person Adam    schedule 17.09.2009    source источник
comment
В принципе должно быть нормально. Делает ли ваш класс слушателя что-нибудь дерзкое, что может иметь эффект домино?   -  person skaffman    schedule 17.09.2009
comment
Я не знаком с эффектами домино. Слушатель является делегатом и управляет рядом объектов и соединений. Мы реализовали HttpSessionListener, чтобы он мог очищать объекты и соединения.   -  person Adam    schedule 17.09.2009
comment
Что делает ваш слушатель? Может ли он каким-то образом заблокировать все веб-приложение?   -  person nos    schedule 17.09.2009


Ответы (2)


Проблема в том, что прослушиватели, объявленные в документе развертывания, создаются при загрузке этого документа. Мой класс был разработан для создания портлетом, поэтому необходимая информация была недоступна.

Решением является использование HttpSession СвязываниеListener и добавление класса в качестве атрибута к сеансу. Затем вызывается unbound(), когда сеанс становится недействительным. :)

person Adam    schedule 17.09.2009

Находится ли ваш узел прослушивателя в правильном порядке в файле web.xml? Может быть, его игнорируют из-за того, что он не следует DTD? Например, сервлеты, сопоставления сервлетов, конфигурации сеансов должны быть перед слушателем.

person Greg    schedule 17.09.2009
comment
Где ты это увидел? Мои поиски, как правило, показывали тег слушателя как вверху, так и внизу. Я также читал некоторые темы, в которых говорилось, что это имеет значение только для повторов и параметров, хотя сейчас у меня их нет. - person Adam; 18.09.2009