Tranzacţiile comise în două faze (XA) nu sunt activate pe Liberty în platforme cloud. Î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.
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ă multiple resurse necesită o comitere în două faze care nu este suportată. Această regulă semnalează fişierele ejb-jar.xml şi codul Java
care are referinţe la pachetul javax.ejb.
Această regulă semnalează și codul Java care face referință la clasa javax.tranzaction.UserTransaction.
Verificaţi dacă aplicaţia dumneavoastră utilizează tranzacţiile XA şi înlăturaţi tranzacţiile XA dacă sunt prezente.
În codul Java, următoarele adnotări explicite indică utilizarea tranzacţiilor JTA:
javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.MANDATORY)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.REQUIRED)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.REQUIRES_NEW)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.SUPPORTS)javax.ejb.TransactionManagement(javax.ejb.TransactionManagementType.CONTAINER)În fişierul ejb-jar.xml, următoarele elemente explicite indică utilizarea tranzacţiilor JTA:
<trans-attribute>Mandatory|Required|RequiresNew|Supports</trans-attribute><transaction-type>Container</transaction-type>Notă: Dacă aplicația dumneavoastră nu utilizează javax.transaction.Clasa UserTransaction și toate bean-urile EJB ale aplicației dumneavoastră sunt gestionate de bean sau de container cu atribute de tranzacție de "Never" sau "NotSupported", atunci aplicația nu utilizează tranzacții XA, iar 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:
javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.NOT_SUPPORTED)javax.ejb.TransactionManagement(javax.ejb.TransactionManagementType.BEAN)<trans-attribute>Never|NotSupported</trans-attribute><transaction-type>Bean</transaction-type>