Я наблюдал странное поведение в отношении инъекции EntityManager.Странное поведение при инъекции EntityManager
Ниже приводится урезанную версию рабочего кода:
Bean.java
@RequestScoped
@Named
public class Bean {
@Inject
private Service service; // +getter
// few variables + getters/setters
public String getMessage() {
return getService().message();
}
}
Service.java
@Stateless
@LocalBean
public class Service {
@PersistenceContext
private EntityManager entityManager; // +getter
public String message() {
return "[" + getEntityManager() + "]";
}
}
cdi.xhtml
<h:body>
<h:outputText value="#{bean.message}" />
</h:body>
Но мне нужно сделать некоторую обработку, при создании службы. Поэтому добавлен следующий метод производителя в заводском классе.
@Produces
@QService
public Service createService() {
Service service;
service = new Service();
// Some processing
return service;
}
и добавил же самый Классификатор Кью-сервис в точке инжекции в классе компонентов-.
@Inject
@QService
private Service service; // +getter
Теперь EntityManager является НЕ впрыскивается в классе службы, остается пустым.
Я не могу понять это поведение. Может кто-нибудь объяснить это?
Какой выход? Вы уверены, что нулевой объект - это PersitenceContext, а не служба? – perissf
@perissf Выход: ** [null] ** отображается в браузере. В принципе, это вывод метода ** message() ** класса ** Service **. –