Инжекция EJB 3.1 @EJB в POJO

С новой спецификацией EJB 3.1 возможно вводить EJB в pojo? Я знаю в EJB 3.0, @EJB аннотация могла использоваться для введения EJB, но это не работало над простым pojos.

Если это не, делают я должен искать боб в JNDI, поскольку я знаю, что Вы не можете простое использование новое ключевое слово.

13
задан Hash 11 July 2019 в 06:03
поделиться

4 ответа

Да, используйте JNDI Lookup.

Так как ваш POJO создан вами (я предполагаю), контейнер не несет ответственности за инъекцию зависимостей.

19
ответ дан 1 December 2019 в 17:27
поделиться

В новой спецификации EJB (3.1) добавлена возможность указывать глобальные имена JNDI для EJB. Это означает, что вы можете использовать их в любом бобе, где угодно.

Вы должны выполнить явный JNDI поиск, однако, поскольку контейнер EJB 3.1 не будет знать о вашем POJO.

Единственное исключение, которое, я полагаю, к вам не относится, это если ваш POJO действительно является клиентом приложения, и в этом случае, при условии, что поле, которое должно содержать EJB, является статическим, вы можете применить к нему @EJB аннотацию. Если это ваша ситуация, вы должны проверить правила клиента приложения в общей спецификации Java EE 5.

Наконец, Java EE 6, с включением JSR-299, может позволить случиться тому, что вы описываете; я еще не знаю спецификации, поэтому не могу прокомментировать ее.

Надеюсь, это все поможет.

.
7
ответ дан 1 December 2019 в 17:27
поделиться

Мне тоже интересно, могу ли я внедрить EJB в неуправляемые объекты . Дополнительную информацию см. В документации Weld (эталонная реализация JSR 299).

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

@Stateless
public PojoRespository {

  @Inject
  ResourceForPojos resource;
  @PersistenceContext
  private EntityManager em;

  public Pojo findById(Object id) {
    Pojo p = (Pojo) em.find(Pojo.class, id);
    p.setResource(resource); // injects resource
    return p;
  }

}

Если у вас есть много методов, в которых должно выполняться внедрение, вы можете использовать перехватчик.

1
ответ дан 1 December 2019 в 17:27
поделиться

Можно ли в новой спецификации EJB 3.1 внедрить EJB в pojo? Я знаю, что в EJB 3.0 аннотацию @EJB можно использовать для внедрения EJB, но это не работает с простыми pojos.

Внедрение EJB в POJO возможно ЕСЛИ вы используете JSR-299 (Java C ontexts и D ependency I njection ) т.е. если ваш POJO является управляемым компонентом CDI. В этом случае вы можете сделать:

@Inject MyEJB service

Но это не функция EJB 3.1, она исходит от CDI. И если вы не используете CDI, вам придется выполнить поиск.

29
ответ дан 1 December 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: