2016-09-30 3 views
1

Ich versuche, einen EntityManager erzeugt, um in einem Transactional Interceptor zu verwenden, weil ich CDI innerhalb Tomcat verwende.EntityManager null in @Products

Also, das ist meine EntityManagerProducer Klasse:

import javax.enterprise.context.RequestScoped; 
import javax.enterprise.inject.Disposes; 
import javax.enterprise.inject.Produces; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

@RequestScoped 
public class EntityManagerProducer { 

    @PersistenceContext 
    private EntityManager entityManager; 

    @Produces 
    @RequestScoped 
    public EntityManager getEntityManager() { 
     return entityManager; 
    } 

    public void closeEntityManager(@Disposes EntityManager em) { 
     if (em != null && em.getTransaction().isActive()) { 
      em.getTransaction().rollback(); 
     } 
     if (em != null && em.isOpen()) { 
      em.close(); 
     } 
    } 

} 

Danach i die EntityManager in TransactionalInterceptor @Inject finden Sie unter:

@Transactional 
@Interceptor 
public class TransactionalInterceptor { 

    private static Logger log = Logger.getLogger(TransactionalInterceptor.class); 

    @Inject 
    private EntityManager em; 

    @AroundInvoke 
    public Object manageTransaction(InvocationContext context) throws NotSupportedException, SystemException{ 
    em.getTransaction().begin(); 
    log.debug("Starting transaction"); 
    Object result = null; 
    try { 
     result = context.proceed(); 
     em.getTransaction().commit(); 
     log.debug("Committing transaction"); 
    } catch (Exception e) { 
     log.error(e); 
     em.getTransaction().rollback(); 
    } 
    return result; 

    } 

} 

Aber wenn ich versuche, diesen Code der EntityManager in EntityManagerProducer Klasse immer NULL zurückgeben. Was ist falsch ?

Antwort

1

Dieses Bit

@PersistenceContext 
private EntityManager entityManager; 

wird nur in einer Java EE-Umgebung zu arbeiten, garantiert, aber nicht in einem bloßen Servlet-Container wie Tomcat.

+0

Danke, Ich erstelle EntityManager von mir. – RonaldoLanhellas

Verwandte Themen