java.lang.NullPointerException в org.omnifaces.cdi.eager.EagerBeansWebListener.requestInitialized

Я использую сервер TomEE Plus 1.7.2 и пытаюсь запустить веб-приложение с включенным OmniFaces, но получаю исключение Nullpointer:

ПРЕДУПРЕЖДЕНИЕ: Не удалось создать экземпляр bean-компонентов с областью действия нетерпеливого запроса для запроса /index.xhtml. Возможно, область запроса CDI не активна. Если это действительно так, см. JavaDoc на org.omnifaces.cdi.Eager, чтобы узнать, как это исправить.

java.lang.NullPointerException в org.omnifaces.cdi.eager.EagerBeansWebListener.requestInitialized(EagerBeansWebListener.java:78)

Когда я использую EagerBeansFilter, как показано в документах OmniFaces, я получаю небольшое изменение:

ПРЕДУПРЕЖДЕНИЕ: Не удалось создать экземпляр нетерпеливых bean-компонентов в области приложения. Возможно, область применения CDI не активна. Известно, что это имеет место в некоторых конфигурациях на основе Tomcat и Jetty.

java.lang.NullPointerException в org.omnifaces.cdi.eager.EagerBeansRepository.instantiateApplicationScopedAndRegisterListener(EagerBeansRepository.java:69)

Этот сервер нельзя комбинировать с омнифейсами?


person Lemao1981    schedule 11.04.2016    source источник
comment
Какая именно версия OmniFaces? Вы можете найти матрицу совместимости здесь: github.com/omnifaces/omnifaces/wiki/Compatibility-Matrix TomEE — один из наиболее протестированных серверов. Веб-приложение предназначено для Tomcat или Java EE? TomEE определенно не сравним с Tomcat. Любое целевое веб-приложение Tomcat (или Jetty, или любого другого пользовательского стека) каким-то образом потерпит неудачу при развертывании на стандартном сервере Java EE.   -  person BalusC    schedule 11.04.2016
comment
Проблема, по крайней мере, предполагает неправильно настроенную среду CDI. Возможно, веб-приложение действительно ориентировано на Tomcat и включает в себя некоторые библиотеки CDI, в то время как это совершенно не нужно при развертывании на стандартном сервере Java EE, который уже предоставляет несколько реализаций API Java EE, таких как CDI (и JSF!).   -  person BalusC    schedule 11.04.2016
comment
Хорошо, проблема, похоже, связана с универсальной версией: я использовал 2.2-RC2, теперь обновлен до 2.3, и больше никаких исключений!   -  person Lemao1981    schedule 11.04.2016
comment
Я скорее подозреваю грязную сборку. Или с 2.2 и 2.1 (не RC) тоже не работает?   -  person BalusC    schedule 11.04.2016
comment
Технически версию 2.2 или новее не следует развертывать на стандартном TomEE 1.x, поскольку он использует JSF 2.1 вместо JSF 2.2. Поэтому, вероятно, ваш экземпляр TomEE был изменен для использования JSF 2.2.   -  person BalusC    schedule 11.04.2016
comment
поэтому я пробовал с 2.1 и 2.2 без RC, и все работает нормально, но как только я использую 2.2-RC2, я получаю сообщение об ошибке. веб-приложение было настроено с помощью IDE (IntelliJ, я думаю, установка Java EE), не помню настройку сервера в начале, возможно, я переключил сервер с Tomcat на TomEE. это просто крошечное обучающее веб-приложение, ничего особенного   -  person Lemao1981    schedule 12.04.2016


Ответы (1)


TomEE является после WildFly одним из наиболее протестированных серверов для OmniFaces, особенно потому, что почти везде в Java EE используется другая реализация по сравнению с WildFly (Apache против Oracle). В матрице совместимости OmniFaces вы можете найти версии TomEE, которые успешно прошли все страницы в презентация OmniFaces.

Эти исключения, упомянутые в вашем вопросе, будут генерироваться, когда CDI BeanManager не удалось найти OmniFaces EagerBeansRepository, который является компонентом @ApplicationScoped. Это, в свою очередь, указывает на неправильно сконфигурированную среду CDI (например, неверный beans.xml или отсутствующую конфигурацию JNDI/прослушивателя) или грязную сборку (например, дублирующиеся библиотеки). Проверка конфигурации CDI и выполнение полной очистки/перестроения должны решить проблему.

По крайней мере, OmniFaces 2.2 или новее технически несовместимы с TomEE 1.x, потому что TomEE 1.x поставляется с JSF 2.1, а OmniFaces 2.2 или новее имеет жесткую зависимость от JSF 2.2 из-за нового тега <o:viewAction>. Таким образом, если вы не измените TomEE для предоставления JSF 2.2, OmniFaces 2.2 или новее не будут развернуты и должны завершиться сбоем развертывания со следующим исключением:

java.lang.NoClassDefFoundError: javax/faces/component/UIViewAction

Последней версией OmniFaces, успешно развернутой на стандартном сервере TomEE 1.7.x, является OmniFaces 2.1. Если вы хотите использовать OmniFaces 2.2 или новее на стандартном TomEE, вам необходимо выполнить обновление до TomEE 7.x.

person BalusC    schedule 11.04.2016