0

Websphere Application Server 6.1 で Hibernate 3 を使用しています。JNDI を使用してデータソースに接続しています。管理コンソールで接続を確認したところ、接続に成功しました。しかし、プロジェクトをサーバーにデプロイし、JNDI を使用してデータソースに接続すると、以下のエラー メッセージが表示されます。

Caused by: java.lang.NullPointerException
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:159)
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)

cause:null と表示されます。

Oracle 10g データベースを使用しています。

ログにいくつかの例外が表示されます。これはこの問題に関連していますか?

00000027 RegisteredRes E   WTRN0078E: An attempt by the transaction manager to call start on a transactional resource has resulted in an error. The error code was XAER_RMERR. The exception stack trace follows: oracle.jdbc.xa.OracleXAException
    at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1157)
    at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:295)
    at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.start(WSRdbXaResourceImpl.java:1324)
    at com.ibm.ejs.j2c.XATransactionWrapper.start(XATransactionWrapper.java:1467)
    at com.ibm.ws.Transaction.JTA.JTAResourceBase.start(JTAResourceBase.java:141)
    at com.ibm.ws.Transaction.JTA.RegisteredResources.startRes(RegisteredResources.java:1103)
    at com.ibm.ws.Transaction.JTA.RegisteredResources.enlistResource(RegisteredResources.java:525)
    at com.ibm.ws.Transaction.JTA.TransactionImpl.enlistResource(TransactionImpl.java:3219)
    at com.ibm.ws.Transaction.JTA.TranManagerSet.enlist(TranManagerSet.java:396)
    at com.ibm.ejs.j2c.XATransactionWrapper.enlist(XATransactionWrapper.java:693)
    at com.ibm.ejs.j2c.ConnectionManager.lazyEnlist(ConnectionManager.java:1723)
    at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.lazyEnlist(WSRdbManagedConnectionImpl.java:2109)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.beginTransactionIfNecessary(WSJdbcConnection.java:600)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.getMetaData(WSJdbcConnection.java:1533)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:116)
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)

もう一つの例外は

    00000027 XATransaction E   J2CA0030E: Method enlist caught javax.transaction.SystemException: XAResource start association error:XAER_RMERR
    at com.ibm.ws.Transaction.JTA.RegisteredResources.startRes(RegisteredResources.java:1154)
    at com.ibm.ws.Transaction.JTA.RegisteredResources.enlistResource(RegisteredResources.java:525)
    at com.ibm.ws.Transaction.JTA.TransactionImpl.enlistResource(TransactionImpl.java:3219)
    at com.ibm.ws.Transaction.JTA.TranManagerSet.enlist(TranManagerSet.java:396)
    at com.ibm.ejs.j2c.XATransactionWrapper.enlist(XATransactionWrapper.java:693)
    at com.ibm.ejs.j2c.ConnectionManager.lazyEnlist(ConnectionManager.java:1723)
    at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.lazyEnlist(WSRdbManagedConnectionImpl.java:2109)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.beginTransactionIfNecessary(WSJdbcConnection.java:600)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.getMetaData(WSJdbcConnection.java:1533)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:116)
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
Caused by: oracle.jdbc.xa.OracleXAException
    at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1157)
    at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:295)
    at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.start(WSRdbXaResourceImpl.java:1324)
    at com.ibm.ejs.j2c.XATransactionWrapper.start(XATransactionWrapper.java:1467)
    at com.ibm.ws.Transaction.JTA.JTAResourceBase.start(JTAResourceBase.java:141)
    at com.ibm.ws.Transaction.JTA.RegisteredResources.startRes(RegisteredResources.java:1103)
while trying to enlist resources from datasource jdbc/OracleData with the Transaction Manager for the current transaction, and threw a ResourceException.

以下は私の休止状態の設定ファイルです:

<hibernate-configuration>
    <session-factory>
        <property name="dialect">
            org.hibernate.dialect.Oracle10gDialect
        </property>
        <property name="hibernate.transaction.factory_class">
            org.hibernate.transaction.JTATransactionFactory
        </property>
        <property name="hibernate.transaction.manager_lookup_class">
            xxx.xxx.xxx.WebSphereExtendedJTATransactionLookup
        </property>
        <property name="jta.UserTransaction">
            java:comp/UserTransaction
        </property>
    </session-factory>
</hibernate-configuration>

ここでWebSphereExtendedJTATransactionLookupはorg.hibernate.transaction.TransactionManagerLookupを実装します

これは私がセッションを作成する方法です

final Configuration configuration = new AnnotationConfiguration();
configuration.setProperty("hibernate.connection.datasource", dataSource);
configuration.setProperty(org.hibernate.cfg.Environment.SHOW_SQL, System.getProperty(SHOW_SQL,"false"));
configuration.configure();
return configuration.buildSessionFactory();
4

1 に答える 1

0

残念ながら、構成ファイルを見ないと何とも言えませんが、試してみます。このエラーは、アプリと JNDI プール間の接続構成に問題があるようです。

  • デプロイメント記述子 (web.xml) に JNDI 接続の構成が含まれていることを確認してください。例:
    
        <resource-ref>
            <description>Your New DataSource</description>
            <res-ref-name>jdbc/mysqlblogpostdataref</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>
    
  • 構成の問題については、hibernate.cfg を参照してください (Spring を使用していないと仮定します)。別の例を次に示します。


<property name="current_session_context_class">thread</property>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/mysqlblogpostdataref</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
また、ここで引用されている context.xml ファイルの設定を確認してくださいConfigure hibernate to connect to database via JNDI Datasource

他の例のソース: http://jefferyhaynes.net/2009/11/29/websphere-hibernate-datasource-configuration-for-mysql/

編集 あなたの更新に基づいて、私はいくつかの調査を行うことができました。私が見つけたものを見てください:

(出典: IBM )

エラーは、トランザクション マネージャがトランザクションを XA トランザクションに変換できなかったことです。具体的には、Oracle はエラー XAER_RMERR、エラー コード番号 65535 を返しました。ORA-65535 は有効なエラー コードではなく、XAER_RMERR は本質的に XA で問題が発生したことを意味します。これは、Oracle データベースが XA トランザクションをサポートするように構成されていないことを示しています。したがって、WebSphere Application Server トランザクション マネージャーが Oracle トランザクション マネージャーにこの XA トランザクションに参加するように指示すると、Oracle は従うことができず、この例外をスローします。

また、念のため、context.xml および web.xml ファイルを確認してください。WS を使用しているときは、これらの構成を忘れていました。

于 2013-06-05T14:39:01.140 に答える