Источник данных JPA (Hibernate) XA выполняет хранимую процедуру в транзакции - PullRequest
1 голос
/ 15 сентября 2011

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

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

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

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

1 Ответ

1 голос
/ 16 сентября 2011

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

Я закончил тем, что переместил метод в другой EJB и аннотировал метод с помощью @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) и получил SessionContext через

@Resource
protected SessionContext ctx;

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...