Шов и несколько войн: Contexts.getSessionContext() имеет значение null в другой войне

Я использую Seam 2.2.1.CR1 на Weblogic 10.3.2 и JSF 1.2.

У меня есть приложение для ушей с двумя военными файлами. Первая война - это приложение JSF/Seam, второе имеет JSF/Seam, но также имеет некоторые страницы сервлетов.

Когда я устанавливаю вещи в контексте сеанса в первом веб-приложении:

Contexts.getSessionContext().set("pimUser", pimUser);

Я могу нормально залить его в компоненты Seam во второй войне. Однако, если я попытаюсь получить удаленный pimUser из сервлета, я не смогу получить к нему доступ:

PimUser user1 = (PimUser) Contexts.getSessionContext().get("pimUser");

Contexts.getSessionContext() имеет значение null. Я заметил, что Javadoc

org.jboss.seam.contexts.Contexts

Говорит:

Provides access to the current contexts associated with the thread.

Автор(ы): Гэвин Кинг Томас Хьют

Означает ли это, что 2 файла войны должны иметь разные Contexts.getSessionScope()?

Я нашел способ, который позволяет мне получить к нему доступ через сеанс следующим образом:

PimUser user2 = (PimUser) httpRequest.getSession().getAttribute("pimUser");

Последний путь, однако, не представляется правильным. Я хотел бы получить доступ к контексту сеанса Seam через Seam.

Я обнаружил, что раньше (?) были проблемы с приложениями Seam и Multi-War (ссылка), однако , предполагается, что они были разрешены в версии 2.2.0.GA.


person Markos Fragkakis    schedule 26.10.2010    source источник
comment
Учебник JEE 5 говорит: Вы можете связать объектные атрибуты с сеансом по имени. Такие атрибуты доступны любому веб-компоненту, который принадлежит к тому же веб-контексту и обрабатывает запрос, являющийся частью того же сеанса. Обе войны (вы можете думать о войне как о веб-контексте) не разделяют свои контексты.   -  person Arthur Ronald    schedule 27.10.2010


Ответы (1)


Обычный сервлет не получает доступа к контекстам Seam по умолчанию: Замена сервлетов ресурсами Seam. Сначала вам необходимо интегрировать его, либо обернув вызов в контексты соединения, либо заменив сервлет на Seam AbstractResource.

Я использовал оба способа раньше, и они работают отлично. Лично я предпочитаю AbstractResource, потому что вы можете избавиться от соответствующей конфигурации web.xml.

person kraftan    schedule 27.10.2010