【问题标题】:EntityManager null in @Produces@Produces 中的 EntityManager 为空
【发布时间】:2016-09-30 18:19:47
【问题描述】:

我正在尝试创建一个 EntityManager 生成以在事务拦截器中使用,因为我在 tomcat 中使用 CDI。

所以,这是我的 EntityManagerProducer 类:

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

}

在此之后,我在 TransactionalInterceptor 中 @Inject EntityManager,请参阅:

@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;

    }

}

但是当我尝试这段代码时,EntityManagerProducer 类中的 EntityManager 总是返回 NULL。怎么了?

【问题讨论】:

    标签: java jpa cdi


    【解决方案1】:

    这一点

    @PersistenceContext
    private EntityManager entityManager;
    

    只保证可以在 Java EE 环境中工作,但不能在像 Tomcat 这样的单纯 Servlet 容器中工作。

    【讨论】:

    • 谢谢,我正在自己创建EntityManager。
    猜你喜欢
    • 2018-05-10
    • 2023-03-24
    • 2023-04-11
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2011-07-19
    相关资源
    最近更新 更多