2016-04-29 7 views
0

У меня есть странные проблемы с инъекцией EJB в GlassFish 3. Может быть, я просто не совсем понимаю, что я делаю :)Glassfish 3 EJB Инъекции из архива фляги терпит неудачу

Так что это проблема: Мой проект состоит из 2 модуля, которые будут собраны с градиентом.

  • Модуль A
  • Модуль B

Модуль A представляет собой обычный GlassFish модуль, который также работает отлично. Модуль B содержит персонал общего назначения. Модуль B также является зависимым от A. Модуль A будет развернут на стеклянную рыбку в виде архива * .war, а модуль B находится в соответствующей папке lib в виде * .jar архива:

модуль-a.war и где-то внутри это ../lib/module-b.jar

Что я хочу: Создайте в модуле B «факультативный компонент» общего назначения и используйте его в модуле A. Но он не работает ...

в модуле BI создан компонент:

@Stateless 
public class GeneralPurposeBean {} 

и я пытаюсь использовать его в модуле A следующим образом:

... 
@EJB 
private GeneralPurposeBean genPurpBean; 
... 

Так как я уже упомянул GeneralPurposeBean находится в * .jar

Каждый раз, когда я пытаюсь использовать фасоль он терпит неудачу с исключением следующего:

javax.ejb.CreateException: Could not create stateless EJB 

Когда Я перемещаю компонент в модуль A, он отлично работает, но я хочу поделиться этим компонентом с другими модулями, которые будут разработаны в будущем. Может кто-нибудь объяснить мне, что здесь не так? Таким образом, bean будет распознан, но он не может быть создан. То, что я обнаружил при отладке, заключается в том, что

JCDIServiceImpl#_createJCDIInjectionContext 

Не распознает компонент в качестве компонента предприятия. Таким образом, все в * .war, которое напрямую доступно, будет правильно создано, но не то, что находится в * .jar.

+1

Поместите их в уникальный EAR (Enterprise ARchive) и повторите попытку – Riadh

+0

Попробуйте создать интерфейс, аннотированный с помощью '@ Remote', который реализует ваш' GeneralPurposeBean'. Затем, на вашем ModuleA, используйте его следующим образом: '@EJB GeneralPurposeBeanInterface genPurpBean;'. – aribeiro

+0

Возможный дубликат [Упаковка EJB в JavaEE 6 WAR vs EAR] (http://stackoverflow.com/questions/4441237/packaging-ejb-in-javaee-6-war-vs-ear) –

ответ

0

Для случая кого-то есть такая же проблема:

Если вы относитесь к одной из ваших модулей в зависимости и этот модуль содержит EJB бобы, которые необходимо вводить раствор для моей проблемы было положить/META-INF/beans.xml в модуль. В противном случае контейнер не распознает beans как EJB.

Все.