Модуль WAR не может найти классы EJB в модуле EJB в том же EAR

Итак, у меня есть проект EAR со следующей структурой:

EarSample
  - EarSample-ejb.jar
  - EarSample-web.war

Внутри модуля EJB есть простой сеансовый компонент без сохранения состояния без интерфейсов (интерфейс без просмотра).

Что происходит, так это то, что я не могу внедрить этот EJB в управляемый компонент JSF, упакованный в военный модуль. Netbeans даже не видит класс.

Я уже пробовал GF 3/4 и Payara.

Любая помощь будет оценена. Спасибо.


person Jaumzera    schedule 15.03.2017    source источник
comment
Находится ли ejb.jar в пути класса сборки вашего web.war? Если ваш проект основан на maven, является ли ejb.jar зависимостью проекта web.war?   -  person OndroMih    schedule 16.03.2017
comment
Вы правы, это проект maven. Я добавил модуль EJB как предоставленную зависимость, и он отлично работал. Спасибо.   -  person Jaumzera    schedule 16.03.2017


Ответы (2)


Что ж, как предложил @OndrejM, я только добавил зависимость EJB-модуля в pom.xml WAR как «при условии», и это сработало отлично.

    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>EarSample-ejb</artifactId>
        <version>${project.version}</version>
        <scope>provided</scope>
    </dependency>
person Jaumzera    schedule 17.03.2017
comment
Вы можете пометить этот ответ как правильный, даже если он ваш ;) - person OndroMih; 17.03.2017
comment
Учитывая, что это ваш ответ, я думаю, вы можете исправить его и опубликовать снова. Так что я мог бы принять и проголосовать за это. В любом случае, спасибо. - person Jaumzera; 17.03.2017

Вы должны извлечь интерфейсы EJB из модуля EarSample-ejb.jar и поместить их в отдельный jar-файл EarSample-common.jar. Такой архив должен быть помещен в папку lib внутри EarSample, чтобы он был доступен из обоих модулей.

Структура должна выглядеть так:

EarSample
  EarSample-ejb.jar
  EarSample-web.war
  /lib/EarSample-common.jar

Причиной этого является соответствие стандартам JSR, где, как правило, модули EAR должны иметь отдельные загрузчики классов (что по умолчанию не ограничено в Glassfish или JBoss/Wildfly).

Если вы извлечете упомянутые интерфейсы EJB в отдельный модуль maven и добавите этот артефакт в ejb и веб-модуль в качестве зависимостей области компиляции, ваше решение будет работать на всех серверах JavaEE 6/7.

person iskramac    schedule 16.03.2017
comment
Я использую представление EJB без интерфейса. - person Jaumzera; 16.03.2017
comment
По правде говоря, добавление проекта EJB в качестве зависимости в pom.xml WAR сработало, как предложил @OndrejM. - person Jaumzera; 16.03.2017