Внедрение в EJB - PullRequest
       53

Внедрение в EJB

1 голос
/ 01 февраля 2012

Я пытаюсь преобразовать проект внедрения Guice в проект Java EE, то есть для запуска на glassfish.

У меня есть проект lib, который определяет интерфейс Hello, помеченный @Remote.Затем у меня есть проект Impl, который имеет bean-компонент, HelloBean, аннотированный @Stateless, и один конструктор с параметрами и @Inject.

Затем у меня есть проект was, который зависит от lib иэто интерфейс для создания веб-сервиса, HelloService, аннотированный @WebService и Hello в качестве члена, аннотированного @EJB.

Это не похоже на работу.Поскольку bean-компоненты должны иметь конструктор без аргументов, я создал HelloBean как bean-компонент и HelloImpl как Pojo с одним конструктором @Inject с аргументами.Затем я попытался ввести Hello и HelloImpl в HelloBean с @Inject, @Resource и @EJB.Кажется, ничего не работает.

Если я @Inject Hello или HelloImpl в HelloBean, я получу NPE.Если я @Resource Hello или HelloImpl, я получу Lookup failed for delegate.Если я @EJB HelloImpl, та же ошибка.@EJB Hello и я получаю stackoverflows (понятно).

Я действительно хочу использовать инъекцию конструктора, так как считаю, что это более правильный способ создания классов (они всегда действительны после создания).Но я не понимаю, как можно объединить CDI и EJB.

Как я могу получить Pojo с конструктором @Inject в bean-компонент?Или мой план в корне неверен?

1 Ответ

2 голосов
/ 01 февраля 2012

Лучший способ - определить метод инициализации, аннотированный @Inject. Любые параметры будут точками ввода и должны быть предоставлены через CDI. Вы также можете сделать это с помощью конструкторов. Убедитесь, что у вас также есть WEB-INF / beans.xml.

...