В настоящее время я использую PersistenceContext для ввода EntityManager. ЭМ впрыскивается отлично.Inject PersistenceContext с CDI
@Stateless
public StatelessSessionBean implements StatelessSessionBeanLocal {
@PersistenceContext(unitName = "MyPersistenceUnit")
private EntityManager em;
@Override
public Collection<MyObject> getAllObjects(){
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriqQuery<MyObject> query = cb.createQuery(MyObject.class);
query.from(MyObject);
return em.createQuery(query).getResultList();
}
}
Теперь я пытаюсь украсить бобов, и внезапно им не вводят. Я получаю исключение NullPointerException.
@Decorator
public StatelessSessionBeanDecorator implements StatelessSessionBeanLocal {
@Inject
@Delegate
@Any
StatelessSessionBeanLocal sb
@Override
public Collection<MyObject> getAllObjects(){
System.out.println("Decorated method!");
return sb.getAllObjects();
}
}
Я знаю, что EJB и CDI являются 2 совершенно разными менеджерами, поэтому никто не знает о другом. Я ожидаю, что @PersistenceContext является точкой инъекции EJB, а @Inject - CDI. Что я должен сделать, чтобы решить эту проблему и получить EntityManager для инъекций, как и следовало бы?
Почему вы используете '@ Delegate' и' @ Any' на вашей точке впрыска? Соответствует ли конфиг вашему 'beans.xml'? Можете ли вы опубликовать его? Также, пожалуйста, укажите, какую версию используют стеклянную рыбку. –