Transakcje z zatwierdzaniem dwufazowym (XA) są wyłączone w pakietach budowania Liberty dla środowisk Cloud Foundry. 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.
Transakcje z zatwierdzaniem dwufazowym mogą być używane przez komponenty bean EJB lub przez klasęjavax.transaction.UserTransaction, która jest używana przez aplikację. Aby pomyślnie uruchomić w środowisku Cloud Foundry, należy sprawdzić, czy aplikacja wymaga transakcji XA.
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 obejmujące wiele zasobów wymagają zatwierdzania dwufazowego, które nie jest obsługiwane w środowiskach Cloud Foundry.
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 używa klasy
javax.transaction.UserTransaction i wszystkie komponenty EJB
aplikacji są zarządzane przez komponent bean lub zarządzane przez kontener z
atrybutem kontenera o wartości „Never” albo „NotSupported”, wówczas aplikacja
nie używa transakcji XA i oznaczenie flagą tej reguły może zostać zignorowane.
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>