2012-04-24 9 views
0

Oracleデータベースに接続してデータを挿入するためにdatasourceを使用しています。Hibernate 4 - Oracle 10gとWebSphere 7のコミットに関する問題


<hibernate-configuration> 
    <session-factory> 
     <property name="connection.datasource">jdbc/LOCAL_ORACLE</property> 
     <property name="hibernate.format_sql">true</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> 
     <property name="current_session_context_class">thread</property> 
     <property name="hibernate.current_session_context_class">thread</property> 
     <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
    </session-factory> 
</hibernate-configuration> 

は、以下のデータを保存し、コードスニペットです: 以下は私の休止configエントリです。


[4/24/12 19:25:13:675 IST] 0000001a SystemErr  R Caused by: org.hibernate.TransactionException: unable to commit against JDBC connection 
[4/24/12 19:25:13:675 IST] 0000001a SystemErr  R  at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:116) 
[4/24/12 19:25:13:675 IST] 0000001a SystemErr  R  at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:178) 
[4/24/12 19:25:13:675 IST] 0000001a SystemErr  R  ... 13 more 
[4/24/12 19:25:13:675 IST] 0000001a SystemErr  R Caused by: java.sql.SQLException: DSRA9350E: Operation Connection.commit is not allowed during a global transaction. 
[4/24/12 19:25:13:675 IST] 0000001a SystemErr  R  at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.commit(WSJdbcConnection.java:1064) 
[4/24/12 19:25:13:675 IST] 0000001a SystemErr  R  at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:112) 

注:が休止状態と呼ばれている()txn.commitは、以下のエラーがスローされたときに



final Configuration cfg = new Configuration().addResource("SampleTable.hbm.xml").configure(); 
final ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); 
sessionFactory = cfg.buildSessionFactory(serviceRegistry); 
session = sessionFactory.openSession(); 
txn = session.beginTransaction(); 
session.save(cs90spTransDetails); 
txn.commit(); 

私が直面しています問題がある、私はhibernate.connectionを使用している場合、上記のコードは正常に動作します.driver_classとhibernate.connection.urlを使用してデータベースに接続します。データは問題なくデータベースに格納されます。

私は間違ったことをしていると確信しています。私は理解できません。誰かが私に何が足りないか教えてもらえますか?

ありがとうございます。 Jay Chandran。

答えて

1

私が見る限り、アプリケーションサーバーから取得したデータソースはcontainer-managed transactionsに参加するように設定されています。

したがって、これらのトランザクション(3.9.1. Transaction strategy configurationおよび3.9.3. Current Session context management with JTAを参照)を使用するようにHibernateを設定する必要があり、トランザクションを手動で管理する必要はありません。

+0

ご返信ありがとうございます。私は、ハイバネート設定でプロパティを追加しました。 ' org.hibernate.transaction.WebSphereTransactionManagerLookup '私は' java.lang.ClassNotFoundExceptionを取得しています:要求されたクラスをロードできませんでした:org.hibernate.transaction.WebSphereTransactionManagerLookup.'私がこのクラスをどこから見つけることができるかを確かめてください。 –

+0

Hibernate 4ではなく、以前のバージョンのHibernateを使用する必要がありますか? –

+0

@Jay:この設定は何とかHibernate 4で変更されたようです(http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch02.html#d0e1022を参照)。 – axtavt