2014-02-06 36 views
0

我知道這已被問了很多次,但我仍然無法找到解決方案。我在我的spring mvc項目中使用JPA + Hibernate提供程序+ MySQL。當我將它部署到Tomcat時,它可以毫無問題地執行。然後當我將它移動到JBoss 7.1.1。它會拋出我沒有合適的Driver發現異常。JPA + mysql在部署到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。 這是我在\模塊做的\ com \ mysql的\主,我在這裏複製使用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控制檯中測試了數據源,並且它連接成功。 但我很抱歉,通過添加這個,它仍然顯示我同樣的例外。

請幫忙,謝謝。

+0

您還需要指向你的persistence.xml使用您所指定的數據源在standalone.xml中。 – jpkrohling

+0

如果我擁有persistence.xml中的所有連接信息,是否需要此數據源? – user454232

+0

是的,datasourse是必要的,因爲你使用JBoss。當你從persistence.xml部署你的項目時,它將採用來自datasourse的連接。 –

回答

0

你的休眠配置對於jboss來說很好,但我想你錯過了用jboss配置休眠的一部分。

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"/> 

除了這些你r配置是正確的,但請糾正你的代碼與上述變化。你的錯誤將解決...

對於參考,您可以點擊此鏈接Configure hibernate in jboss 7.1.1

謝謝...

相關問題