![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Столкнулся с такой проблеммой:
Нужно обратиться к нескольким методам разных EJB в одной транзакции. На сколько я понимаю эти методы нужно пометить как: @TransactionAttribute(TransactionAttributeType.MANDATORY) и до того как их вызывать начать транзакцию (и закончить после). Правильно ли я понимаю? Если так, то на сколько я понимаю всю эту операцию нужно енкапсулировать в дополнительный EJB метод? так? Есть ли смысл, на пример, создавать транзакцию в kонтроллере (в котором всё "начинается")? |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
а в ответ тишина...
|
|||
|
||||
| Shurr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 24.10.2006 Репутация: 1 Всего: 7 |
ShurikA,
1. MANDATORY, конечно, подходит, как и REQUIRED, но для данной конкретной ситуации достаточно просто SUPPORTS. . 2. Да, транзакцию необходимо начать раньше. Как ее стартовать - через дополнительный метод в бине, или в контроллере - зависит от ситуации. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Я обязан старовать её в ручную, или сам факт того что я енкапсулирую всё это дело в EJB метод достаточно? |
|||
|
||||
| Maksym |
|
||||||||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
Так как ты описал -- не уверен. В рамках одного EJB, чтобы управлять транзакциями самому (и таким образом размазать ее на несколько методов) нужно сказать, что бин сам будет все менеджерить с помощью: @TransactionManagement(TransactionManagementType.BEAN). Объявить внутри бина
И потом в разных методах бина можно ее стартовать и коммитить следующим образом: Начать транзакцию
Коммит обычным образом:
Проверено на JBoss AS. Добавлено через 6 минут и 16 секунд А вот тут (см. пункт 63, в частности) есть пример lookup'а транзакции из контекста (правда для WebLogic). Можно попробовать как будут работать такие механизмы. Это сообщение отредактировал(а) Maksym - 12.8.2009, 11:56 |
||||||||
|
|||||||||
| Shurr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 24.10.2006 Репутация: 1 Всего: 7 |
Сам факт того, что будет выделен новый метод в бине еще ничего не значит. Для того, чтобы транзакция стартовала автоматически, необходимо объявить, что транзакциями в бине управляет контейнер: @TransactionManagement(TransactionManagementType.CONTAINER), а у метода указать, что он должен стартовать транзакцию при ее отсутствии: @TransactionAttribute(TransactionAttributeType.REQUIRED) (ну или REQUIRED_NEW, если нужна именно новая транзакция). Тогда при вызове метода вне транзакции будет стартована новая транзакция. Все методы, транзакционный аттрибут которых указан как SUPPORTS, REQUIRED или MANDATORY, будучи вызванными из такого метода, будут выполнены в той же транзакции. Как управлять транзакциями вручную описал Maksym. |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Shurr,
Спасибо за разяснения. |
|||
|
||||
![]()
|
| Правила форума "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. |