我是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)
答案 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