Источник данных JPA (Hibernate) XA выполняет хранимую процедуру в транзакции

Я использую JBoss 6, JPA (Hibernate) на Sql Server 2005 с использованием транзакций XA. Я могу выполнять запросы и хранимые процедуры, но я пытаюсь запустить определенную хранимую процедуру в своей собственной транзакции (вроде). Это означает, что если хранимая процедура дает сбой или возвращает ошибку, изменения, сделанные хранимой процедурой, должны быть отменены, но не изменения, сделанные другими запросами, такими как entityManager.persist()

Я пробовал BEGIN TRANSACTION, ROLLBACK и т. Д.... в самой хранимой процедуре, но я получаю сообщение об ошибке JDBC о том, что транзакция не существует.

Как я могу сделать это? Запуск хранимой процедуры в своей собственной транзакции? (не уверен как)

Спасибо за помощь

1 ответ

Решение

Отвечая на мой собственный вопрос, этот метод выполнения хранимой процедуры был вложенным методом в EJB, но он не был частью бизнес-интерфейса. Очевидно, что в этом случае новые транзакции не создаются (даже с REQUIRES_NEW), исправьте меня, если я неправильно.

В итоге я переместил метод в другой EJB и аннотировал метод@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) и получение SessionContext через

@Resource
protected SessionContext ctx;

и делать ctx.setRollbackOnly(); когда мне нужно было откатить изменения хранимой процедуры без отката изменений внешних транзакций.

Это хорошо работает для меня, но если я что-то не так, не стесняйтесь поправлять меня.

Другие вопросы по тегам