Les transactions de validation en deux phases (XA) sont désactivées dans les packs de construction Liberty pour les environnements Cloud Foundry. Par défaut, le gestionnaire de transactions de Liberty écrit le fichier journal de transactions sur le système de fichiers local. Etant donné que ce système est éphémère sur les plateformes cloud, le fichier journal des transactions n'est pas disponible après l'arrêt inopiné d'une application ou de la machine virtuelle Java. Bien que le gestionnaire de transactions puisse être configuré pour utiliser un service de base de données pour stocker les journaux de transactions, les plateformes cloud créent automatiquement une nouvelle instance de l'application après un arrêt inopiné. Par conséquent, le gestionnaire de transactions ne peut pas déterminer quel journal utiliser pour récupérer les transactions de l'instance ayant échoué.
Les transactions de validation en deux phases peuvent être utilisées via des beans EJB ou l'utilisation de la classejavax.transaction.UserTransaction par l'application. Pour une exécution réussie dans un environnement Cloud Foundry, vérifiez si votre application requiert des transactions XA.
Par défaut, les beans Enterprise JavaBeans (EJB) sont gérés par conteneur et possèdent un attribut de transaction
Required, qui signifie qu'ils utilisent des transactions JTA. Les transactions JTA qui couvrent une ressource
unique sont totalement prises en charge. Les transactions JTA qui couvrent plusieurs ressources requièrent une validation en deux phases qui n'est pas prise en charge dans les environnements Cloud Foundry.
Dans le code Java, les annotations explicites ci-dessous indiquent l'utilisation de transactions 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)Dans le fichier ejb-jar.xml, les éléments explicites ci-dessous indiquent l'utilisation de transactions JTA :
<trans-attribute>Mandatory|Required|RequiresNew|Supports</trans-attribute><transaction-type>Container</transaction-type>Remarque : si votre application n'utilise pas la classe javax.transaction.UserTransaction et que tous vos beans d'application EJB sont gérés par bean, ou gérés par conteneur avec des attributs de transaction "Never" (Jamais) ou "NotSupported" (Nom pris en charge), votre application n'utilise pas de transactions XA et la signalisation par cette règle peut être ignorée.
Les annotations ou éléments explicites suivants indiquent qu'un bean EJB n'utilise pas de transactions 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>