2011-10-19 53 views
0

我新的Spring和Hibernate請大家幫忙,交易是沒有得到支持滾動使用JTA事務管理

我使用(Jboss的6.0最終作爲服務器)

的org.springframework.transaction.jta.JtaTransactionManager

豆與屬性中設置

transactionManagerName如Java:/事務管理和

userTrans actionName爲java:comp/UserTransaction。

在代碼中,我設置了

jtaTxManager
屬性thr setter。

然後

javax.transaction.TransactionManager tx = jtaTxManager.getTransactionManager();

,然後事務正在使用

tx.begin()
啓動語句。

我用

sessionFactory.getCurrentSession()
終於拿到休眠

的會議上,我已經使用

我使用Hibernate來保存JTA事務 中的多個記錄,但如果之間發生的任何錯誤在tx.commit()上拋出一些類似於約束違規異常的記錄,這是

javax.transaction.RollbackException
,當catch我用於調用tx.rollback()但我的事務沒有得到回滾並獲得tx.rollback()的異常時,我還沒有在hib中設置任何類型的自動提交屬性ernate屬性。

但我的第一個記錄被保存在數據庫中理想情況下,他們不應該保存,但在回滾時發生這種異常,所以我認爲這就是爲什麼他們得到保存。

 
java.lang.IllegalStateException: BaseTransaction.rollback - [com.arjuna.ats.internal.jta.transaction.arjunacore.notx] [com.arjuna.ats.internal.jta.transaction.arjunacore.notx] no transaction! 
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.rollback(BaseTransaction.java:158) 
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.rollback(BaseTransactionManagerDelegate.java:114) 
+0

你是否開始交易? – Puce

+0

是的,但雖然回滾我得到以上例外 – Ram

回答

1

此問題是由於數據源配置,忘了前面所提到的,

從應用程序的context.xml刪除

org.springframework.jdbc.datasource.DriverManagerDataSource

和而不是這個,使用jboss的jndi datasorce配置在oracle-xa-ds.xml中

0

的Javadoc指出,當交易已經rolledback而不是COMMITED的RollbackException被拋出 - 你不必在這種情況下手動回滾了,我想。 http://download.oracle.com/javaee/6/api/javax/transaction/Transaction.html#commit%28%29

+0

然後在tx.commit();我得到異常像javax.transaction.RollbackException:[com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] [com .arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted]仍然保存我以前的記錄 – Ram