Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在weblogic 12c上运行的REST项目(netbeans)上,EntityManager始终为空_Java_Jpa_Datasource_Weblogic12c - Fatal编程技术网

Java 在weblogic 12c上运行的REST项目(netbeans)上,EntityManager始终为空

Java 在weblogic 12c上运行的REST项目(netbeans)上,EntityManager始终为空,java,jpa,datasource,weblogic12c,Java,Jpa,Datasource,Weblogic12c,我一直在从事Netbeans 8.2(使用Java1.7编译)上的REST项目。我正在Weblogic服务器12.1.2上部署我的web项目,并使用JPA(w/Eclipselink)作为引用服务器上配置的JTA数据源的持久化引擎 我在谷歌的调查中发现了一个常见的问题;然而,我无法在网络上找到任何解决方案来帮助我解决这个问题 基本上,我的persistence.xml文件就是这样定义的: <?xml version="1.0" encoding="UTF-8&

我一直在从事Netbeans 8.2(使用Java1.7编译)上的REST项目。我正在Weblogic服务器12.1.2上部署我的web项目,并使用JPA(w/Eclipselink)作为引用服务器上配置的JTA数据源的持久化引擎

我在谷歌的调查中发现了一个常见的问题;然而,我无法在网络上找到任何解决方案来帮助我解决这个问题

基本上,我的
persistence.xml
文件就是这样定义的:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="gchPermissionPU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc.vz.customer.ds</jta-data-source>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="eclipselink.target-server" value="WebLogic"/>
      <property name="javax.persistence.query.timeout" value="660000"/>
      <property name="eclipselink.logging.level" value="ALL"/>
      <property name="eclipselink.persistence-context.flush-mode" value="COMMIT"/>
      <property name="eclipselink.cache.shared.default" value="false"/>
    </properties>
  </persistence-unit>
</persistence>
无论何时调用这一行,我都会得到NullPointerException(目前我在其中引用entityManager的唯一一行):

我认为出现空指针是因为
entityManager
变量为空

以下是my weblogic上的基本数据源配置:

我想知道我是否需要weblogic端的某种附加配置或任何缺失的代码


提前感谢您的时间和帮助。感谢您提供任何线索/反馈。

我通过手动创建
EntityManager工厂
EntityManager
解决了我的问题,答案如下:

似乎在没有EJB引用的情况下,您需要强制创建持久性组件。因此,我的团队提出了以下解决方案:

//一,。定义持久性所需的组件:

@PersistenceUnit(unitName = "gchPermissionPU")
private EntityManagerFactory entityManagerFactory;
private EntityManager entityManager;
//二,。如果实体管理器工厂为“null”,则该方法将创建实体管理器工厂

但是,我想知道这是否是1000以上用户使用的Web应用程序的最佳解决方案。我不相信Web应用程序应该依赖EJB进行注入(可能是因为它是Weblogic),但我记得我不久前在Tomcat上实现了一个类似的应用程序,不需要进行这种“变通”

如果有人有其他意见或反馈,请让我知道

谢谢

Query permissionsQuery = entityManager.createNativeQuery(nativeSqlQuery.toString());
@PersistenceUnit(unitName = "gchPermissionPU")
private EntityManagerFactory entityManagerFactory;
private EntityManager entityManager;
public final EntityManager getEntityManager() {
    if (entityManagerFactory == null) {
        entityManagerFactory = Persistence.createEntityManagerFactory("gchPermissionPU");
    }
    if (entityManager == null) {
        entityManager = entityManagerFactory.createEntityManager();
    }

    return entityManager;
}