Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несколько методов из разных EJB, в одну транзакцию 
V
    Опции темы
ShurikA
Дата 10.8.2009, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: нет
Всего: 3



Столкнулся с такой проблеммой:
Нужно обратиться к нескольким методам разных EJB в одной транзакции.

На сколько я понимаю эти методы нужно пометить как: @TransactionAttribute(TransactionAttributeType.MANDATORY) 
и до того как их вызывать начать транзакцию (и закончить после).
Правильно ли я понимаю?
 Если так, то на сколько я понимаю всю эту операцию нужно енкапсулировать в дополнительный EJB метод? так?

Есть ли смысл, на пример, создавать транзакцию в kонтроллере (в котором всё "начинается")?


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
ShurikA
Дата 11.8.2009, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: нет
Всего: 3



а в ответ тишина...


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
Shurr
Дата 12.8.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: 1
Всего: 7



ShurikA, 
1. MANDATORY, конечно, подходит, как и REQUIRED, но для данной конкретной ситуации достаточно просто SUPPORTS. . 
2. Да, транзакцию необходимо начать раньше. Как ее стартовать - через дополнительный метод в бине, или в контроллере - зависит от ситуации.
PM MAIL   Вверх
ShurikA
Дата 12.8.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: нет
Всего: 3



Цитата(Shurr @  12.8.2009,  09:29 Найти цитируемый пост)
Да, транзакцию необходимо начать раньше.

Я обязан старовать её в ручную, или сам факт того что я енкапсулирую всё это дело в EJB метод достаточно?


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
Maksym
Дата 12.8.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Цитата(ShurikA @  12.8.2009,  09:35 Найти цитируемый пост)
сам факт того что я енкапсулирую всё это дело в EJB метод достаточно

Так как ты описал -- не уверен.

В рамках одного EJB, чтобы управлять транзакциями самому (и таким образом размазать ее на несколько методов) нужно сказать, что бин сам будет все менеджерить с помощью: @TransactionManagement(TransactionManagementType.BEAN). 
Объявить внутри бина 
Код
@Resource private UserTransaction ut;

И потом в разных методах бина можно ее стартовать и коммитить следующим образом:
Начать транзакцию
Код

       ut.begin();
       em.joinTransaction();

Коммит обычным образом:
Код
ut.commit();

Проверено на JBoss AS.

Добавлено через 6 минут и 16 секунд
А вот тут (см. пункт 63, в частности) есть пример lookup'а транзакции из контекста (правда для WebLogic). Можно попробовать как будут работать такие механизмы.

Это сообщение отредактировал(а) Maksym - 12.8.2009, 11:56
PM MAIL   Вверх
Shurr
Дата 12.8.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: 1
Всего: 7



Цитата(ShurikA @  12.8.2009,  09:35 Найти цитируемый пост)
Я обязан старовать её в ручную, или сам факт того что я енкапсулирую всё это дело в EJB метод достаточно?

Сам факт того, что будет выделен новый метод в бине еще ничего не значит. Для того, чтобы транзакция стартовала автоматически, необходимо объявить, что транзакциями в бине управляет контейнер: @TransactionManagement(TransactionManagementType.CONTAINER), а у метода указать, что он должен стартовать транзакцию при ее отсутствии: @TransactionAttribute(TransactionAttributeType.REQUIRED) (ну или REQUIRED_NEW, если нужна именно новая транзакция).

Тогда при вызове метода вне транзакции будет стартована новая транзакция. Все методы, транзакционный аттрибут которых указан как SUPPORTS, REQUIRED или MANDATORY, будучи вызванными из такого метода, будут выполнены в той же транзакции.


Как управлять транзакциями вручную описал Maksym.
PM MAIL   Вверх
ShurikA
Дата 12.8.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: нет
Всего: 3



Shurr, 
Спасибо за разяснения.


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0547 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.