En los primeros días de la informática, no había necesidad de transacciones distribuidas. A medida que aumentó el número de aplicaciones, la sincronización de los datos se convirtió en un tema importante. Las empresas pagaban mucho para mantener sistemas sincronizados en términos de flujo de datos. Como resultado, surgió el protocolo de compromiso de 2 fases denominado XA (Arquitectura extendida). Este protocolo proporciona propiedades similares a ACID para el procesamiento de transacciones globales. A lo largo de este artículo, intentaré explicar los detalles de las transacciones XA y el uso de las transacciones XA en el marco Spring.

El protocolo de compromiso de 2 fases es un protocolo de compromiso atómico para sistemas distribuidos. Este protocolo como su nombre lo indica consta de dos fases. La primera es la fase de solicitud de confirmación en la que el administrador de transacciones coordina todos los recursos de transacción para confirmar o cancelar. En la fase de confirmación, el administrador de transacciones decide finalizar la operación confirmando o abortando según los votos de cada recurso de transacción. A continuación, pasaremos a los detalles de implementación del protocolo 2PC.

Consulte aquí los recursos sobre la interoperabilidad de Java + .NET a través de 2PC.

Las transacciones XA necesitan una identificación de transacción global y una identificación de transacción local (xid) para cada recurso XA. Cada recurso XA se da de alta en XA Manager mediante el método start(xid). Este método indica que XA Resource está involucrado en la transacción (estar listo para las operaciones). Después de eso, la primera fase del protocolo 2PC se realiza llamando al método prepare(xid). Este método solicita el voto OK o ABORT de XA Resource. Después de recibir el voto de cada recurso XA, el administrador XA decide ejecutar una operación de compromiso (xid) si todos los recursos XA envían OK o decide ejecutar una reversión (xid) si un recurso XA envía ABORT. Finalmente, se llama al método end(xid) para cada recurso XA que indica que la transacción se completó. Mira la figura para entender mejor. A medida que construimos un trasfondo en la implementación de transacciones XA, luego profundizaremos y veremos escriba este comando este comando este comando de fallas y posibles soluciones.


Las fallas pueden ocurrir en cualquier momento debido a la pérdida de la red, el apagado de la máquina y algún error del administrador. En la transacción XA, clasificaremos estas fallas de acuerdo con las fases en las que ocurren. La primera fase de falla es antes de que se inicie el protocolo. Esta es una falla simple que el sistema no necesita revertir ni ningún tipo de operación. Simplemente no hacemos la operación para ese momento en particular. Segundo, escriba este comando este comando este comando de falla puede ocurrir en la fase de preparación (solicitud de confirmación) que puede manejarse fácilmente mediante reversiones utilizando políticas de tiempo de espera. Por último, pero no menos importante, están las fallas en la fase de compromiso que pueden ocurrir debido a reversiones incompletas y cualquier problema en la cadena. En todas estas situaciones anteriores, el administrador de transacciones intenta recuperar el problema. A continuación, veremos cómo el administrador de transacciones intenta superar las fallas.

En la recuperación, el administrador de transacciones llama al método de recuperación de cada recurso XA. XA Resources rastrea los registros e intenta reconstruir su última condición. Transaction Manager llama a las operaciones de reversión necesarias y se cumple la misión. Este proceso puede parecer un camino feliz, pero hay muchas situaciones excepcionales en las que los registros son problemáticos, como estar dañados. En este tipo de situaciones, el administrador de transacciones sigue algunas heurísticas para resolver el problema. Además, el proceso de recuperación depende de los registros de escritura anticipada donde escribe los registros de operación antes de aplicar. En cuanto a los problemas de rendimiento, estos registros se escriben en su propio formato (sin usar ninguna serialización) y el sistema debería procesarlos mejor por lotes si es posible. A continuación, vamos a la parte divertida, que es el soporte de transacciones XA de Spring Framework.

Spring Framework proporciona un amplio entorno para desarrollar aplicaciones web e independientes. Al igual que otras utilidades que proporciona, las transacciones XA también son compatibles con Spring. Sin embargo, este soporte no es una implementación nativa y requiere hibernación, un contenedor web o un marco que proporcione XA Transaction Management. Spring tiene JtaTransactionManager que proporciona utilidades de gestión de transacciones y oculta los detalles. De esta manera, podemos tener una gestión de transacciones para múltiples fuentes de datos que se actualizan simultáneamente. Cuando se trata de usar la gestión de transacciones XA, la hibernación y el soporte de contenedores web para transacciones XA están bien documentados, no es necesario mencionarlos. Sin embargo, trabajar con un marco que proporciona transacciones XA puede resultar confuso. Por lo tanto, continuaré esta publicación presentando Bitronix Transaction Manager.

Bitronix se configura fácilmente y proporciona un buen soporte para la gestión de transacciones. No se usa comúnmente en aplicaciones independientes, pero intentaré dar la configuración para la aplicación independiente de la siguiente manera.

Ahora podemos tener múltiples fuentes de datos que se pueden configurar de la siguiente manera. Cada fuente de datos debe tener una propiedad uniqueName que sea única. La siguiente configuración es para Oracle, otras bases de datos pueden tener configuraciones diferentes. Para cualquier otro detalle, puede consultar el sitio web de Bitronix.

En resumen, hemos intentado explicar qué son las transacciones XA, los protocolos subyacentes y la integración de Bitronix Transaction Management con Spring en una aplicación independiente. Para ampliar, XA Transactions proporciona la modificación de diferentes fuentes de datos al mismo tiempo. Además, las transacciones XA son compatibles con contenedores web o marcos similares a hibernación. Sin embargo, es posible que necesitemos integrar la gestión de transacciones en una aplicación independiente en la que debemos configurar el administrador de transacciones. En consecuencia, la transacción XA proporciona operaciones consistentes en múltiples fuentes de datos y las empresas las utilizan.
Esperamos que este artículo le haya ayudado con Cómo hacer transacciones XA (confirmación de 2 fases): una guía simple. Si tiene alguna otra pregunta, estaremos encantados de responder a la suya; por favor contáctenos en la sección de abajo. No olvides compartir signalfix.net con tu familia y amigos!