JPA createEntityManager NPE JtaStatusHelper.getStatus

时间:2016-02-19 13:14:21

标签: java hibernate jpa nullpointerexception

我只是无法将ProfileDBUtil中的EntityManagerFactory对象注入到ProfileManager类中,我实际应用这些事务来查找数据库中的条目,或者更新一行等等。

createEntityManager()方法抛出条目末尾指定的异常。

奇怪的是,同一段代码适用于UAT环境而SIT环境失败。两种环境的所有配置都相同。类加载器顺序,共享库引用,模块类加载器是相同的。 这两个环境在其文件系统中都有必要的jar,并且似乎在运行时成功加载。

这个问题的根本原因是什么?

  public class ProfileDBUtil {


     private static final String PERSISTENCE_UNIT = "com.profile.userdb";

     public boolean loadProfile(String memberID) {
      EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
      ProfileManager upm = new ProfileManager(emf);
      List < Profile > ProfileList = upm.searchProfile(memberID);
     }
    }

    @SuppressWarnings("unchecked")
    @JPAManager(targetEntity = com.profile.userdb.model.Profile.class)
    public class ProfileManager {


     private EntityManagerFactory emf;

     public ProfileManager() {

     }
     public ProfileManager(EntityManagerFactory emf) {
      this.emf = emf;
     }

     public void setEntityManagerFactory(EntityManagerFactory emf) {
      this.emf = emf;
     }

     private EntityManager getEntityManager() {
      if (emf == null) {
       throw new RuntimeException("The EntityManagerFactory is null.  This must be passed in to the constructor``");
      }
      return emf.createEntityManager(); // THIS FAILS
     }

    }

记录跟踪;

    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:73)
    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:115)
    at org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149)
    at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1207)
    at org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:176)
    at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:89)
    at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:125)

1 个答案:

答案 0 :(得分:0)

尼尔编辑; “JtaStatusHelper是一个HIBERNATE类!”为我敲响了钟声。我去检查了以下的emf道具;

Map<String, Object> prop = emf.getProperties();
logger.debug("emf props : " + prop.toString());

观察了SIT和UAT环境之间的差异。 最基本的区别是,在SIT的道具的任何键中都没有openjpa,而UAT的所有地方都是如此。 SIT的配置以某种方式变成了与hibernate相关的行。但是,根据JPA设置,我在完成任务后出门了。

它简单地证明了最后一次将应用程序安装到Server中有问题。因此,我卸载了应用程序并从头开始安装。 它使事情正确。