Transakcje zatwierdzania dwufazowego (XA) nie są włączone w produkcie Liberty na platformach w chmurze. Domyślnie menedżer transakcji Liberty zapisuje plik dziennika transakcji w lokalnym systemie plików. Ponieważ lokalny system plików jest efemeryczny na platformach w chmurze, plik dziennika transakcji nie jest dostępny po awarii aplikacji lub wirtualnej maszyny języka Java. Mimo że menedżer transakcji może być skonfigurowany do używania usługi bazy danych w celu przechowywania dzienników transakcji, platformy w chmurze automatycznie tworzą całkowicie nową instancję aplikacji po awarii. W wyniku tego menedżer transakcji nie może zidentyfikować, który konkretny dziennik ma być używany do odtwarzania transakcji instancji zakończonej niepowodzeniem.
Domyślnie komponenty EJB (Enterprise JavaBeans) są zarządzane przez kontener i
mają atrybut transakcji Required, co oznacza, że używają
transakcji JTA. Transakcje JTA obejmujące pojedynczy zasób są w pełni
obsługiwane. Transakcje JTA, które obejmują wiele zasobów, wymagają
zatwierdzania dwufazowego, które nie jest obsługiwane. Ta reguła powoduje
oznaczenie flagą plików ejb-jar.xml i kodu Java, który zawiera
odwołania do pakietu javax.ejb.
Ta reguła powoduje również oznaczenie flagą kodu Java, który odwołuje się do klasy javax.transaction.UserTransaction.
Należy sprawdzić, czy
aplikacja używa transakcji XA, i usunąć transakcje XA, jeśli są obecne.
W kodzie Java następujące jawne adnotacje wskazują na użycie transakcji 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)W pliku ejb-jar.xml następujące jawne elementy wskazują na
użycie transakcji JTA:
<trans-attribute>Mandatory|Required|RequiresNew|Supports</trans-attribute><transaction-type>Container</transaction-type>Uwaga: Jeśli aplikacja nie korzysta z klasy javax.transaction.UserTransaction i wszystkie komponenty
EJB Beans aplikacji są zarządzane przez komponent bean lub są zarządzane przez kontener
z atrybutami transakcji "Never" lub "NotSupported", to aplikacja nie korzysta z transakcji
XA, a oznaczanie flagą tej reguły może być ignorowane.
Następujące jawne adnotacje lub elementy wskazują, że komponent bean EJB nie używa transakcji 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>