【问题标题】:NullPointerException with JPA, Eclipselink and Guice带有 JPA、Eclipselink 和 Guice 的 NullPointerException
【发布时间】: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


【解决方案1】:

直接注入 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 实例

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 2012-11-08
      相关资源
      最近更新 更多