Escenarios que usan transacciones de larga ejecución
En los escenarios siguientes se describe el uso de transacciones de larga ejecución.
Escenario 1: Uso de transacciones de larga duración con tiempos de espera
Los ámbitos de larga duración se pueden asociar a un tiempo de espera, que es un tiempo lógico en el que se debe completar el trabajo de larga duración. Si el ámbito no se completa dentro del tiempo especificado, se genera una excepción del sistema predefinida TimeoutException .
Puede crear procesos de larga ejecución si marca la orquestación completa como de larga ejecución, o bien tiene un ámbito de larga ejecución externo anidado a cualquier otro ámbito. En el primer escenario, se ejecuta un controlador de excepción proporcionado por el sistema, mientras que en el último se pueden asociar controladores de excepción específicos al ámbito externo. El controlador de excepción predeterminado proporcionado por el sistema ejecutará el controlador de compensación de los ámbitos transaccionales anidados y completados de forma correcta, si hay alguno, en orden inverso a la finalización. Puede conseguir el mismo resultado mediante la auto compensación si usa la forma Compensar en el controlador de excepción para una transacción de larga ejecución.
La siguiente orquestación es una representación de cómo asociar tiempos de espera a transacciones de larga ejecución.
Transacciones de ejecución larga con tiempos de espera
Algunas veces, puede ser necesario establecer una conexión con sistemas heredados que funcionan en forma de lotes. Este escenario muestra un pedido que se ha recibido y enviado al sistema heredado. El sistema heredado procesa el pedido y devuelve una confirmación de pedido. La operación de envío inicializa un conjunto de correlaciones mediante el número de pedido y la operación de recepción sigue a ese conjunto de correlaciones. La operación de recepción se encuentra también en un ámbito de larga ejecución con un valor de tiempo de espera.
El motor de orquestaciones deshidratará la instancia de orquestación que espera la recepción. La correlación asegurará que se invoca la misma instancia de orquestación cuando se recibe el mensaje. Si la confirmación del pedido de compra no llega dentro del intervalo de tiempo especificado por los valores de tiempo de espera, se producirá una excepción TimeoutException .
Escenario 2: Uso de transacciones de larga duración con compensación personalizada
Las siguientes orquestaciones demuestran cómo asociar e invocar compensaciones personalizadas asociadas a orquestaciones completas. Este escenario inserta un cliente nuevo y los detalles del pedido para el cliente. La lógica de la orquestación indica que si se produce un error en la inserción del pedido, debería deshacer la inserción del cliente. La inserción del cliente puede hacerla un sistema heredado y, por lo tanto, mostrarse en una orquestación a la que se puede llamar diferente. La orquestación denominada tiene la propiedad Custom establecida para la compensación, que proporciona una hoja independiente para realizar el proceso de compensación. La compensación consiste en eliminar el cliente que se acaba de insertar.
La orquestación de llamada tiene un ámbito de larga ejecución para realizar la inserción del pedido. Este ámbito se anida en un ámbito de larga ejecución externo. El ámbito externo tiene un controlador de excepción asociado para detectar cualquier excepción. El controlador usa la forma Compensar para invocar la excepción personalizada asociada a la orquestación de llamada y deshacer, de este modo, cualquier cambio que se pueda haber producido en la llamada a la orquestación.
Transacciones de ejecución larga con compensación personalizada
de compensación personalizada
Orquestación llamada (principal)
Orquestación llamada (compensación)