【发布时间】:2014-01-08 17:08:14
【问题描述】:
我有一个这样的 JpaController 类:
public class JpaController
{
@Inject private EntityManager em;
@Transactional
public void create(Message msg)
{
em.persist(msg);
}
}
我正在安装一个com.google.inject.persist.PersistFilter(虽然没有过滤它,因为此时我不在 HTTP 请求中,它是一个后台线程)。
我还安装了new JpaPersistModule(PU)
我认为 EntityManager 已成功填充(尽管我对此没有信心,因为代码没有到达那一行)。
抛出的异常来自@Transactional的拦截器
java.lang.NullPointerException
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.getActivePersistenceContext(EntityManagerImpl.java:1712)
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.begin(EntityTransactionImpl.java:49)
at com.google.inject.persist.jpa.JpaLocalTxnInterceptor.invoke(JpaLocalTxnInterceptor.java:62)
at my code - the line that called controller.create(msg);
使用的库: EclipseLink 2.4.1, guice 3.0, guice-persist 3.0, guice-jndi 3.0, guice-servlet 3.0, MySQL 5.1.25, javax.persistence 2.0.4, Jackson、activemq、lombok、joda-time、javax.mail、javax.inject、asm、jersey、log4j、jettison、jsr311。
【问题讨论】:
-
我相信只有在 EM 在 getTransaction() 调用后关闭时才会发生此错误,因为启动事务需要 EntityManager 保持打开状态,但我不熟悉设置来告诉你为什么EM 将被关闭。也许提供配置,有人可能会看到出了什么问题。
标签: java jpa eclipselink guice guice-persist