Injizieren PersistenceContext mit CDI

Derzeit bin ich mit PersistenceContext zu injizieren einen EntityManager. Die EM ist, injiziert perfekt.

@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();
    }
}

Versuche ich jetzt schmücken die Bohne, und plötzlich ist die em nicht injiziert. Ich bekomme eine NullPointerException.

@Decorator
public StatelessSessionBeanDecorator implements StatelessSessionBeanLocal {

    @Inject
    @Delegate
    @Any
    StatelessSessionBeanLocal sb

    @Override
    public Collection<MyObject> getAllObjects(){
        System.out.println("Decorated method!");
        return sb.getAllObjects();
    }
}

Ich weiß, EJB und CDI sind 2 völlig verschiedene Manager, so das man weiß nicht über die anderen. Ich gehe davon aus, dass @PersistenceContext ist ein EJB-injection-Punkt, während die @Inject ist ein CDI ein. Was sollte ich tun, um dieses Problem zu lösen und erhalten den EntityManager injiziert werden, wie es sollte?

  • Warum sind Sie mit @Delegate und @Any auf Ihrem einspritzzeitpunkt? Funktioniert die config entsprechend Ihrer beans.xml? Kannst du es posten? Auch bitte angeben, welche version von glassfish, die Sie verwenden.
InformationsquelleAutor Erates | 2014-12-16
Schreibe einen Kommentar