As transações de two-phase commit (XA) são desativadas nos buildpacks do Liberty para ambientes Cloud Foundry. Por padrão, o gerenciador de transações do Liberty grava o arquivo de log de transações no sistema de arquivos local. Como o sistema de arquivos local é efêmero em plataformas de nuvem, o arquivo de log de transações não está disponível após um aplicativo ou a Java virtual machine travar. Embora o gerenciador de transações possa ser configurado para usar um serviço de banco de dados para armazenar os logs de transações, as plataformas de nuvem criam automaticamente uma instância completamente nova do aplicativo após um travamento. Como resultado, o gerenciador de transações não pode identificar qual log específico usar para recuperar as transações da instância com falha.
As transações Two-phase commit podem estar em uso por meio de beans EJB ou o uso do aplicativo da classejavax.transaction.UserTransaction. Para executar com sucesso em um ambiente Cloud Foundry, verifique se o seu aplicativo requer transações XA.
Por padrão, os beans Enterprise JavaBeans (EJB) são gerenciados por contêiner e possuem um atributo de transação Required,
o que significa que usam transações JTA. As transações JTA que abrangem um único recurso são totalmente suportadas. As transações JTA que abrangem diversos recursos requerem a Two-phase commit, que não é suportado nos ambientes Cloud Foundry.
Em código Java, as anotações explícitas a seguir indicam o uso de transações 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)No arquivo ejb-jar.xml, os elementos explícitos a seguir indicam o uso de transações JTA:
<trans-attribute>Mandatory|Required|RequiresNew|Supports</trans-attribute><transaction-type>Container</transaction-type>Nota: se o seu aplicativo não usar a classe javax.transaction.UserTransaction e todos os
seus Beans EJB de aplicativo forem gerenciados por bean, ou gerenciados por contêiner com os atributos de transação
"Never" ou "NotSupported", seu aplicativo não está usando transações XA e a sinalização dessa
regra pode ser ignorada.
As anotações ou os elementos explícitos a seguir indicam que um bean EJB não está usando transações 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>