Soporte de actividades empresariales y de compensación de transacciones
Una actividad empresarial es una colección de tareas enlazadas entre sí de modo que su resultado es el acordado. A diferencia de las transacciones atómicas, las actividades como enviar un correo electrónico pueden ser difíciles o imposibles de retrotraer de forma atómica y, por lo tanto, requieren un proceso de compensación en caso de que se produzca un error. El soporte de actividades empresariales de WebSphere Application Server proporciona esta posibilidad de compensación a través de los ámbitos de actividad empresarial.
Cuando se debe utilizar el soporte de actividades empresariales
- La aplicación utiliza varios recursos que no son XA (Extended Architecture).
- La aplicación utiliza más de una transacción atómica, por ejemplo, los enterprise beans que tienen Necesita nuevo como el valor del campo Transacción del descriptor de despliegue de transacción del contenedor.
- La aplicación no se ejecuta en una transacción global.

Diseño de aplicaciones
Los contextos de actividad empresarial se propagan con los mensajes de aplicaciones y, por lo tanto, pueden distribuirse entre componentes de aplicaciones que no estén co-ubicados en el mismo servidor. A diferencia de los contextos de transacciones atómicas, los contextos de actividad empresarial se propagan en mensajes de llamada-respuesta (de bloqueo) síncronos y mensajes unidireccionales asíncronos. Un componente de aplicación que se ejecuta en un ámbito de actividad empresarial es responsable de garantizar que cualquier trabajo asíncrono que inicie se complete antes de que se haya completado el propio proceso del componente. Una aplicación que inicia trabajo asíncrono utilizando un patrón de mensajes enviar y olvidar no debe utilizar los ámbitos de actividad empresarial, porque este tipo de aplicaciones no tiene ningún modo de detectar si se ha completado este proceso asíncrono.
Sólo los enterprise beans que tienen transacciones gestionadas por contenedor pueden utilizar las funciones de actividades empresariales. Los enterprise beans que explotan los ámbitos de actividad empresarial pueden ofrecer interfaces de servicios web, pero también pueden ofrecer interfaces Java™ estándar remotas o locales de enterprise beans. El contexto de actividad empresarial se propaga en los mensajes de servicios web utilizando un elemento CoordinationContext estándar e interoperativo de Web Services Business Activity (WS-BA). WebSphere Application Server también puede propagar el contexto de actividad empresarial en las llamadas RMI a enterprise beans cuando no se utilicen los servicios web, pero esta forma de contexto no puede interactuar con los entornos que no son de WebSphere Application Server. Es posible que desee utilizar este caso de ejemplo homogéneo si necesita compensar una aplicación interna de su empresa. Si desea utilizar la compensación de actividad empresarial en un entorno heterogéneo, exponga los componentes de aplicación como servicios web.
Los contextos de actividad empresarial se pueden propagar a través de cortafuegos y fuera del dominio de WebSphere Application Server. La topología que utilice para lograr esta propagación puede afectar al comportamiento de afinidad y a la alta disponibilidad de la transacción de actividad empresarial.
Desarrollo y despliegue de aplicaciones
WebSphere Application Server proporciona un modelo de programación para crear ámbitos de actividad empresarial y para asociar los manejadores de compensación con esos ámbitos de actividad empresarial. WebSphere Application Server también proporciona una interfaz de programas de aplicación para especificar los datos de compensación y comprobar o alterar el estado de una actividad empresarial. Para utilizar el soporte de actividades empresariales debe establecer ciertos descriptores de despliegue de la aplicación adecuadamente, proporcionar una clase de manejador de compensación si es necesario y habilitar el soporte de actividades empresariales en cualquier servidor que ejecute la aplicación.Ámbitos de actividad empresarial
El ámbito de una actividad empresarial es el de una unidad de trabajo principal de WebSphere Application Server: una transacción global, una sesión de actividad o un contenedor de transacciones locales (LTC). Un ámbito de actividad empresarial no es una nueva unidad de trabajo (UOW), es un atributo de una UOW principal existente. Por lo tanto, existe una relación de uno a uno entre un ámbito de actividad empresarial y una UOW.
- La UOW puede ser un enterprise bean de la transacción gestionada por el contenido (CMT) que crea una transacción global.
- La UOW puede ser un contenedor de transacciones locales (LTC) donde el contenedor es responsable de iniciar y finalizar las transacciones locales de gestor de recursos (RMLT). Es decir, en los atributos del descriptor de despliegue transaccional, el atributo Resolver de la transacción local debe estar establecido en ContainerAtBoundary. Para utilizar WS-BA, no debe establecer el atributo Resolver en Application.

Los ámbitos de actividad empresarial internos deben completarse antes que los ámbitos de actividad empresarial externos. Los ámbitos de actividad empresarial internos como, por ejemplo, ÁmbitoAE2, tienen una asociación con el ámbito de actividad empresarial externo, en este caso ÁmbitoAE1. Todos los ámbitos de actividad empresarial reciben la indicación de que deben cerrarse si la UOW asociada a ellos se completa satisfactoriamente o compensarse si la UOW asociada genera un error. Si ÁmbitoAE2 se completa satisfactoriamente, cualquier manejador de compensación activo que sea propiedad de ÁmbitoAE2 se mueve a ÁmbitoAE1 y debe seguir la misma dirección de finalización que cuando se completa ÁmbitoAE1: compensarse o cerrarse. Si ÁmbitoAE2 genera un error, los manejadores de compensación activos se compensan automáticamente y no se mueve nada al ÁmbitoAE1 externo. Cuando un ámbito de actividad empresarial interno genera un error como resultado de un error en la UOW asociada, se genera una excepción de servidor de aplicaciones en el componente de aplicación que llama, que se ejecuta en la UOW externa.
Por ejemplo, si se produce un error en la UOW interna, puede generar una excepción TransactionRolledBackException. Si la aplicación que llama puede manejar la excepción, por ejemplo llamando otra vez al componente llamado o llamando a otro componente, la UOW que llama y el ámbito de actividad empresarial asociado pueden completarse satisfactoriamente aunque se haya fallado el ámbito de actividad empresarial interno. Si el diseño de la aplicación requiere que se produzca un error en la UOW que llama y que el ámbito de actividad empresarial asociado se compense, el componente de aplicación que llama debe hacer que se produzca un error en la UOW, por ejemplo, permitiendo que cualquier excepción del sistema de la UOW anómala sea manejada por el contenedor correspondiente.
Cuando el ámbito de actividad empresarial externo finaliza, su ejecución satisfactoria o anómala determina la dirección de la finalización (cierre o compensación) de los manejadores de compensación activos que son propiedad del ámbito de actividad empresarial externo, incluidos los que se promocionan mediante la finalización satisfactoria de los ámbitos de actividad empresarial internos. Si el ámbito de actividad empresarial externo finaliza satisfactoriamente, hace que todos los manejadores de compensación activos se cierren. Si el ámbito de actividad empresarial externo no finaliza satisfactoriamente, hace que todos los manejadores de compensación activos se compensen.
Ámbito de actividad empresarial interno | ámbito de actividad empresarial externo | Comportamiento de compensación |
---|---|---|
Se realiza satisfactoriamente | Se realiza satisfactoriamente | Cualquier manejador de compensación que sea propiedad del ámbito de actividad empresarial interno espera a que la UOW exterior finalice. Cuando la UOW externa se realiza satisfactoriamente, el ámbito de actividad empresarial externo hace que todos los manejadores de compensación se cierren. |
No se realiza satisfactoriamente | Se realiza satisfactoriamente | Cualquier manejador de compensación activo que sea propiedad del ámbito de actividad empresarial interno se compensa. Se genera una excepción en la UOW externa. Si esta excepción se captura, cuando la UOW externa se realiza satisfactoriamente, el ámbito de actividad empresarial externo hace que todos los manejadores de compensación activos que queden se cierren. |
No se realiza satisfactoriamente | No se realiza satisfactoriamente | Cualquier manejador de compensación activo que sea propiedad del ámbito de actividad empresarial interno se compensa. Se genera una excepción en la UOW externa. Si esta excepción se captura, el ámbito de actividad empresarial externo no se realiza satisfactoriamente. Cuando el ámbito de actividad empresarial externo no se realiza correctamente, debido a la excepción no manejada o a otras razones, todos los manejadores de compensación activos que queden se compensan. |
Se realiza satisfactoriamente | No se realiza satisfactoriamente | Cualquier manejador de compensación que sea propiedad del ámbito de actividad empresarial interno espera a que la UOW exterior finalice. Cuando la UOW externa no se realiza satisfactoriamente, el ámbito de actividad empresarial externo hace que todos los manejadores de compensación se compensen. |
Cuando finaliza una UOW con un ámbito de actividad empresarial asociado, el ámbito de actividad empresarial siempre finaliza en la misma dirección que la UOW asociada con ella. El único modo de modificar la dirección del ámbito de actividad empresarial es modificar la UOW con la está asociada, que puede llevarse a cabo mediante el método setCompensateOnly de la API de actividad empresarial.
Un manejador de compensación que esté registrado en una UOW transaccional puede estar inactiva inicialmente, dependiendo del método invocado de la API de actividad empresarial. En esta situación, los manejadores inactivos se activan cuando la UOW en la que está declarado el manejador finaliza satisfactoriamente. Un manejador de compensación registrado fuera de una UOW transaccional siempre se activa inmediatamente. Para obtener más información, consulte el tema sobre la API de actividad empresarial.
Cada uno de los ámbitos de actividad empresarial del programa representa una actividad empresarial. Por ejemplo, la actividad empresarial externa que se ejecuta en ÁmbitoAE1 puede ser un caso de ejemplo de reserva de vacaciones, donde ÁmbitoAE2 es la actividad de reserva de vuelos y ÁmbitoAE3 la reserva de hotel. Si las reservas de vuelo u hotel no se realizan satisfactoriamente, la reserva de vacaciones global no se realiza correctamente de manera predeterminada. Alternativamente, si, por ejemplo, la reserva de vuelo no se realiza satisfactoriamente, es posible que desee que la aplicación intente reservar un vuelo utilizando otro componente que represente a una compañía aérea distinta. Si la reserva de vacaciones global no se realiza correctamente, la aplicación puede utilizar manejadores de compensación para cancelar cualquier vuelo u hotel que ya se hayan reservado satisfactoriamente.
Utilización de los ámbitos de actividad empresarial por los componentes de aplicación
- Configuración predeterminada
- Si un contexto de actividad empresarial está presente en una solicitud recibida por un componente sin configuración de ámbito de actividad empresarial, el contenedor almacena el contexto pero no se utiliza durante el ámbito de método del componente de destino. No se crea un nuevo ámbito de actividad empresarial. Si el componente de destino invoca otro componente, el contexto de actividad empresarial almacenado se propaga y lo pueden utilizar otros componentes de compensación.
- Ejecutar métodos de enterprise bean en un ámbito de actividad empresarial
- El contenedor recibe un contexto de actividad empresarial presente en la solicitud de entrada y éste se pone a disposición del componente de destino. Si se crea una nueva UOW para el método de destino, por ejemplo, porque el método de enterprise bean tiene un valor de Transacción de Necesita nuevo, el ámbito de actividad empresarial recibido se convierte en un ámbito de actividad empresarial externo de una actividad empresarial recién creada. Si la UOW se propaga a partir del componente que llama y la utiliza el método, el método utilizará el ámbito de actividad empresarial recibido. Si un ámbito de actividad empresarial no existe en la invocación, se crea un nuevo un ámbito de actividad empresarial que el método utilizará.