【问题标题】:javax.persistence.PersistenceException: No Persistence provider for EntityManager named WebApplication1PUjavax.persistence.PersistenceException:没有名为 WebApplication1PU 的 EntityManager 的持久性提供程序
【发布时间】:2016-05-29 02:32:54
【问题描述】:

我正在从 NetBeans 将一个简单的 Web 应用程序部署到 WildFly 10,以尝试自学 Java EE。但是,尝试从 NetBeans 运行 jpql 查询时出现以下错误:

javax.persistence.PersistenceException: No Persistence provider for EntityManager named WebApplication1PU
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)

尽管我已经定义了一个持久性提供程序,但还是这样。这是我的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="WebApplication1PU" transaction-type="JTA">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jta-data-source>java:/jboss/db</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect"/>
        <property name="hibernate.show_sql" value="true"/>
    </properties>
  </persistence-unit>
</persistence>    

当我在 WildFly 中测试我的数据源时,它可以工作:

我的 JPA 子系统的默认数据源配置为 java:/jboss/db

我已将它列为 WildFly 中的持久性单元:

我正在为 MS SQL Server 使用 JTDS 驱动程序,但在启动服务器时确实出现了这个我无法摆脱的错误:

10:33:07,600 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 33) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("jdbc-driver" => "JTDS")
]) - failure description: "WFLYJCA0041: Failed to load module for driver [net.sourceforge.jtds]"

但是,正如我所说,测试数据源是有效的,所以这无关紧要。谁能帮帮我?

【问题讨论】:

标签: jpa wildfly persistence-provider


【解决方案1】:

正如评论所述,Wildfly 找不到提供程序模块。

下载:https://sourceforge.net/projects/jtds/files/jtds/1.3.1/jtds-1.3.1-dist.zip/download - 这是 jtds JDBC 驱动程序, 并将其安装到wildfly的/modules目录中。

您可以启动 ./jboss-cli.sh 来安装模块。

见:JTDS module under WildFly (JBoss) 深入了解一下。

此网址:http://www.mastertheboss.com/jboss-server/jboss-datasource/configuring-a-datasource-with-postgresql-and-jboss-wildfly

有如何将 postgres jdbc 驱动安装到 wildfly 中,但它实际上与其他 JDBC 驱动的过程相同,只是包名称更改等。

【讨论】:

  • 我已经修复了我遇到的那个小错误,但现在我得到 javax.persistence.PersistenceException: No Persistence provider for EntityManager named WebApplication1PU at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85) 试图运行 JPQL 查询。我的持久性管理器似乎已部署,但我的战争被标记为不持久。
  • 我刚刚从头开始尝试让它工作,现在我进入了我的 JPQL 查询窗口:java.lang.Exception: You need to specify either database connection or datasource in persistence.xml 我已经完成了这个,我已经清理并使用正确的构建了 persistence.xml NetBeans 中的数据源并部署它。我可以在 WildFly 中看到持久性单元,并且我的数据源测试有效,但我的 .war 部署被标记为非持久性。
  • 你的持久性在哪里?应该是 /META-INF/ 验证你的数据源是否绑定到同一个 jndi
【解决方案2】:

在持久性单元属性中,您缺少以下内容

        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/mydb"/>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
        <property name="hibernate.connection.username" value="dbroot"/>
        <property name="hibernate.connection.password" value="password"/>

【讨论】:

  • 他正在对 WildFly 中定义的数据源进行 JNDI 查找,这就是他不需要这些设置的原因。
  • 在随应用部署的文件中存储用户/密码是一个安全问题,应始终避免..
猜你喜欢
  • 2015-11-08
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多