Las transacciones de confirmación en dos fases (XA) están inhabilitadas en los paquetes de compilación de Liberty para entornos de Cloud Foundry. De forma predeterminada, el gestor de transacciones de Liberty escribe el archivo de registro de transacciones en el sistema de archivos local. Debido a que el sistema de archivos local es efímero en plataformas en la nube, el archivo de registro de transacciones no está disponible cuando una aplicación o la máquina virtual Java se detiene de forma anómala. Aunque el gestor de transacciones se puede configurar para utilizar un servicio de base de datos donde almacenar los archivos de registro de transacciones, las plataformas en la nube crean automáticamente una instancia completamente nueva de la aplicación después de una detención anómala. Como resultado, el gestor de transacciones no puede determinar qué archivo de registro determinado debe utilizar para recuperar las transacciones de la instancia fallida.
Las transacciones de confirmación en dos fases se pueden utilizar en los beans EJB o debido al uso de la aplicación de la clasejavax.transaction.UserTransaction. Para ejecutarse correctamente en un entorno de Cloud Foundry, verifique si la aplicación requiere transacciones XA.
De forma predeterminada, los beans Enterprise JavaBeans (EJB) están gestionados por contenedor y tienen un atributo de transacción Required, lo que significa que utilizan transacciones JTA. Las transacciones JTA que abarcan un solo recurso están totalmente soportadas. Las transacciones JTA que abarcan varios recursos requieren una confirmación de dos fases que no está soportada en los entornos de Cloud Foundry.
En código Java, las siguientes anotaciones explícitas indican el uso de transacciones 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)En el archivo ejb-jar.xml, los siguientes elementos explícita indican el uso de transacciones JTA:
<trans-attribute>Mandatory|Required|RequiresNew|Supports</trans-attribute><transaction-type>Container</transaction-type>Nota: Si la aplicación no utiliza la clase javax.transaction.UserTransaction y todos los beans EJB de aplicación están gestionados por bean, o gestionados por contenedor con atributos de transacción "Never" o "NotSupported", entonces la aplicación no está utilizando transacciones XA y puede hacer caso omiso de la marca de esta regla.
Los siguientes elementos o anotaciones explícitas indican que un bean EJB no está utilizando transacciones 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>