我有一个这样的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);使用的库: guice 2.4.1,guice 3.0,guice-persist 3.0,guice-JNDI3.0,guice-Servlet3.0,MySQL 5.1.25,javax.persistence 2.0.4,Jackson,activemq,lombok,joda-time,javax.mail,javax.inject,asm,jersey,log4j,jettison,jsr311。
发布于 2014-01-08 17:08:14
直接注入EntityManager有相当多的问题,可能会关闭,没有连接,...
不是注入EntityManager,而是尝试通过guice提供程序实现它:
public class JpaController
{
@Inject private Provider<EntityManager> _entityManagerProvider;
@Transactional
public void create(Message msg)
{
_entityManagerProvider.get().persist(msg);
}
}Teorically,emProvider.get()将始终通过JpaPersistModule返回有效的EntityManager实例
发布于 2013-09-10 22:54:09
我的猜测是,您的持久性单元无法启动/初始化,或者没有正确配置。
在finest上启用日志记录(在您的persistence.xml中),以查看部署时是否发生任何错误。还可以尝试使用调试器来查看什么是null。
https://stackoverflow.com/questions/18716484
复制相似问题