![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
KostenkoSergey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 31.10.2005 Где: Kiev Репутация: 3 Всего: 8 |
Доброго времени суток!
Можно ли создать некий ресурс, для которого при откате транзакции контейнером будет вызываться метод rollback() ? Насколько я начал разбираться, нужно то ли имплементить XAResource то ли ещё что то ... и зарегистрироваить как то этот объект в менеджере транзакций.. ![]() Может у кого то есть пример илим ссылка с чего начинать копать ? Опишу в нескольких словах проблему, а то мож я вообще не в ту сторону копаю ![]() 1. Есть SLSB, который выполняет некую логику, потом вызывает по http, внешний сервис. 2. Внешний сервис, грубо говоря делает какую-то jdbc-операцию. 3. После этого SLSB, делает ещё одну jdbc-операцию. Эти три шага, если кратко и надо по-уму оформить в одну транзакцию, а то бывают ситуации, когда и пункт 2 отработал, и пункт 3 вроде как прошёл.. но потом, например, контейнер решит откатить транзакцию (мало ли что ему прийдёт в голову ![]() Не знаю, получилось ли у меня донести мысль - но с нетерпением жду совета ![]() |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Как я понял SLSB - это Stateless Session Bean. Если это действительно так, я бы попробовал в этом компоненте реализовать интерфейс SessionSynchronization, у которого есть collback методы :
afterBegin() - после начала транзакции beforeCompletion() - перед завершением транзакции (здесь ее еще можно откатить) afterCompletion() - после завершения транзакции, где можно выяснить отменена она или зафиксирована Уверен, что этот листенер работает с CMT, но не уверен, что работает с BMT, а докуменации под рукой нет. Во всяком случае проверить стоит. Добавлено через 12 минут и 1 секунду Соврал !!! Извините, это только для Stateful Session Bean. С другой стороны а не поможет ли делу простой вызов в конце Вашего метода getRollbackOnly() на объекте EJBContext с целью проверки - не вознамерился ли контейнер откатить транзакцию. |
|||
|
||||
KostenkoSergey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 31.10.2005 Где: Kiev Репутация: 3 Всего: 8 |
Я думал над этим, но в конце метода транзакция может быть ещё не помечена для отката, т.к этот бин вызывается другм, в котором может быть инициирован откат, да и как я понял нужна именно связь менеджера транзакций с менеджером ресурсов, потому как комитить контейнер начинает уже после того как код транзакционных методов отработал (в случае с СМТ), а во-вторых инетересно как поведёт себя ресурс, в случае критических ошиков сервера.. оутофмемори, или ещё там что.. - согласно спецификациям, если я не путаю, транзакции в таком случае - как правило откатываются.. хотя фактически наверное сервер успевает упасть до этапа фиксации ![]() Это сообщение отредактировал(а) KostenkoSergey - 13.10.2008, 15:47 |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Можно еще попробовать задействовать перехватчик бизнес методов:
1. Возражение о продолжении транзакции можно снять, если в бизнес методе, выполняющем транзакцию заставить контейнер обязательно создавать новую транзакцию, которую он будет обязан зафиксировать или откатить после выхода из этого метода. 2. А нельзя ли задействовать перехватчик, который будет срабатывать после выполнения бизнес метода. Хотя здесь остается вопрос - о какой транзакции после завершения метода мы запрашиваем.
Это сообщение отредактировал(а) mbasil - 13.10.2008, 17:25 |
|||
|
||||
necromancer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 317 Регистрация: 26.7.2006 Где: Москва Репутация: 6 Всего: 7 |
>Можно ли создать некий ресурс, для которого при откате транзакции контейнером будет вызываться метод rollback() ?
по идее будет бросатся исключение, а после исключения хоть обвызывайтесь. Другое дело если хочется сделать единый механизм для ручного отката и автоматического, тогда можно поковырять сорцы =) -------------------- С уважением, Виталий Смык ---------------------------------------------------------------------------------------------- SCJP, SCWCD, OCA http://dev.maryno.net/video/ |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |