Я наблюдал странное поведение при введении 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;
}
и добавили тот же квалификатор QService в точке внедрения в классе Боб .
@Inject
@QService
private Service service; // +getter
Теперь EntityManager НЕ внедрен в класс Сервис , он остается нулевым.
Я не могу понять это поведение. Может кто-нибудь объяснить это?