Что не так с моим слушателем в моем web.xml? - PullRequest
1 голос
/ 17 сентября 2009

Мы используем 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>

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

Ответы [ 2 ]

1 голос
/ 18 сентября 2009

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

1 голос
/ 18 сентября 2009

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

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

...