Java 无法使用HIbernate在JBoss上加载请求的类:com.mysql.jdbc.Driver

Java 无法使用HIbernate在JBoss上加载请求的类:com.mysql.jdbc.Driver,java,mysql,hibernate,jdbc,Java,Mysql,Hibernate,Jdbc,我一直试图在工作中建立一个EJB项目来学习Hibernate,到目前为止,我一直被这个错误所困扰。我尝试了几乎所有在SO或其他地方找到的解决方案,但都没有效果。该项目有一个TimerBean,它从另一个Bean调用Methodos,该Bean使用Hibernate访问数据库并打印出一个存储值。我使用JPA从表中生成实体类,并手动为生成的实体类编写映射文件。以下是我的项目中的相关文件: hibernate.cfg.xml <?xml version='1.0' encoding='utf-8

我一直试图在工作中建立一个EJB项目来学习Hibernate,到目前为止,我一直被这个错误所困扰。我尝试了几乎所有在SO或其他地方找到的解决方案,但都没有效果。该项目有一个TimerBean,它从另一个Bean调用Methodos,该Bean使用Hibernate访问数据库并打印出一个存储值。我使用JPA从表中生成实体类,并手动为生成的实体类编写映射文件。以下是我的项目中的相关文件:

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>       
  <session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="connection.url">jdbc:mysql://localhost:3306/accountdb</property>
    <property name="connection.username">root</property>
    <property name="connection.password">pass</property>

    <!-- Hibernate properties -->
    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hbm2ddl.auto">update</property>

    <!-- Mapping Files -->
    <mapping resource="com/gto/test/Account.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
<?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="TestEJB3Project">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <class>com.gto.test.Account</class>
  <class>com.gto.test.Accountaccesslog</class>
</persistence-unit>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.gto.test">
    <class name="Account" table="account">
        <id name="id" column="id">
            <generator class="increment" />
        </id>
        <property name="accessCount" column="accessCount"/>
    </class>
</hibernate-mapping>
Account.hbm.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>       
  <session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="connection.url">jdbc:mysql://localhost:3306/accountdb</property>
    <property name="connection.username">root</property>
    <property name="connection.password">pass</property>

    <!-- Hibernate properties -->
    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hbm2ddl.auto">update</property>

    <!-- Mapping Files -->
    <mapping resource="com/gto/test/Account.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
<?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="TestEJB3Project">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <class>com.gto.test.Account</class>
  <class>com.gto.test.Accountaccesslog</class>
</persistence-unit>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.gto.test">
    <class name="Account" table="account">
        <id name="id" column="id">
            <generator class="increment" />
        </id>
        <property name="accessCount" column="accessCount"/>
    </class>
</hibernate-mapping>


感谢您的帮助。我尝试了几乎所有我能在网上找到的解决方案,但我注意到它们大多是用于简单的java项目,而不是用于企业项目。我还尝试使用JDBC驱动程序创建一个简单的连接来访问数据库,但也没有成功。简单Java项目中的连接工作正常。提前谢谢

您是否已将服务器配置为使用Mysql?由于您提到JBoss默认情况下,wildfly和EAP都使用H2,而不是Mysql

我确实解决了这个问题,但我不确定这是正确的方法还是问题已经得到了解决。我在META-INF目录下的项目中添加了一个jboss deployment structure.xml文件:

<jboss-deployment-structure>
<deployment>
    <dependencies>          
        <module name="javax.api" />
        <module name="javax.transaction.api" />
        <module name="javax.xml.rpc.api" />
        <module name="javax.rmi.api" />
        <module name="org.omg.api" />
        <module name="configext" />
    </dependencies>
</deployment>
<module xmlns="urn:jboss:module:1.3" name="configext">
<dependencies>          
    <module name="javax.api" />
</dependencies>
<resources>
    <resource-root path="mysql-connector-java-5.1.39-bin.jar"/>
    <resource-root path="antlr-2.7.7.jar"/>
    <resource-root path="cdi-api-1.1-PFD.jar"/>
    <resource-root path="classmate-1.3.0.jar"/>
    <resource-root path="dom4j-1.6.1.jar"/>
    <resource-root path="el-api-2.2.jar"/>
    <resource-root path="geronimo-jta_1.1_spec-1.1.1.jar"/>
    <resource-root path="hibernate-commons-annotations-5.0.1.Final.jar"/>
    <resource-root path="hibernate-core-5.2.1.Final.jar"/>
    <resource-root path="hibernate-jpa-2.1-api-1.0.0.Final.jar"/>
    <resource-root path="jandex-2.0.0.Final.jar"/>
    <resource-root path="javassist-3.20.0-GA.jar"/>
    <resource-root path="javax.inject-1.jar"/>
    <resource-root path="jboss-interceptors-api_1.1_spec-1.0.0.Beta1.jar"/>
    <resource-root path="jboss-logging-3.3.0.Final.jar"/>
    <resource-root path="jsr250-api-1.0.jar"/>
</resources>    

然后,在服务器安装根目录下的modules/I下添加了一个configext/module/文件夹,并将我的所有JAR文件复制到其中,并将一个module.xml文件添加到目录中:

<jboss-deployment-structure>
<deployment>
    <dependencies>          
        <module name="javax.api" />
        <module name="javax.transaction.api" />
        <module name="javax.xml.rpc.api" />
        <module name="javax.rmi.api" />
        <module name="org.omg.api" />
        <module name="configext" />
    </dependencies>
</deployment>
<module xmlns="urn:jboss:module:1.3" name="configext">
<dependencies>          
    <module name="javax.api" />
</dependencies>
<resources>
    <resource-root path="mysql-connector-java-5.1.39-bin.jar"/>
    <resource-root path="antlr-2.7.7.jar"/>
    <resource-root path="cdi-api-1.1-PFD.jar"/>
    <resource-root path="classmate-1.3.0.jar"/>
    <resource-root path="dom4j-1.6.1.jar"/>
    <resource-root path="el-api-2.2.jar"/>
    <resource-root path="geronimo-jta_1.1_spec-1.1.1.jar"/>
    <resource-root path="hibernate-commons-annotations-5.0.1.Final.jar"/>
    <resource-root path="hibernate-core-5.2.1.Final.jar"/>
    <resource-root path="hibernate-jpa-2.1-api-1.0.0.Final.jar"/>
    <resource-root path="jandex-2.0.0.Final.jar"/>
    <resource-root path="javassist-3.20.0-GA.jar"/>
    <resource-root path="javax.inject-1.jar"/>
    <resource-root path="jboss-interceptors-api_1.1_spec-1.0.0.Beta1.jar"/>
    <resource-root path="jboss-logging-3.3.0.Final.jar"/>
    <resource-root path="jsr250-api-1.0.jar"/>
</resources>    


我在某处读到,这会将这些包添加到服务器的全局类路径中。我可能完全错了,但这似乎有效。如果这不是一个永久性的解决办法或不正确的做事方式,我仍然愿意接受建议。非常感谢

看起来MySQL JDBC驱动程序没有(或没有正确)部署。是的,数据源是MySQL并且已连接。