JPA + mysql部署到JBoss 7.1.1时找不到合适的驱动程序

时间:2014-02-06 20:31:04

标签: jpa jboss

我知道这已被问了很多次,但我仍然找不到解决办法。我在我的spring mvc项目中使用JPA + Hibernate提供程序+ MySQL。当我将它部署到Tomcat时,它执行没有问题。然后我将它移动到JBoss 7.1.1。它引发了我没有找到合适的驱动程序异常。

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test

所以我把它缩小到了JBoss。

这是我的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="personDB">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.springapp.modlels.OfficeEntity</class>
        <properties>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="9ijn)OKM"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        </properties>
    </persistence-unit>
</persistence>

这是我的主叫代码

 EntityManagerFactory emf = Persistence.createEntityManagerFactory("personDB");
        EntityManager mgr = emf.createEntityManager();
        mgr.getTransaction().begin();
        OfficeEntity officeEntity = new OfficeEntity();
        officeEntity.setOfficeName("test");
        mgr.persist(officeEntity);
        mgr.getTransaction().commit();

看起来JBoss在调用getTransaction()时找不到合适的驱动程序。我的司机是

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.2.1.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.21</version>
        </dependency>

更新:David Levesque建议我将JDBC驱动程序安装到JBoss。 这是我在\ modules \ com \ mysql \ main中所做的,我在这里复制了mysql-connector-java-5.1.21.jar并创建了module.xml,

<module xmlns="urn:jboss:module:1.0" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-java-5.1.21.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
  </dependencies>
</module>

我还修改了\ standalone \ configuration \ standalone.xml

<datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <datasource jta="false" jndi-name="java:/mysqldb" pool-name="my_mysl" enabled="true" use-ccm="false">
                    <connection-url>jdbc:mysql://localhost:3306/test</connection-url>
                    <driver-class>com.mysql.jdbc.Driver</driver-class>
                    <driver>mysql</driver>
                    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                    <pool>
                        <min-pool-size>10</min-pool-size>
                        <max-pool-size>100</max-pool-size>
                        <prefill>true</prefill>
                    </pool>
                    <security>
                        <user-name>root</user-name>
                        <password>9ijn)OKM</password>
                    </security>
                    <validation>
                        <validate-on-match>false</validate-on-match>
                        <background-validation>false</background-validation>
                    </validation>
                    <statement>
                        <prepared-statement-cache-size>32</prepared-statement-cache-size>
                        <share-prepared-statements>false</share-prepared-statements>
                    </statement>
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                    <driver name="mysql" module="com.mysql"/>
                </drivers>
            </datasources>

我还测试了JBoss控制台中的数据源,并成功连接。 但是我很抱歉,通过添加它,它仍然显示了同样的例外。

请帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

您的hibernate配置适用于jboss,但我认为您错过了使用jboss配置hibernate的一部分。

1)因此,请在

中的<module name="com.mysql"/>中添加依赖项module.xml
jboss-as-7.1.1.Final\modules\org\hibernate\main\module.xml 

2)在standalone.xml中创建正确的数据源

<datasource jta="false" jndi-name="java:jboss/datasources/mysqldb" pool-name="my_mysl" enabled="true" use-ccm="false">
                    <connection-url>jdbc:mysql://localhost:3306/test</connection-url>
                    <driver-class>com.mysql.jdbc.Driver</driver-class>
                    <driver>mysql</driver>
                    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                    <pool>
                        <min-pool-size>10</min-pool-size>
                        <max-pool-size>100</max-pool-size>
                        <prefill>true</prefill>
                    </pool>
                    <security>
                        <user-name>root</user-name>
                        <password>9ijn)OKM</password>
                    </security>
                    <validation>
                        <validate-on-match>false</validate-on-match>
                        <background-validation>false</background-validation>
                    </validation>
                    <statement>
                        <prepared-statement-cache-size>32</prepared-statement-cache-size>
                        <share-prepared-statements>false</share-prepared-statements>
                    </statement>
                </datasource>

3)从persistence.xml中删除以下属性

<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="9ijn)OKM"/>

除了这些配置是正确的,但请通过上述更改纠正您的代码安静。您的错误将会解决......

作为参考,您可以点击此链接Configure hibernate in jboss 7.1.1

谢谢...