Я пытаюсь преобразовать проект внедрения 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-компонент?Или мой план в корне неверен?