Transações Two-phase commit

As transações two-phase commit (XA) não são ativadas no Liberty em plataformas de nuvem. 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.

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 múltiplos recursos requerem two-phase commit, que não é suportado. Essa regra sinaliza arquivos ejb-jar.xml e o código Java que possui referências ao pacote javax.ejb. Essa regra também sinaliza o código Java que tem referências à classe javax.transaction.UserTransaction. Verifique se seu aplicativo usa transações XA e remova as transações XA se elas estiverem presentes.

Em código Java, as anotações explícitas a seguir indicam o uso de transações JTA:

No arquivo ejb-jar.xml, os elementos explícitos a seguir indicam o uso de transações JTA:

Nota: se o seu aplicativo não usar a classe javax.transaction.UserTransaction e todos os seus Beans EJB do aplicativo forem gerenciados por bean ou contêiner com os atributos de transação de "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: