Suporte a Transações Globais em Aplicativos Clientes

Na plataforma Java™ EE, é possível usar uma abordagem de demarcação da transação programática ou declarativa para gerenciar transações no aplicativo.

A abordagem programática é uma transação gerenciada por componente (ou gerenciada por bean) e a abordagem de demarcação de transação declarativa é a transação gerenciada por contêiner.

Transações Gerenciadas por Componentes (ou Gerenciadas por Bean)

O aplicativo Java EE usa a interface javax.transaction.UserTransaction do Java Transaction API (JTA) para demarcar um limite da transação para um conjunto de mudanças no recurso protegido de forma programática. As transações gerenciadas por componentes podem ser usadas no ambiente de servlet e do EJB. No caso de um componente EJB, você configura o atributo de transação em seu descritor de implementação como TX_BEAN_MANAGED.

Uma transação normalmente começa com uma chamada UserTransaction.begin(). Quando o componente de aplicativo está pronto para confirmar as mudanças, ele invoca uma chamada UserTransaction.commit() para coordenar e confirmar as mudanças. Se o componente de aplicativo precisar recuperar a transação, ele chamará UserTransaction.rollback(), e todas as mudanças serão desfeitas. Por exemplo:

    // Obter a Transação do Usuário
    javax.transaction.UserTransaction transaction =
    ejbcontext.getUserTransaction();

    // Iniciar a transação
    transaction.begin();

    // Fazer alterações nos recursos protegidos.
    // Por exemplo, usar a interface de interação CCI do Java EE ou JCA
    // para enviar alterações para um sistema EIS
    interaction.execute(interactionSpec, input, output);

    if (/* decide to commit */) {
    // confirmar a transação
    transaction.commit();

    } else { /* decide to roll back */
    // desfazer a transação
    transaction.rollback();
    }

Transações Gerenciadas por Contêiner

As transações gerenciadas por contêiner podem ser usadas apenas no ambiente do EJB. O componente EJB especifica uma transação gerenciada por contêiner de forma declarada através do atributo de transação no descritor de implementação (como TX_REQUIRED). Uma transação gerenciada por contêiner é gerenciada pelo contêiner EJB. O contêiner chama os métodos adequados (como begin, commit ou rollback) em nome do componente EJB. Essa abordagem declarativa simplifica as chamadas de programação no componente EJB.


Feedback