Tranzacții comise în două faze

Tranzacțiile cu comitere în două faze (XA) sunt dezactivate în buildpack-urile Liberty pentru mediile Cloud Foundry. În mod implicit, managerul de tranzacţii Liberty scrie fişierul istoric de tranzacţii pe sistemul local de fişiere. Deoarece sistemul de fişiere local este efemer în platforme cloud, fişierul istoric de tranzacţii nu este disponibil după ce se blochează o aplicaţie sau maşina virtuală Java. Deşi managerul de tranzacţii poate fi configurat să utilizeze un serviciu de bază de date pentru a stoca jurnalele de tranzacţii, platformele cloud creează automat o instanţă complet nouă a aplicaţiei după defectare. Ca urmare, managerul de tranzacţii nu poate identifica ce istoric anume să utilizeze pentru a recupera tranzacţiile instanţei eşuate.

Tranzacțiile cu comitere în două faze pot fi utilizate folosind bean-uri EJB sau prin utilizarea de către aplicație a clasei javax.transaction.UserTransaction. Pentru a rula cu succes într-un mediu Cloud Foundry, verificați dacă aplicația dumneavoastră necesită tranzacții XA.

Implicit, bean-urile EJB (Enterprise JavaBeans) sunt gestionate de container şi au un atribut de tranzacţie Required, ceea ce înseamnă că utilizează tranzacţii JTA. Tranzacţiile JTA care acoperă o singură resursă sunt complet suportate. Tranzacțiile JTA care acoperă mai multe resurse necesită comiterea în două faze, care nu este acceptată în mediile Cloud Foundry.

În codul Java, următoarele adnotări explicite indică utilizarea tranzacţiilor JTA:

În fişierul ejb-jar.xml, următoarele elemente explicite indică utilizarea tranzacţiilor JTA:

Notă: Dacă aplicaţia dumneavoastră nu utilizează clasa javax.transaction.UserTransaction şi dacă toate bean-urile EJB ale aplicaţiei dumneavoastră sunt gestionate, sau dacă containerul este gestionat cu atribute de tranzacţii ca "Never" sau "NotSupported", atunci aplicaţia dumneavoastră nu foloseşte tranzacţii XA şi semnalarea acestei reguli poate fi ignorată.

Următoarele adnotări explicite sau elemente indică faptul că un bean EJB nu foloseşte tranzacţii XA: