beans.xml в JAR вызывает java.lang.NoClassDefFoundError: javax.faces.component.behavior.Behavior

Я использую Websphere 8.5 и его внутренние платформы Java EE, Apache OpenWebBeans для DI и Apache MyFaces для просмотра. У меня также есть JAR с некоторыми bean-компонентами, помеченными как "@Named" (так что это управляемые bean-компоненты OpenWebBeans). Этот JAR находится в каталоге "WEB-INF/lib" моего веб-приложения и в пути к классам приложения.

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

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

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

1 ответ

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

Вот как БЫЛО работать, это мелочь, когда ты это знаешь. Я даже не удосужился создать PMR;)

Другие вопросы по тегам