O Liberty não suporta propagação de transação de saída ou de entrada para interfaces
remotas EJB. Por padrão, os beans EJB são gerenciados por contêiner e usam o atributo
de transação Required. Como resultado, as definições EJB existentes que não especificam nenhuma propriedade container-transaction são configuradas por padrão para usar transações, embora elas não sejam suportadas.
Esta regra sinaliza o código Java que referencia as anotações EJB a seguir que indicam o uso de negócios remotos ou interfaces iniciais:
javax.ejb.Remotejavax.ejb.RemoteHomeEssa regra também sinaliza as referências a seguir no arquivo ejb-jar.xml:
<remote/><business-remote/>
A especificação EJB requer produtos que suportam a propagação de transação de saída para enviar ainda um contexto de transação nulo.
Esse contexto deve ser rejeitado pelos componentes EJB que usam os atributos de transação
Required
(padrão),
Mandatory
ou
Supports
. Um cliente com uma transação global ativa não poderá iniciar um bean EJB com os
atributos de transação padrão se o cliente ou servidor estiver no Liberty.
Para permitir que o cliente inicie o bean EJB, mude o bean EJB para usar o atributo de transação RequiresNew ou NotSupported. Embora esses atributos permitam que o bean EJB seja iniciado, o trabalho transacional que é feito pelo bean EJB não é confirmado como parte das transações do cliente.
Note que a propagação da transação é suportada para interfaces remotas EJB que estejam em execução na mesma JVM, no entanto, isso pode ser determinado apenas com investigação adicional do comportamento do aplicativo.
Muitas vezes os beans EJB 2.x configuram as interfaces remotas no ejb-jar.xml mesmo quando elas não são usadas. As interfaces remotas serão necessárias apenas se você tiver código em execução em duas JVMs diferentes. Em termos do WebSphere, isso ocorre entre dois servidores de aplicativos diferentes ou entre um aplicativo cliente e um servidor de aplicativos em execução em JVMs diferentes. As informações do CORBA, como uma URL do provedor iiop://, em uma consulta EJB, também são um indicador de que beans EJB remotos estão sendo usados.
Se você estiver referenciando beans EJB usando uma interface remota que esteja em execução na mesma JVM, a interface Local poderá ser usada e terá melhor desempenho. Sempre que possível, mude as anotações de @Remote para @Local e de @RemoteHome para @LocalHome e teste todos os seus cenários de código. Da mesma forma para a configuração ejb-jar.xml, remova as definições <remote/> e <business-remote/> e teste todos os cenários. Embora a propagação de transação seja suportada para este cenário, a melhor prática é a conversão para usar interfaces locais para melhorar o desempenho e remover a percepção de que os métodos podem ser chamados externamente por meio da mesma JVM.
Para os beans EJB que requerem acesso remoto, a melhor prática é agrupá-los em um serviço da web. Consulte Anotando um bean EJB para criar um serviço da web para obter instruções sobre o uso do WebSphere Application Server Developer Tools for Eclipse para fazer essas mudanças de código. Depois de agrupar os beans EJB em serviços da web, use o cliente de serviço da web para chamar o serviço da web EJB. Após o teste, é possível remover as anotações ou configuração remotas EJB.
Para obter mais informações sobre tópicos relacionados, consulte