Glassfish下的JavaEE和JPA,NoClassDefFound com/mysql/jdbc/ResultSetMetaData

Glassfish下的JavaEE和JPA,NoClassDefFound com/mysql/jdbc/ResultSetMetaData,mysql,jakarta-ee,jpa,netbeans,glassfish,Mysql,Jakarta Ee,Jpa,Netbeans,Glassfish,我从EJB访问MySql数据库时遇到问题。将我的EAR部署到Glassfish服务器并调用使用entity类的方法后,我得到如下异常: java.lang.NoClassDefFoundError:com/mysql/jdbc/ResultSetMetaData 我正在使用一个本地MySql数据库,与这些数据库的连接仍然有效。为了访问这些数据库的表,我使用Netbeans生成的实体类。这些课程位于外部图书馆(Otherllolibrarie)。在这里您还可以找到我的会话Bean的远程接口 我必须

我从EJB访问MySql数据库时遇到问题。将我的EAR部署到Glassfish服务器并调用使用entity类的方法后,我得到如下异常:

java.lang.NoClassDefFoundError:com/mysql/jdbc/ResultSetMetaData

我正在使用一个本地MySql数据库,与这些数据库的连接仍然有效。为了访问这些数据库的表,我使用Netbeans生成的实体类。这些课程位于外部图书馆(Otherllolibrarie)。在这里您还可以找到我的会话Bean的远程接口

我必须将实体类放在外部库中,因为我正在连接到EAR的企业客户机应用程序中使用它们

我的企业应用程序项目包含来自实体类的主会话bean和一些会话bean,实体类使用外部库中的实体类。它还包含持久性XML,并包括我的JDBC驱动程序:

从客户端应用程序调用createPartie方法时出现错误:

Partie p = eJBOthelloGame.createPartie(jTextFieldPseudo.getText());
SessionBeanOthelloRemote.java:

@Stateless
public class SessionBeanOthello implements SessionBeanOthelloRemote {
   @EJB
   private PlayerFacadeLocal playerFacade;
   @EJB
   private PartieFacadeLocal partieFacade;

   @Override
   public Partie createPartie(String player) {
    //Ajout du tuple
    Partie p = new Partie();

    Player p1 = new Player();
    p1.setId(1);
    p1.setNom(player);
    playerFacade.create(p1);

    p.setPlayer1(p1);
    partieFacade.create(p);

    return p;   
}
Partie和Player是与生成的外观一起使用的实体类

我在网上搜索过了,但是我从来没有发现过这种错误。似乎只有来自JDBC的包或类ResultSetMetaData有问题,而不是整个驱动程序


你能帮我吗

您需要在项目中包含提供mysql JDBC驱动程序类的
mysql连接器java.jar
文件。在使用Netbeans时,只需将其添加为库jar即可。
您可以在上找到它,以及下载和安装说明

我还包括它,目前它只包括在EJB中,但我试图将它包括在我的所有项目中,但没有效果。然后我将.jar直接移动到Glassfish域文件夹。我从Glassfish服务器ping到数据库,它仍然可以工作。所以这很奇怪。一个合适的解决方案可以是将其添加到Glassfish域文件夹中的
lib/ext
文件夹,或者更好地添加到JDK安装文件夹中的
jre/lib/ext
文件夹;后者始终是Java类路径的一部分,添加到其中的JAR在每个Java应用程序中都是可见的?因为现在我在JPA中有NullPointerException。