viernes, 12 de octubre de 2012

Tratamiento de errores en procesos de negocio con Activiti

Activiti
Al igual que en todo programa durante la ejecución de los procesos de negocio se pueden producir condiciones de error que deberemos tratar. Por ejemplo, supongamos un proceso de negocio que trata con la venta de diferentes artículos, probablemente una comprobación y condición de error será comprobar las existencias del artículo que se va a vender en el proceso. Este es un error lógico que se podría dar pero también se pueden dar errores técnicos como por ejemplo un error al actualizar las existencias en la base de datos o al acceder a un sistema externo como podría ser un web service o servicio REST.

Los errores lógicos se pueden tratar mediante ciertas construcciones de la notación BPMN, los errores técnicos podemos tratarlos dirigiendo el flujo del proceso. Estas dos formas de tratamiento de errores no son exclusivas sino que se pueden aplicar ambas en un mismo proceso. Veamos un ejemplo de ambos tipos de tratamientos en un proceso de negocio que comprueba las existencias de un producto.

Primero la definición del proceso de negocio en notación BPMN y el diagrama:




La tarea «comprobarExistenciasServiceTask» contiene la lógica para comprobar las existencias de un producto y en función de si hay existencias o no toma la decisión de dirigir el flujo a través de la transición adecuada, este será el tratamiento técnico que aunque en este caso no se produce un excepción por un error con un sistema externo para este proceso es una condición de error. En caso de que haya existencias el subproceso acabarán en el evento «end» del subproceso y en caso de que no haya existencias el subproceso se terminará con el evento «error» del subproceso, este sería el tratamiento lógico del error.

Veamos la clase ComprobarExistenciasServiceTask:


En función de si hay existencias toma un transición u otra. Ahora la clase Producto.


Los teses unitarios para probar el proceso de negocio:


El test testHayExistencias comprueba la ejecución correcta para un producto con existencias, también que se resta una unidad a las existencias. El test testNoHayExistencias comprueba la ejecución en el caso de un producto sin existencias.

Finalmente, el programa que ejecuta el proceso de negocio:



En el apartado referencia puedes consultar el código fuente de este y otros ejemplos de procesos de negocio.

Referencia:
Conceptos sobre procesos de negocio (BP, BPM, BPMS, ...)
Procesos de negocio con Activiti
Usar variables en un proceso de negocio con Activiti
Reglas de negocio con Drools y Activiti
Código fuente del ejemplo tratamiento de errores con Activiti