Главная » Java, JavaBeans » Распределенные транзакции EJB

0

Inprise-Контейнер EJB поддерживает распределенные транзакции, то есть такие транзакции, которые пересекают границы платформ, операционных систем и Виртуальных Машин Java.

Двухфазное подтверждение

Транзакции, в которых задействовано несколько баз данных, используют двухфазный процесс подтверждения транзакции. Он гарантирует, что транзакция корректно вносит изменения во все базы данных, участвующие в ней. Если она не может изменить все базы данных, то не изменяется ни одна.

Двухфазное подтверждение выполняется за два шага. Первый шаг называется фазой подготовки. Транзакция опрашивает все участвующие базы данных, и они должны сигнализировать о том, что они готовы подтвердить изменения и завершить транзакцию. Второй шаг – шаг собственно внесения изменений – выполняется только в том случае, если все базы данных подтвердили свою готовность завершить транзакцию.

Как ITS, так и JTS поддерживают неоднородные распределенные транзакции и двухфазное подтверждение для однородных транзакций, используя встроенный координатор транзакций RDBMS.

По умолчанию JTS не разрешает нескольким базам данных (ресурсам) участвовать в глобальной транзакции, хотя он и поддерживает двухфазный процесс подтверждения без возможности восстановления. Если вы хотите использовать JTS в режиме двухфазного подтверждения, вы должны установить значения флага EJBAllowUnrecoverableCompletion, равное True. В этом случае Контейнер в процессе подтверждения транзакции выполняет однофазное подтверждение для каждой из участвующих в ней баз данных. Работать в этом режиме следует очень осторожно, так как в случае сбоя нет возможности восстановления состояния базы данных.

Для поддержки двухфазного подтверждения гетерогенных (неоднородных) транзакций сервис ITS должен быть интегрирован с поддержкой протокола ХА для конкретной базы данных (см. документацию по ITS для получения более подробной информации). В настоящий момент двухфазное подтверждение транзакций требует использования native-библиотек, то есть кода, написанного на С или С++. В будущем, когда появятся JDBC-драйвера, поддерживающие протокол ХА, ITS и Контейнеры EJB позволят использовать в одной транзакции несколько баз данных.

На рисунке 8.1 показано, как Компонент и Контейнер управляют двухфазным завершением транзакции для неоднородных баз данных. Напоминаем, что для этого необходимо установить флаг

EJBAllowUnrecoverableCompletion и восстановление после сбоя невозможно.

Рис. 8.1 Двухфазное завершение транзакции для неоднородных баз данных

Вам необходимо обратиться к руководству по конкретному серверу

Источник: Руководство программиста Enterprise JavaBeans

По теме:

  • Комментарии