【问题标题】:EclipseLink Configuration in Wildfly-10.1.0.Final not reflecting the PersistenceProviderWildfly-10.1.0.Final 中的 EclipseLink 配置未反映 PersistenceProvider
【发布时间】:2017-07-13 00:33:14
【问题描述】:

我使用 EclipseLink 作为 JPA 实现。在 Wildfly-10.1.0.Final 中部署时,我总是收到错误 No Persistence provider for EntityManager named <the persistence unit name>。我已按照链接中的步骤操作:

  1. https://docs.jboss.org/author/display/WFLY10/JPA+Reference+Guide#JPAReferenceGuide-UsingEclipseLink

  2. https://developer.jboss.org/thread/273134

步骤和 module.xml 与我的完全匹配。在 Standalone.xml 中,我已启用上述第一个链接中所述的系统属性

我启用了跟踪日志记录并发现以下内容: [org.hibernate.jpa.HibernatePersistenceProvider](默认任务 4)由于名称不匹配而排除在考虑范围之外

持久性提供者:org.eclipse.persistence.jpa.PersistenceProvider JDK版本:1.8

请求是否有人可以阐明我哪里出错了。

将跟踪添加为

Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named AAAAA_BBBB
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)

其他不匹配痕迹

2017-02-23 17:47:09,276 DEBUG [org.hibernate.jpa.HibernatePersistenceProvider] (default task-55) Checking persistence-unit [name=AAAAA_BBBB, explicit-provider=org.eclipse.persistence.jpa.PersistenceProvider] against incoming persistence unit name [AAAAA_BBBB]
2017-02-23 17:47:09,276 DEBUG [org.hibernate.jpa.HibernatePersistenceProvider] (default task-56) Checking persistence-unit [name=AAAAA_BBBB, explicit-provider=org.eclipse.persistence.jpa.PersistenceProvider] against incoming persistence unit name [AAAAA_BBBB]
2017-02-23 17:47:09,277 DEBUG [org.hibernate.jpa.HibernatePersistenceProvider] (default task-56) Excluding from consideration due to name mis-match

其他痕迹

2017-02-24 05:32:49,031 TRACE [org.hibernate.jpa.boot.spi.ProviderChecker](默认任务 7)针对 Hibernate 检查请求的 PersistenceProvider 名称 [org.eclipse.persistence.jpa.PersistenceProvider]提供者名称 2017-02-24 05:32:49,031 调试 [org.hibernate.jpa.HibernatePersistenceProvider](默认任务 11)由于提供者不匹配而排除在考虑范围之外 2017-02-24 05:32:49,031 TRACE [org.hibernate.jpa.boot.spi.ProviderChecker](默认任务 7)与 Hibernate 提供程序名称不匹配

persistence.xml

<persistence-unit name="AAA_BBB" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>    
        <jta-data-source>java:/<jndi-Name in standalone</jta-data-source>
        <class>...</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="<url>"/>
            <property name="javax.persistence.jdbc.user" value="<username>"/>
            <property name="javax.persistence.jdbc.password" value="<pwd>"/>
        </properties>
    </persistence-unit>
    <persistence-unit name="CCC_DDD" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>    
        <jta-data-source>java:/<jndi-Name in standalone</jta-data-source>       
        <class>...</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="<url>"/>
            <property name="javax.persistence.jdbc.user" value="<username>"/>
            <property name="javax.persistence.jdbc.password" value="<pwd>"/>
        </properties>
    </persistence-unit>

【问题讨论】:

  • 您从哪里得到异常“没有名为...的 EntityManager 的持久性提供程序”?也许您可以包含一些堆栈跟踪。
  • 感谢您的回复。我现在已经在问题本身中添加了堆栈跟踪。更准确地说,我的 entityJar 位于 Wildfly10.1.0Final 的模型目录中。它包含 module.xml 中的 dpendency 以及 entityJars 的 MANIFEST.MF 中提到的 org.eclipse.persistence
  • 我正在使用 EclipseLink 2.6.4 和 Java 1.8。它在 TOMCAT 中运行良好。这可能是一个问题,因为我看到 EclipseLink 2.6.x 需要 Java 7,但没有这样的痕迹要求的最小版本是 Java 1.7,所以我希望它也应该与 JDK1.8 一起使用。
  • 由于跟踪显示No Persistence provider for EntityManager named AAAAA_BBBB,请在您的问题中包含持久性单元AAAAA_BBBB。更多信息总是好的:)
  • 您是否偶然在部署中包含了 eclipselink?

标签: jpa eclipselink wildfly-10


【解决方案1】:

终于能够以一种有点奇怪的方式解决问题(可能)

第一步:创建一个名为(com.abc.persistence:main)的模块目录 第2步将eclipselink和jipijapa的所有相关jar包复制到同一个模块中并引用。

步骤 2. 删除系统属性“eclipselink.archive.factory”

它干净利落。

我分析的是,如果放置了其中一个系统属性,那么目标服务器等其他属性永远不会添加到属性映射中(我在代码中的某处检查过)。一旦我删除,我认为所有其他人也会被添加,因此它可以工作,因为如果在模块中创建上述目录(上面的第 1 步)使其工作,我会感到惊讶。

【讨论】:

  • 请问您所说的“并提到它”到底是什么意思?你到底是怎么做到的?您可以使用您的工作配置的详细信息来编辑您的答案吗?提前致谢。
  • 嗨@SayoOladeji,抱歉回复晚了。对于您的问题的第一点,“并引用它”意味着我从module.xml 中引用了它。在standalone.xml中,我删除了系统属性“eclipselink.archive.factory”
猜你喜欢
  • 2018-02-09
  • 1970-01-01
  • 2017-01-21
  • 2019-02-04
  • 2017-01-03
  • 2015-11-23
  • 2017-05-03
  • 2014-11-04
  • 2016-12-12
相关资源
最近更新 更多