Nos primeiros dias da computação, não havia necessidade de transações distribuídas. À medida que o número de aplicativos aumentou, a sincronização dos dados tornou-se uma questão importante. As empresas pagavam muito para manter sistemas sincronizados em termos de fluxo de dados. Como resultado, surgiu o protocolo de confirmação de 2 fases conhecido como XA(eXtended Architecture). Este protocolo fornece propriedades semelhantes a ACID para processamento de transações globais. Ao longo deste artigo, tentarei explicar detalhes de transações XA e uso de transações XA na estrutura Spring.

O protocolo de confirmação de 2 fases é um protocolo de confirmação atômica para sistemas distribuídos. Este protocolo como o próprio nome indica consiste em duas fases. A primeira é a fase de solicitação de confirmação na qual o gerenciador de transações coordena todos os recursos da transação para confirmar ou abortar. Na fase de confirmação, o gerenciador de transações decide finalizar a operação confirmando ou abortando de acordo com os votos de cada recurso de transação. Em seguida, passaremos aos detalhes de implementação do protocolo 2PC.

Veja aqui os recursos sobre interoperabilidade Java + .NET por meio de 2PC.

As transações XA precisam de um ID de transação global e um ID de transação local(xid) para cada recurso XA. Cada recurso XA é inscrito no XA Manager pelo método start(xid). Este método informa que o XA Resource está sendo envolvido na transação (esteja pronto para operações). Depois disso, a primeira fase do protocolo 2PC é realizada chamando o método prepare(xid). Este método solicita o voto OK ou ABORT do XA Resource. Após receber o voto de cada um dos recursos XA, o XA Manager decide executar uma operação commit(xid) se todos os recursos XA enviarem OK ou decidir executar um rollback(xid) se um recurso XA enviar ABORT. Finalmente, o método end(xid) é chamado para cada recurso XA informando que a transação foi concluída. Observe a figura para entender melhor. À medida que construímos um plano de fundo na implementação de transações XA, a seguir iremos mais fundo e veremos digite este comando este comando este comandos de falhas e possíveis soluções.


Falhas podem ocorrer a qualquer momento devido a perda de rede, máquina parada e algum erro do administrador. Na transação XA, vamos categorizar essas falhas de acordo com as fases em que elas ocorrem. A primeira fase de falha é antes do protocolo ser iniciado. Esta é uma falha simples que o sistema não precisa fazer rollback ou qualquer tipo de operação. Nós simplesmente não fazemos a operação para aquele momento em particular. Segundo digite este comando este comando este comando de falha pode ocorrer na fase de preparação (commit-request) que pode ser facilmente tratada por rollbacks usando políticas de tempo limite. Por último, mas não menos importante, são as falhas de fase de confirmação que podem ocorrer devido a reversões incompletas e qualquer problema na cadeia. Em todas essas situações acima, o gerenciador de transações tenta recuperar o problema. Veremos a seguir como o gerenciador de transações tenta superar as falhas.

Na recuperação, o gerenciador de transações chama o método de recuperação de cada recurso XA. Os recursos XA rastreiam os logs e tentam reconstruir sua condição mais recente. O Transaction Manager chama as operações de rollback necessárias e a missão é cumprida. Esse processo pode parecer um caminho feliz, mas há muitas situações excepcionais em que os logs são problemáticos, como corrompidos. Nesses tipos de situações, o gerenciador de transações segue algumas heurísticas para resolver o problema. Além disso, o processo de recuperação depende dos logs de gravação antecipada em que você grava os logs de operação antes de aplicar. Em problemas de desempenho, esses logs são gravados em seu próprio formato (sem usar qualquer serialização) e o sistema deve agrupar melhor, se possível. Em seguida, vamos para a parte divertida, que é o suporte a transações XA pela estrutura Spring.

A estrutura Spring fornece um ambiente extenso para desenvolver aplicativos da Web e autônomos. Como outros utilitários que ele fornece, as transações XA também são suportadas pelo Spring. No entanto, esse suporte não é uma implementação nativa e requer hibernação, contêiner da Web ou uma estrutura que forneça o XA Transaction Management. O Spring possui o JtaTransactionManager que fornece utilitários de gerenciamento de transações e oculta os detalhes. Dessa forma, podemos ter gerenciamento de transações para vários DataSources que são atualizados simultaneamente. Quando se trata de usar o XA Transaction Management, o suporte a contêineres de hibernação e web para transações XA são bem documentados, não precisam ser mencionados. No entanto, trabalhar com uma estrutura que fornece transações XA pode ser confuso. Assim, continuarei este post apresentando o Bitronix Transaction Manager.

O Bitronix é facilmente configurado enquanto oferece um bom suporte para gerenciamento de transações. Não é comumente usado em aplicativos autônomos, mas tentarei fornecer a configuração para aplicativos autônomos da seguinte maneira.

Agora podemos ter várias fontes de dados que podem ser configuradas da seguinte maneira. Cada fonte de dados deve ter uma propriedade uniqueName que seja exclusiva. A configuração abaixo é para Oracle, outros bancos de dados podem ter configurações diferentes. Sobre qualquer outro detalhe, você pode consultar o site da Bitronix.

Para resumir, tentamos explicar o que é XA Transactions, protocolos subjacentes e integração do Bitronix Transaction Management com Spring em um aplicativo independente. Para estender, o XA Transactions fornece a modificação de diferentes fontes de dados ao mesmo tempo. Além disso, as transações XA são suportadas por contêineres da Web ou estruturas semelhantes a hibernação. No entanto, podemos precisar integrar o gerenciamento de transações a um aplicativo autônomo no qual devemos configurar o gerenciador de transações. Em consequência, a transação XA fornece operações consistentes em várias fontes de dados e as empresas fazem uso delas.
Esperamos que este artigo tenha ajudado você com Como fazer transações XA (commit de duas fases): um guia simples. Se você tiver outras dúvidas, teremos prazer em responder às suas; entre em contato conosco na seção abaixo. Não se esqueça de compartilhar signalfix.net com sua família e amigos!