2015-04-06 2 views
0

Я использую Websphere 8.5 и его внутренние фреймворки Java EE, Apache OpenWebBeans для DI & Apache MyFaces для просмотра. У меня также есть JAR с некоторыми бобами, аннотированными с помощью «@Named» (так что это управляемые bean-файлы OpenWebBeans). Этот JAR находится в каталоге «WEB-INF/lib» моего веб-приложения и в пути к классам приложения.beans.xml в JAR вызывает java.lang.NoClassDefFoundError: javax.faces.component.behavior.Behavior

Мне сказали, что я должен положить файл beans.xml в каждом JAR, чтобы я хотел, чтобы реализация CDI находила и управляла beans. Я сделал именно это (есть файл «beans.xml» в папке «META-INF» приложения и в той же папке JAR), и все работает безупречно в Tomcat 7 (я могу получить доступ к своим бобам на страницах JSF, все вводится и разрешается без проблем и т. д.). Я запускаю Tomcat с Apache Open Web Beans 1.2 и MyFaces 2.0 JAR внутри приложения «WEB-INF/lib».

Теперь проблема: в Websphere с той же конфигурацией (без JAR-интерфейсов внутри приложения «WEB-INF/lib», только JAR моего компонента) Я получаю NoClassDefFoundError, ссылаясь на класс JSF «javax. faces.component.behavior.Behavior "каждый раз, когда я пытаюсь загрузить страницу (без загрузки страницы, кстати). Как ни странно, когда я удаляю все файлы beans.xml из приложения и из JAR, все работает так, как ожидалось, с JSF (за исключением загрузки и управления bean-загрузкой OpenWebBeans, конечно, поскольку нет «beans.xml» присутствует).

Я искал всюду по этой проблеме и не могу найти подсказки об этом. Я знаю, что этот класс доступен для websphere, так как я искал серверные JAR и нашел его в «WEBSPHERE_INSTALL \ plugins \ javax.j2ee.jsf.jar» (а также потому, что без «beans.xml» этот класс найден и все работает правильно), но я не знаю, почему этот JAR не загружается, когда в файл-загрузчик приложения присутствует какой-либо файл beans.xml. Может кто-нибудь помочь, пожалуйста?

+0

Вы лишали мои поверхности и OWB с войны, прежде чем развертывать их в websphere, или они все еще там? – covener

+0

Да, в WAR нет фреймворков JAR. –

ответ

0

WebSphere действительно нужен файл WEB-INF/beans.xml в вашей WAR! В противном случае WAS не активирует CDI. Это не требуется спецификацией, bnd добавление этого файла по крайней мере не запрещено. Он просто сделает все ваши классы в WEB-INF/классах CDI-компонентов. Просто использование META-INF/beans.xml в некоторых банках не помогает.

Так работает WAS, это незначительная вещь, как только вы это знаете. Я даже не потрудился создать PMR;)

+0

Теперь я могу видеть двусмысленность в вопросе, однако я считаю, что более вероятно, что у ОП уже есть один надолго, и что просто потому, что наличие их в JAR тоже вызывает проблемы. – BalusC

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