La propagación de transacciones no está soportada para interfaces remotas de Enterprise JavaBeans (EJB)

Liberty no da soporte a la propagación de transacciones de salida o entrada para las interfaces remotas EJB. De forma predeterminada, los beans EJB están gestionados por contenedor y utilizan el atributo de transacción Required. Como resultado, las definiciones de EJB existentes que no especifican propiedades container-transaction se configuran de forma predeterminada para utilizar transacciones, aunque no están soportadas.

Esta regla señala el código Java que hace referencia a las siguientes anotaciones EJB que indican el uso de interfaces de empresa o de inicio remotas:

Esta regla también marca las referencias siguientes en el archivo ejb-jar.xml:

La especificación de EJB requiere productos que den soporte a la propagación de transacciones de salida para aún enviar un contexto de transacción nulo. Este contexto debe ser rechazado por los componentes EJB que utilicen los atributos de transacción Required (valor predeterminado), Mandatory o Supports. Un cliente con una transacción global activa no puede iniciar un bean EJB con atributos de transacción predeterminados si el cliente o servidor está en Liberty.

Para habilitar el cliente para que inicie el bean EJB, cambie el bean EJB para que utilice el atributo de transacción RequiresNew o NotSupported. Aunque estos atributos permitirán que se inicie el bean EJB, el trabajo transaccional que realiza el bean EJB no se confirma como parte de las transacciones de cliente.

Tenga en cuenta que se da soporte a la propagación de transacciones para las interfaces remotas de EJB que se ejecutan en la misma JVM; sin embargo, esto solo se puede determinar con más investigación sobre el comportamiento de la aplicación.

Asegúrese de que se necesitan interfaces EJB remotas

A menudo, los beans EJB 2.x configuran las interfaces remotas en ejb-jar.xml, incluso cuando no se utilizan. Solo necesita interfaces remotas si tiene código en ejecución en dos JVM diferentes. En términos de WebSphere, se encuentra entre dos servidores de aplicaciones diferentes o entre una aplicación cliente y un servidor de aplicaciones que se ejecuta en distintas JVM. La información de CORBA, como por ejemplo un URL de proveedor iiop://, en una búsqueda de EJB, también es un indicador de que se están utilizando beans EJB remotos.

Si hace referencia a los beans EJB utilizando una interfaz remota que se ejecuta en la misma JVM, se puede utilizar la interfaz local y mejorará el rendimiento. Cuando sea posible, cambie las anotaciones de @Remote a @Local y de @RemoteHome a @LocalHome y pruebe todos los escenarios de código. Del mismo modo que para la configuración ejb-jar.xml, elimine las definiciones <remote/> y <business-remote/> y pruebe todos los escenarios. Aunque se da soporte a la propagación de transacciones para este escenario, la mejor práctica es convertir al uso de interfaces locales para mejorar el rendimiento y eliminar la percepción de que se puede llamar a los métodos externamente desde la misma JVM.

Si realmente necesita interfaces remotas

Envolver los beans EJB en un servicio web (JAX-WS)

Para los beans EJB que requieran acceso remoto, el método recomendado es envolverlos en un servicio web. Consulte para obtener instrucciones sobre cómo utilizar WebSphere Application Server Developer Tools for Eclipse para realizar estos cambios de código. Después de envolver los beans EJB en servicios web, utilice el cliente de servicio web para llamar al servicio web de EJB. Después de probar, puede eliminar la configuración o las anotaciones remotas de EJB.

Manejo de la propagación de transacciones
Liberty proporciona soporte para Web Services Atomic Transaction (WS-AT), que permite realizar transacciones globales distribuidas. Cuando el EJB se despliega como servicios web, se puede utilizar WS-AT para gestionar las transacciones. Consulte
Visión general Web Services Atomic Transaction para obtener más información.

Para obtener más información sobre los temas relacionados, consulte