Откат транзакций и веб-службы

Учитывая пример вызова двух методов веб-сервисов из сеанса bean, что, если между вызовами к двум методам выбрано исключение? В случае не обращения в веб-службы транзакция откатывается и никакого вреда не делается. Однако веб-служба не откатится. Конечно, даже при одном веб-сервисе есть проблема. Хотя это общий вопрос, меня интересуют решения, связанные с сеансом EJB beans.

Легким и индивидуальным ответом было бы добавить специальный "метод отката" к веб-службе для каждого метода "реальной функциональности". То, что я прошу, - это стандартный способ сделать это.

Ответы

Ответ 1

Ряд методов развивается, но проблема все еще достаточно режущая, что процесс стандартизации еще не предоставил нам полностью портативное решение.

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

Протоколы WS-AT и WS-BA являются ведущими стандартами для транзакционных веб-сервисов. К сожалению, они указывают только протокол, а не языковые привязки. Другими словами, на уровне языка программирования нет стандартного API. Для Java ближайшая вещь - JSR-156, но она еще не готова.

Затем возникает проблема: как связать транзакцию EJB (т.е. JTA/XA) ​​с WS. Поскольку модели, используемые протоколами WS-AT и XA, тесно связаны, это может быть достигнуто с помощью протокола-моста. Несколько серверов приложений предоставляют что-то в одиночку. JBoss представил их на JavaOne - см. http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/txbridge/BOF-4182.odp

Обратите внимание, что метод мостового соединения протокола также может использоваться другим способом, чтобы позволить EJB, который использует, например, база данных базы данных XA, которая будет показана как транзакционная веб-служба.

Однако модель блокировки, используемая двумя транзакциями с фиксацией фазы, действительно подходит только для коротких транзакций в одном и том же домене управления. Если ваши услуги будут работать в одном и том же центре обработки данных, вам, вероятно, это поможет. Для более широкого распространения, будь то географический или административный, вы, вероятно, захотите посмотреть WS-BA, протокол транзакций веб-сервисов, специально предназначенный для такого использования.

WS-BA использует основанную на компенсации модель, которую сложнее программировать. Это, по сути, основано на методе, который вы упомянули: эффект методов обслуживания отменяется путем вызова метода компенсации. Это может быть сложно сделать правильно, но JBoss intern сделал довольно приятную структуру аннотаций, которая позволяет вам определять методы компенсации с минимальными усилиями и автоматически запускать их. Это не стандартизировано, но стоит проверить, выбираете ли вы такой подход: http://www.jboss.org/jbosstm/baframework

Ответ 3

На самом деле вам обычно не нужен специальный метод отката, а также настраиваемый метод фиксации. В противном случае вы столкнетесь с проблемами, подобными тем, которые содержатся в стандарте WS-BA.

Просто зайдите http://www.atomikos.com/Publications/TryCancelConfirm для подробная статья. Описанные здесь функции доступны в Atomikos ExtremeTransactions... Этот продукт также поддерживает классические транзакции веб-сервиса типа "ACID".

НТН

Гай

Отказ от ответственности: я работаю для Atomikos