Применение поддержки глобальных транзакций в приложениях

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

Программный подход предполагает, что транзакция управляется компонентами, а декларативный подход предполагает, что транзакция управляется контейнером.

Транзакция, управляемая компонентами (или объектами)

Для разграничения транзакции на ряд изменений в защищенных ресурсах программным путем в приложении J2EE используется интерфейс JTA javax.transaction.UserTransaction. Транзакции, управляемые компонентами, можно использовать как в среде сервлета, так и в среде EJB. В случае среды EJB для значения атрибута транзакции в файле описания необходимо задать TX_BEAN_MANAGED.

Обычно транзакция начинается с вызова UserTransaction.begin(). Когда компонент приложения готов зафиксировать изменения, он вызывает метод UserTransaction.commit() для согласования и фиксации изменений. Если компоненту приложения необходимо выполнить откат транзакции, он вызывает метод UserTransaction.rollback() для отмены всех изменений. Например:

    // Получить пользовательскую транзакцию
    javax.transaction.UserTransaction transaction =
    ejbcontext.getUserTransaction();

    // Запустить транзакцию
    transaction.begin();

    // Внести изменения в защищенные ресурсы.
    // Например, с помощью интерфейса взаимодействия CCI J2EE/CA
    // отправить изменения в системы EIS
    interaction.execute(interactionSpec, input, output);

    if (/* decide to commit */) {
    // зафиксировать транзакцию
    transaction.commit();

    } else { /* если необходим откат */
    // откатить транзакцию
    transaction.rollback();
    }

Транзакция, управляемая контейнером

Транзакции, управляемые контейнером, можно использовать только в среде EJB. В среде EJB используется декларативный подход для описания транзакции, управляемой контейнером. Для этой цели настраивается атрибут транзакции в файле описания (например, TX_REQUIRED). Обработкой такой транзакции управляет контейнер EJB. Контейнер вызывает соответствующие методы (например, begin, commit или rollback) от имени компонента среды EJB. Подобный декларативный подход упрощает программные вызовы в среде EJB.

Связанная информация: Дополнительную информацию об архитектуре J2EE и спецификациях JTA можно найти на Web-сайте http://java.sun.com/j2ee/docs.html.

Понятия, связанные с данным
Поддержка глобальных транзакций с двухэтапной фиксацией
Предварительные требования двухэтапной фиксации
Ссылки, связанные с данной
Среда двухэтапной фиксации

Комментарии