Ответ 1
Да, используйте JNDI-поиск.
Поскольку ваш POJO создан вами (я полагаю), контейнер не отвечает за инъекцию зависимостей.
С новой спецификацией EJB 3.1 возможно ли вставить EJB в pojo? Я знаю, что в EJB 3.0 аннотацию @EJB можно было бы использовать для внедрения EJB, но это не сработало для простых pojos.
Если это не так, я должен поискать bean-компонент в JNDI, поскольку я знаю, что вы не можете просто использовать новое ключевое слово.
Да, используйте JNDI-поиск.
Поскольку ваш POJO создан вами (я полагаю), контейнер не отвечает за инъекцию зависимостей.
С новой спецификацией EJB 3.1 можно ввести EJB в pojo? Я знаю, что в EJB 3.0 аннотация @EJB может использоваться для ввода EJB, но это не работает на простых pojos.
Включение EJB в POJO возможно IF, вы используете JSR-299 (Java C) и D ependency I njection), т.е. если ваш POJO является управляемым CDI bean. В этом случае вы можете сделать:
@Inject MyEJB service
Но это не функция EJB 3.1, это происходит из CDI. И если вы не используете CDI, вам нужно будет выполнить поиск.
Новая спецификация EJB (3.1) добавляет возможность указывать глобальные имена JNDI для EJB. Это означает, что вы можете использовать их в любом bean, где угодно.
Вы должны сделать явный поиск JNDI, однако, поскольку контейнер EJB 3.1 не будет знать о вашем POJO.
Единственное исключение, которое, как я предполагаю, не относится к вам, заключается в том, что ваш POJO действительно является клиентом приложения, и в этом случае поле, содержащее EJB, является статическим, вы можете применить аннотацию @EJB к нему. Если это ваша ситуация, вы должны проверить правила клиента приложения в общей спецификации Java EE 5.
Наконец, Java EE 6 с его включением JSR-299 может позволить то, что вы описываете, каким-то образом; Я еще не знаю спецификации, поэтому не могу прокомментировать это.
Надеюсь, все это поможет.
Интересно, могу ли я вводить EJB в неуправляемые объекты. Более подробную информацию см. В документации Weld (справочная реализация JSR 299).
Но вы можете выполнять инъекцию зависимостей вручную внутри репозитория или factory следующим образом:
@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;
}
}
Если у вас есть много методов, в которых должна выполняться инъекция, вы можете использовать перехватчик.