Sono stato confuso dal fatto che possiamo consentire di utilizzare le transazioni JTA con un'origine dati non XA. Link to the documentation. Quindi qual è la differenza tra le origini dati XA/non-XA? Perché dovremmo usare le origini dati XA?Qual è la differenza tra nonXADatasource con jta = "true" e XADataSource?
risposta
Una transazione XA, nei termini più generali, è una "transazione globale" che può estendersi su più risorse. Una transazione non XA comporta sempre una sola risorsa.
Una transazione XA comporta un gestore transazioni di coordinamento, con uno o più database (o altre risorse, come JMS) tutti coinvolti in un'unica transazione globale. Le transazioni non XA non hanno un coordinatore di transazioni e una singola risorsa sta eseguendo autonomamente tutte le sue transazioni (a volte vengono chiamate transazioni locali).
jta = "true", Transaction commit automaticamente.
Mi stavo chiedendo da solo (opzione "usa JTA" in un'origine dati non XA), quindi ho provato diverse configurazioni. Ho una transazione distribuita che si connette a due server MySQL.
Ecco i risultati. Se ho:
- Due origini dati non-XA, entrambi hanno JTA = "true"
Risultato: "Non è stato possibile integrare in transazione entrando oggetto meta-aware" Errore
- due non-XA origini dati, con uno JTA = "true"
Risultato: Essi non partecipare alla transazione distribuita. Ognuno si impegnerà separatamente.
- One XA e uno non-XA con JTA = "false",
Risultato: come # 2
- Uno XA e uno non XA con JTA = "true".
Risultato: Funziona!
Da questi, sembra che l'opzione "usa JTA" indica se parteciperà a una transazione distribuita se esiste un'origine dati XA.