事务没有得到jta事务管理器的支持

时间:2011-10-19 08:56:24

标签: java hibernate spring jta

我是Spring的新手,请大家帮忙,

我正在使用(Jboss 6.0 Final as Server)

org.springframework.transaction.jta.JtaTransactionManager

作为具有属性集的bean

transactionManagerName as java:/ TransactionManager和

userTransactionName as java:comp / UserTransaction。

在代码中,我设置了

jtaTxManager
属性thr setter。

然后

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

然后使用

tx.begin()
语句启动事务。

我已经使用

sessionFactory.getCurrentSession()  
来获取hibernate

的会话

最后我使用了

 
tx.commit() 

我正在使用hibernate在jta事务中保存多个记录 但是如果在某些记录之间发生任何数据库错误,那么在tx.commit()上抛出的约束违规异常会被抛出,这是

javax.transaction.RollbackException
当我曾经调用tx.rollback()但我的事务是没有得到回滚并在tx.rollback()上得到以下异常。我没有在hibernate属性中设置任何类型的自动提交属性。

但我的第一个记录被保存在数据库中,理想情况下它们不应该保存,但在回滚时会发生这种异常,所以我认为这就是为什么它们会被保存。

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)

2 个答案:

答案 0 :(得分:1)

这个问题是由于数据源配置造成的,忘了前面提到过,

从application-context.xml中删除

org.springframework.jdbc.datasource.DriverManagerDataSource

而不是这个,使用在 oracle-xa-ds.xml中配置的jboss的jndi数据

答案 1 :(得分:0)

Javadoc声明当事务被回滚而不是提交时抛出RollbackException - 我认为你不必在这种情况下手动回滚它。 http://download.oracle.com/javaee/6/api/javax/transaction/Transaction.html#commit%28%29