На самом деле, вы не получаете ClassNotFoundException
, вы получаете NoClassDefFoundError
, и я подозреваю, что некоторые зависимости отсутствуют, как предполагает:
Class [ Lcom/company/app/jms/IJmsSessionFactory; ] not found. Error while loading [ class com.company.app.eventprocessor.provider.EventProvider
Где это com.company.app.jms.IJmsSessionFactory
?
Теперь я сократил слух до одного модуля ejb и получаю NoClassDef для Lorg / apache / log4j / Logger, однако jar log4j также находится в ухе. Такое ощущение, что я, должно быть, здесь упускаю что-то фундаментальное?
Где именно log4j.jar
точно? В /lib
? Можете ли вы показать структуру вашего EAR? И, пожалуйста, также покажите MANIFEST.MF
вашего EJB-JAR.
На всякий случай вот соответствующая цитата из Упаковка EJB 3 Applications :
Упаковка EJB-JAR
...
Файл EJB-JAR должен содержать
интерфейсы и классы бинов. Это может
также включите любые вспомогательные классы.
При желании вспомогательные классы могут быть
упакован в отдельный файл JAR в
EAR файл. У вас есть два варианта:
- JAR, содержащий вспомогательные классы, может быть упакован в каталог lib
файла EAR. Используя этот подход,
упакованные классы будут
автоматически виден всем модулям
в модуле EAR.
- Если вы хотите ограничить видимость только определенным EJB-JAR или WAR
модуль, вы можете создать запись в
Manifest.mf файл модуля, который
содержит атрибут Class-Path к
JAR-файл.
Теперь, когда вы знаете структуру
EJB-JAR и как его упаковать, давайте
посмотрите на элементы ejb-jar.xml
.
Судя по вашим комментариям, я понимаю, что понимаю мою проблему. Казалось бы, я неправильно упаковываю ухо, я не думаю, что на зависимости maven ссылаются правильно. Если я просто создаю свой ejb jar, он не включает ни одного из зависимых jar. Должен ли я указать что-то в помпе, чтобы включить jars ejb-jar? У меня есть плагин сборки <artifactId>maven-ejb-plugin</artifactId>
и комплектация <packaging>ejb</packaging>
.
Объединение зависимостей в EJB-JAR не поддерживается (см. MEJB-3 ), в основном потому, что jar-inside-jar не является частью JAR-спецификации (и может быть поддерживается всеми контейнерами EJB) и не соответствует рекомендациям Sun относительно упаковки J2EE в целом.
Таким образом, хотя вы можете игнорировать это правило (см. этот трюк или этот ), стандартным способом было бы упаковать EJB-JAR и все JAR-файлы, от которых он зависит, в ухо. Это моя рекомендация, и я думаю, что этот пост может помочь: Потому что я всегда забываю, как использовать maven-ear-plugin .