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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> транзакции в EJB 
:(
    Опции темы
KostenkoSergey
Дата 21.12.2005, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bean with container-managed transaction (атрибут - Required):
Код

    try{
      // --- get connect to DB
      con = SysUtils.getJNDIConnection("AbsCenterDS");
      stat = con.createStatement();
      prepStat = con.prepareStatement("update t set b=2");
      stat.execute("update t set a=1");
      ...
      prepStat.execute();
    } catch(Exception e){
      this.sessionContext.setRollbackOnly();
    }


так вот если ошибка возникает при втором апдейте - то первый не откатывается. А ведь должен ?

Что интересно - если устанавливаю RequiresNew - отрабатывает.

PM ICQ   Вверх
Guest
Дата 21.12.2005, 19:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А если так?
Код

try{
      // --- get connect to DB
      con = SysUtils.getJNDIConnection("AbsCenterDS");

      stat = con.createStatement();
      stat.execute("update t set a=1");

      prepStat = con.prepareStatement("update t set b=2");
      prepStat.execute();

    } catch(Exception e){
      this.sessionContext.setRollbackOnly();
    }

  Вверх
KostenkoSergey
Дата 21.12.2005, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Guest @ 21.12.2005, 19:14)
А если так?

на самом деле именно так и сделано, а это существенно ?
PM ICQ   Вверх
Guest
Дата 21.12.2005, 19:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Два стейтмента на одном коннекте - нехорошо как-то...
  Вверх
igon
Дата 22.12.2005, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
так вот если ошибка возникает при втором апдейте - то первый не откатывается. А ведь должен ?

Не должен, если Connection находится в режиме auto-commit. По умолчанию, все новые Connection создаются именно в нем. В этом режиме после выполнения каждого Statement выдается commit.
Для его отключения дай команду
Код

con.setAutoCommit(false);

перед первым Statement, который войдет в транзакцию.
con.commit/rollback тебе придется выдавать самому.

А для какого диапазона ты устанавливаешь RequiresNew?
Приведи все-таки полный реальный код.
Потому как возможна ситуация, когда у тебя будет ДВЕ транзакции, независимые

Цитата
Два стейтмента на одном коннекте - нехорошо как-то...

Хм. а почему?!?! Дай, если можно, ссылку на доку.
Можно, конечно, добавлять и между statemen`ами
Код

stmt.close()  

но - обязательно ли?

Это сообщение отредактировал(а) igon - 22.12.2005, 03:03


--------------------
Хотите поговорить об этом?
PM   Вверх
KostenkoSergey
Дата 22.12.2005, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(igon @ 22.12.2005, 02:19)
con.setAutoCommit(false);
- не помогает (вопрос я решил con.rollback()) но ведь нельзя так делать - CMP ж...

а код в принципах реальный...
это один метод - соответственно атрибут ему и ставлю....
Реквайрес - не отрабатывает
РеквайресНью - отрабатывает - но мне не подходит smile

PM 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.1326 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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