transacciones non java jboss datasource jta xa

java - transacciones xa y non xa



¿Cuál es la diferencia entre nonXADatasource con jta="true" y XADataSource? (2)

Me confundió el hecho de que podemos permitir el uso de transacciones JTA con una fuente de datos que no sea XA. Enlace a la documentación . Entonces, ¿cuál es la diferencia entre las fuentes de datos XA / no XA? ¿Por qué deberíamos utilizar fuentes de datos XA en absoluto?


Me preguntaba sobre esto (la opción "usar JTA" en una fuente de datos que no sea XA), así que probé varias configuraciones. Tengo una transacción distribuida que se conecta a dos servidores MySQL.

Aquí están mis resultados. Si tengo:

  1. Dos fuentes de datos que no son XA, ambas tienen JTA = "true"

Resultado: Error "No se pudo enlistar en la transacción al ingresar un objeto metaconsciente".

  1. Dos fuentes de datos que no son XA, con una JTA = "true"

Resultado: No participarán en la transacción distribuida. Cada uno se comprometerá por separado.

  1. Una XA y una no XA con JTA = "falso",

Resultado: igual que # 2

  1. Una XA y una no XA con JTA = "true".

Resultado: ¡Funciona!

De estos, parece que la opción "usar JTA" indica si participará en una transacción distribuida si hay una fuente de datos XA.


Una transacción XA, en los términos más generales, es una "transacción global" que puede abarcar múltiples recursos. Una transacción que no sea XA siempre implica solo un recurso.

Una transacción XA implica un administrador de transacciones coordinador, con una o más bases de datos (u otros recursos, como JMS), todos involucrados en una única transacción global. Las transacciones que no son XA no tienen un coordinador de transacciones, y un solo recurso está haciendo todo su trabajo de transacción (esto a veces se denomina transacciones locales).

jta = "true", la transacción se compromete automáticamente.