Currently, I'm using PersistenceContext to inject an EntityManager. The EM is injected perfectly.
@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();
}
}
Now I try to decorate the bean, and suddenly the em doesn't get injected. I get a NullPointerException.
@Decorator
public StatelessSessionBeanDecorator implements StatelessSessionBeanLocal {
@Inject
@Delegate
@Any
StatelessSessionBeanLocal sb
@Override
public Collection<MyObject> getAllObjects(){
System.out.println("Decorated method!");
return sb.getAllObjects();
}
}
I know EJB and CDI are 2 completely different managers, so the one doesn't know about the other. I'm expecting that @PersistenceContext is an EJB injection point, while @Inject is a CDI one. What should I do to solve this and get the EntityManager to be injected like it should?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…