首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有JPA、Eclipselink和Guice的NullPointerException

带有JPA、Eclipselink和Guice的NullPointerException
EN

Stack Overflow用户
提问于 2013-09-10 18:28:05
回答 2查看 1.3K关注 0票数 0

我有一个这样的JpaController类:

代码语言:javascript
复制
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的拦截器

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

发布于 2014-01-08 17:08:14

直接注入EntityManager有相当多的问题,可能会关闭,没有连接,...

不是注入EntityManager,而是尝试通过guice提供程序实现它:

代码语言:javascript
复制
public class JpaController
{
  @Inject private Provider<EntityManager> _entityManagerProvider;

  @Transactional
  public void create(Message msg)
  {
    _entityManagerProvider.get().persist(msg);
  }
}

Teorically,emProvider.get()将始终通过JpaPersistModule返回有效的EntityManager实例

票数 1
EN

Stack Overflow用户

发布于 2013-09-10 22:54:09

我的猜测是,您的持久性单元无法启动/初始化,或者没有正确配置。

在finest上启用日志记录(在您的persistence.xml中),以查看部署时是否发生任何错误。还可以尝试使用调试器来查看什么是null。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18716484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档