2012-03-12 2 views
0

Я искал возможность распространения JTA-транзакции из Java-кода на хранимые процедуры Oracle и не нашел ничего действительно актуального. Я спрашиваю об этом, потому что коллега работает с этим и сказал мне, что это сработало для него.Распространение транзакций и сохранение Контекстная синхронизация с хранимыми процедурами Oracle

Что мне интересно - ситуация, когда некоторая операция не была очищена, поскольку транзакция все еще открыта и впоследствии вызывается хранимая процедура (эта процедура не контролирует собственную транзакцию), будет ли хранимая процедура работать для просмотра операции в режиме сдерживания? Другими словами, будет ли синхронизм Persistence Context синхронизироваться с транзакционной памятью нижней базы данных?

Я изучаю экзамен Oracle JPA, и такая вещь не описана в книге, которую я читаю. Однако я читал на некоторых веб-сайтах, которые я искал Google, и люди говорят, что такое распространение транзакций работает, потому что в некоторых JDBC-драйверах есть интеграция между транзакциями JTA и базами данных (я просто не могу представить, как это может работать, - это менеджер транзакций транзакций базы данных?).

Заранее спасибо!

+0

Для тех, у кого есть заинтересованность по этому предмету, прочитайте обсуждение темы coderanch: http://www.coderanch.com/t/570119/ORM/java/Transaction-propagation-Persistence-Context-synchronization –

ответ

2

Я сделал то же самое, используя Spring + Hibernate, и самодельный фреймворк + спящий режим. Я считаю, что то же самое будет работать с JPA.

Если вы вызываете свой SP внутри той же транзакции, что и у JPA, все идет хорошо, единственная проблема заключается в том, что вы упомянули, поэтому просто позвоните flush() на свой persistenceManager перед вызовом SP и изменения, внесенные вами на вашем объекты будут записаны в БД в контексте транзакции.