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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTA транзакции в EJB slsb, EJB + JPA + JTA 
V
    Опции темы
Asal
Дата 6.11.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброе время суток Вам.
Вот тут вопрос с транзакциями опять возник.
Есть slsb bean
Interface
Код

@Remote
public interface BaseFacadeRemote {
  @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
  void persist(java.lang.Object o);
}

Implementation
Код

@Stateless(name = "BaseFacadeBean", mappedName = "ejb/BaseFacadeBean")
public class BaseFacadeBean implements BaseFacadeRemote {
  /**
   * The em.
   */
  @PersistenceContext(unitName = "MyUnit", type = PersistenceContextType.TRANSACTION)
  protected EntityManager em;
  @Resource
  private UserTransaction ut;

    public void persist(Object o) {
    try {
      ut.begin();
      em.persist(o);
      ut.commit();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}

При вызове 
Код

ut.begin();

Вылетает ошибка
Код

java.lang.IllegalStateException: Operation not allowed.
    at com.sun.enterprise.distributedtx.UserTransactionImpl.checkUserTransactionMethodAccess(UserTransactionImpl.java:135)
    at com.sun.enterprise.distributedtx.UserTransactionImpl.begin(UserTransactionImpl.java:151)
..........

если убрать UserTransaction из кода, то при вызове метода persist(...) объект сохраняется только в EntityManager,
в базу ничего не попадает (оно и понятно почему).

Не понятным остается что за ошибка ?

Это сообщение отредактировал(а) Asal - 6.11.2008, 16:54


--------------------
PM MAIL ICQ   Вверх
powerOn
Дата 6.11.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

Репутация: 28
Всего: 159



Цитата(Asal @  6.11.2008,  16:52 Найти цитируемый пост)
(оно и понятно почему).


и почему же?

Цитата(Asal @  6.11.2008,  16:52 Найти цитируемый пост)
При вызове 
    
ut.begin();

Вылетает ошибка



и правильно делает. транзакциями контейнер рулит, а не бин. это в спеке четко описано.


Ваши данные будут сохранены, как только успешно завершится транзакция.




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Asal
Дата 6.11.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(powerOn @  6.11.2008,  17:00 Найти цитируемый пост)
и почему же?

потому что он сохраняется в EntityManager и транзакцию commit() никто не делал.

Цитата(powerOn @  6.11.2008,  17:00 Найти цитируемый пост)
это в спеке четко описано.

а можно ссылочку на спеку, пожалуйста.


--------------------
PM MAIL ICQ   Вверх
powerOn
Дата 6.11.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

Репутация: 28
Всего: 159



ссылка


Цитата(Asal @  6.11.2008,  17:06 Найти цитируемый пост)
и транзакцию commit() никто не делал.


commit сделает контейнер либо когда выполняющийся поток завершится, либо когда произойдет выход из метода.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Asal
Дата 10.11.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



powerOn, спасибо разобрался


--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.