С новой спецификацией EJB 3.1 возможно вводить EJB в pojo? Я знаю в EJB 3.0, @EJB аннотация могла использоваться для введения EJB, но это не работало над простым pojos.
Если это не, делают я должен искать боб в JNDI, поскольку я знаю, что Вы не можете простое использование новое ключевое слово.
Да, используйте JNDI Lookup.
Так как ваш POJO создан вами (я предполагаю), контейнер не несет ответственности за инъекцию зависимостей.
В новой спецификации EJB (3.1) добавлена возможность указывать глобальные имена JNDI для EJB. Это означает, что вы можете использовать их в любом бобе, где угодно.
Вы должны выполнить явный JNDI поиск, однако, поскольку контейнер EJB 3.1 не будет знать о вашем POJO.
Единственное исключение, которое, я полагаю, к вам не относится, это если ваш POJO действительно является клиентом приложения, и в этом случае, при условии, что поле, которое должно содержать EJB, является статическим, вы можете применить к нему @EJB аннотацию. Если это ваша ситуация, вы должны проверить правила клиента приложения в общей спецификации Java EE 5.
Наконец, Java EE 6, с включением JSR-299, может позволить случиться тому, что вы описываете; я еще не знаю спецификации, поэтому не могу прокомментировать ее.
Надеюсь, это все поможет.
.Мне тоже интересно, могу ли я внедрить 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;
}
}
Если у вас есть много методов, в которых должно выполняться внедрение, вы можете использовать перехватчик.
Можно ли в новой спецификации 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, вам придется выполнить поиск.