【问题标题】:Java EE and JPA under Glassfish, NoClassDefFound com/mysql/jdbc/ResultSetMetaDataGlassfish下的Java EE和JPA,NoClassDefFound com/mysql/jdbc/ResultSetMetaData
【发布时间】:2013-12-07 13:39:24
【问题描述】:

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

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

我正在使用本地 MySql 数据库,与这些数据库的连接仍然有效。为了访问这些 Databese 的表,我使用了 Netbeans 生成的实体类。这些类位于外部库(OthelloLibrie)中。在这里也可以找到我的Session 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 jakarta-ee jpa netbeans glassfish


    【解决方案1】:

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

    【讨论】:

    • 我已经包含了它,目前它只包含在 EJB 中,但我试图将它包含到我的所有项目中,但效果不佳。然后我将 .jar 直接移动到 Glassfish 域文件夹。我从 Glassfish 服务器对数据库执行了 ping 操作,但它仍然有效。所以很奇怪。
    • 一个合适的解决方案可能是将其添加到 Glassfish 域文件夹中的 lib/ext 文件夹中,或者更好地添加到 JDK 安装文件夹中的 jre/lib/ext 文件夹中;后者始终是 Java 类路径的一部分,添加到其中的 jar 在每个 Java 应用程序中都是可见的。
    • 当我这样做时,我必须从我的项目中删除驱动程序吗?因为现在我在 JPA 中有 NullPointerExceptions。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多