Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Транзакционность считывания из MQ и записи в БД / 6 сообщений из 6, страница 1 из 1
14.11.2012, 11:15
    #38037544
Tyo
Tyo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакционность считывания из MQ и записи в БД
В приложении на WAS7 читаю сообщения из MQ-очереди стандартным образом через MDB и Activation Spec. После чего MBD что-то там делает с сообщениями и что-то пишет в БД.

Подскажите плз, есть ли способ обеспечить транзакционность этих двух действий -- считывание из MQ и запись в БД?
То есть сделать так, чтобы сообщение выгребалось из очереди только в том случае, если запись в БД прошла успешно. А если нет -- чтобы сообщение оставалось в очереди.

Заранее спасибо
...
Рейтинг: 0 / 0
14.11.2012, 11:19
    #38037554
alienrom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакционность считывания из MQ и записи в БД
Нет.
Где-то видел подобный вопрос...
...
Рейтинг: 0 / 0
14.11.2012, 11:54
    #38037619
Транзакционность считывания из MQ и записи в БД
Tyo,

Да, можно.
Это функционал любого сертифицированного J2EE-сервера.
В общем случае все участники транзакции должны поддерживать двухфазные транзакции.

Транзакцией может управлять контейнер (Container-Managed) или приложение (Bean-Managed для EJB/MDB).
Подробнее про это можно прочитать в The Java EE 5Tutorial раздел 33.Transactions .
Еще более подробно в официальной спецификации J2EE 5, раздел "Transaction Management".
SR-000244 Java Platform, Enterprise Edition 5 Specification (Final Release)

Касательно MDB/MQ/Activation Spec - нужно выполнить необходимые настройки в самом Activation Spec и в MQ чтобы решить что делать с сообщением если его не удалось обработать определенное количество раз. В качестве подсказки и варианта - Backout Queue.

Особенности настройки сервера приложений для двухфазных транзакций с конкретными СУБД нужно читать в руководстве на сервер приложений.
...
Рейтинг: 0 / 0
14.11.2012, 12:10
    #38037652
Tyo
Tyo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакционность считывания из MQ и записи в БД
Евгений Хабаров,
Глянул, спасибо, примерно понятно.
Фактически достаточно для CMP в нужном месте поставить setRollbackOnly и нормально настроить ActSpec, чтобы она не захлебнулась в отвергнутых сообщениях...
...
Рейтинг: 0 / 0
14.11.2012, 12:32
    #38037699
Транзакционность считывания из MQ и записи в БД
TyoЕвгений Хабаров,
Глянул, спасибо, примерно понятно.
Фактически достаточно для CMP в нужном месте поставить setRollbackOnly и нормально настроить ActSpec, чтобы она не захлебнулась в отвергнутых сообщениях...
Да, в общем именно так.
А в особо "фатальных" случаях можно из MDB выкинуть RuntimeException, что, при обычных настройках ActSpec, приведет к его останову. Например для случая, когда СУБД "упала", или пропали права/возможность записи.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.06.2017, 22:14
    #39476454
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакционность считывания из MQ и записи в БД
Доброго времени суток! Есть SessionBean, в этом бине есть метод, что-то вроде
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public String insertIntoTable() {
   SessionContext sessionContext;
   try {
      ...
      ...
      //делаем инсерт
      String query = "SELECT id INTO var_id FROM NEW TABLE (INSERT INTO my_table.....";
      String res = executeQuery(query);
      //после делаем проверку нет ли аналогичной записи в таблице 
      boolean duplicate = checkDuplicate();
      if (duplicate) {
         sessionContext.setRollbackOnly();
      }
      ...
   } catch (Exception ex) {
      sessionContext.setRollbackOnly();
   }
}


Вопрос - будет ли rollback инсерта, так сказать откат JDBC-транзакции вместе с откатом управляемой контейнером транзакции? Предполагаю, что отката инсерта не будет, но хочется услышать подтверждение или опровержение. Нашел вот такое утверждение
Менеджер транзакций J2EE управляет всеми транзакциями корпоративного компонента за исключением управляемых компонентом JDBC-транзакций

Заранее спасибо!
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Транзакционность считывания из MQ и записи в БД / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]