Class 使用 Glassfish 5 服务器和 JPA 的 Netbeans 中的名称错误或类路径未设置错误

Class name is wrong or classpath is not set ERROR in Netbeans with Glassfish 5 server and JPAs

我在 Netbeans 11 中有一个 Web 应用程序(安装了 JDK 8),我添加了 mysql-connector-java-8.0.[=28= 的依赖项] 并且我已经从我的数据库中生成了 JPA。

构建时没有错误。

但是当我尝试 运行 它时,Glassfish 服务器给我这些 errors (pastebin link)

这是我的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="InvoicesPU" transaction-type="JTA">
    <jta-data-source>java:app/Invoices</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties/>
  </persistence-unit>
</persistence>

在我的 java class 中,我称它为:

@Stateless
public class InvoiceEJB implements InvoiceEJBLocal {

    @PersistenceContext(unitName = "InvoicesPU")
    EntityManager em;
    ...
    em.someMethod();

为了完整性,我在编译阶段没有报错!

有人知道怎么解决吗?

尝试将您的 JDBC 驱动程序 jar 放入 Glassfish 域的 lib 文件夹。我通常将它们存储在 lib/ext.

经过一番研究我是这样解决的:

  1. similar problem, I created the Connection Pool and the Resource in the Glassfish Admin Console as suggested by devmind following this.

  2. 中汲取灵感
  3. 我删除了 mysql-connector-java-8.x.x.jar 的依赖项并添加了 mysql-connector-java-5.x.x.jar

  4. the persistence.xml中我设置了标签的JNDI名称jta-data-source

一切如期而至!

我不知道如何使用最新版本的 MySQL 连接器使一切正常工作,但至少,我的 Web 应用程序以这种方式工作。

编辑: 最新版本的 mysql-连接器,如 devmind has suggest you should set MysqlDataSource: from com.mysql.jdbc.jdbc2.optional.MysqlDataSource to com.mysql.cj.jdbc.MysqlDataSource as reported here.

希望对其他人有用。