транзакция не получает откат с помощью диспетчера транзакций jta - PullRequest
0 голосов
/ 19 октября 2011

Я новичок в Spring и hibernate, пожалуйста, помогите,

Я использую (Jboss 6.0 Final в качестве сервера)

org.springframework.transaction.jta.JtaTransactionManager

как bean-компонент со свойствами, установленными

TransactionManagerName как java: / TransactionManager и

userTransactionName как java: comp / UserTransaction.

В коде я установил

jtaTxManager
свойство для установщиков.

Затем

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

и затем транзакция запускается с помощью оператора

tx.begin()
.

Я использовал

sessionFactory.getCurrentSession()  
, чтобы получить сеанс hibernate

наконец, я использовал

tx.commit() 

Я использую hibernate для сохранения нескольких записей в транзакции jta, но если между ними возникает какая-либо ошибка базы данных, между некоторыми записями, такими как исключение нарушения ограничения, выдается на tx.commit (), который

javax.transaction.RollbackException
, который при перехвате я использовал для вызова tx.rollback (), но моя транзакция не получает отката и не получает следующее исключение для tx.rollback (). Я не установил никакой тип auto commit property в свойствах гибернации.

Но мои первые из записей в идеале сохраняются в базе данных, в идеале они не должны сохраняться, но во время отката происходит это исключение, поэтому я думаю, что именно поэтому они сохраняются.

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 ]

1 голос
/ 22 декабря 2011

Эта проблема возникла из-за конфигурации источника данных, о которой забыли упомянуть ранее,

Удалено из application-context.xml

org.springframework.jdbc.datasource.DriverManagerDataSource

и вместо этого используется jndi datasorce jboss, настроенный в oracle-xa-ds.xml

0 голосов
/ 19 октября 2011

Javadoc заявляет, что RollbackException генерируется, когда транзакция откатывается, а не фиксируется - вам не придется откатывать ее вручную в таком случае, я думаю. http://download.oracle.com/javaee/6/api/javax/transaction/Transaction.html#commit%28%29

...