2

JBoss 7.1 AS にデプロイしようとしている Spring/Hibernate Web アプリケーション (現在 Tomcat で正常に動作) があります。

アプリケーションはすべて正常に起動しますが、Hibernate Persistence 設定でテーブルを作成すると、起動時にエラーが発生します。

Tomcat で動作していた永続化 XML は次のとおりです。

<persistence-unit name="persistenceUnit"
    transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.hbm2ddl.auto" value="create" />
        <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />
        <property name="hibernate.show_sql" value="false" />
    </properties>
</persistence-unit>

この PU を JBoss に移動すると、DB に接続できないというエラーが発生し始めました。

20:41:18,312 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-5) HHH000231: Schema export unsuccessful: java.lang.UnsupportedOperationException: The application must supply JDBC connections

グーグルで調べたところ、永続化構成に休止状態接続の詳細を追加して、PU を次のように更新するという提案が見つかりました。

<persistence-unit name="persistenceUnit"
    transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.hbm2ddl.auto" value="create" />
        <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.connection.url" value="jdbc\:mysql\://localhost\:3306/socialcv" />
        <property name="hibernate.connection.username" value="root" />
        <property name="hibernate.connection.password" value="root" />
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
    </properties>
</persistence-unit>

私はこれを行い、ユーザーエラーは発生しなくなりましたが、アプリの起動時に次のエラーが発生するだけです:

20:35:41,791 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-8) HHH000231: Schema export unsuccessful: java.sql.SQLException: No suitable driver found for jdbc\:mysql\://localhost\:3306/socialcv
    at java.sql.DriverManager.getConnection(DriverManager.java:604) [rt.jar:1.7.0_03]
    at java.sql.DriverManager.getConnection(DriverManager.java:190) [rt.jar:1.7.0_03]
    at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:173) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.tool.hbm2ddl.DatabaseExporter.<init>(DatabaseExporter.java:52) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:368) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:305) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:294) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:452) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_03]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_03]
    at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_03]

誰かがこれに遭遇したか、解決策を知っていますか?

4

2 に答える 2

4

まず第一に、DB 接続 URL が間違っているようです。それはおそらくあるはずjdbc:mysql://localhost:3306/socialcvです。

それで:

MySQL ドライバーをモジュールとしてインストールすることをお勧めします。こちらを参照してください: https://community.jboss.org/wiki/DataSourceConfigurationinAS7#Installing_a_JDBC_driver_as_a_module

次に、standalone.xml を使用して、そのドライバーを使用するデータ ソースを定義します。

            <datasource jta="true" jndi-name="java:jboss/datasources/YourDatasourceName" pool-name="AnotherName" enabled="true" use-java-context="true" use-ccm="true">
                <connection-url>jdbc:mysql://localhost:3306/socialcv</connection-url>
                <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>
                    <use-strict-min>false</use-strict-min>
                    <flush-strategy>FailingConnectionOnly</flush-strategy>
                </pool>
                <security>
                    <user-name>hehe</user-name>
                    <password>hehehe</password>
                </security>
            </datasource>
            <drivers>
                ...
                <driver name="mysql" module="com.mysql">
                    <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
                </driver>
            </drivers>

persistence.xml では、hibernate.connection.*プロパティを使用せず、代わりに次を使用します。

<non-jta-data-source>java:jboss/datasources/YourDatasourceName</non-jta-data-source>

これは、すべてを初期化するための事実上の方法です。使用上のご注意

transaction-type="JTA"

それ以外の

transaction-type="RESOURCE_LOCAL"

あなたはに変更する必要があります

<jta-data-source>java:jboss/datasources/YourDatasourceName</jta-data-source>

これにより、CMT (コンテナー管理トランザクション) が提供されます。

于 2012-04-08T21:25:26.197 に答える
1

データベースドライバーをインストールしましたか?

https://community.jboss.org/wiki/DataSourceConfigurationinAS7#Installing_the_JDBC_Driver

(MySQL ドライバーの特定の問題に注意してください)

ベスト、アンダース

于 2012-04-08T19:54:45.287 に答える