viernes, 2 de diciembre de 2016

Primeros pasos con Camunda BPM – Invocar una Clase Java desde una Tarea de Servicios en un proceso BPMN 2.0


Ya en nuestra publicación anterior aprendimos cómo agregar Formularios de HTML a nuestras Tareas Humanas o con Actor para nuestro proceso de BPMN 2.0.

En esta oportunidad, siendo esta nuestra última publicación de la serie Primeros pasos con Camunda BPM, vamos a aprender a configurar e invocar a clases de Java para que se ejecuten desde nuestras actividades o tareas de servicio

Esto es una funcionalidad muy importante puesto que nos permite desde nuestro proceso de BPM invocar servicios o consumirlos tal cual lo solemos hacer desde nuestras aplicaciones Java normales. Salvo algunas excepciones, casi todo lo que se puede hacer desde Java es posible hacerlo desde nuestras clases para automatización de servicios.

Así que síganme los buenos y manos a las sobras…



Agregar una implementación de JavaDelegate



Como las tareas de servicio deben ser asociadas a una clase java que podamos ejecutar, esto lo hacemos construyendo clases que implementen la interface JavaDelegate, lo que garantiza que nuestras implementaciones tengan un método con la siguiente firma:



public void execute(DelegateExecution execution) throws Exception


El cual recibirá un parámetro DelegateExecution, que representa nuestro contexto de ejecucuión del proceso y es la puerta de entrada para la API del motor de procesos de Camunda.

Vayamos a nuestra IDE, eclipse, y abramos nuestro proyecto de BPM, bpm_demo, y en el paquete:

/src/main/java/pigbar/bpm/apps/bpm_demo

Agreguemos una clase, ServiceTaskDelegator, que implemente la Interface antes identificada,



quedando como se muestra a continuación:

package pigbar.bpm.apps.bpm_demo;

import java.util.logging.Logger;

import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;

public class ServiceTaskDelegator implements JavaDelegate {
 private final static Logger LOGGER = Logger.getLogger("SOLICITUD-PRESTAMO");

 public void execute(DelegateExecution execution) throws Exception {
  LOGGER.info("Solicitud de Prestamo realizado por: '" + execution.getVariable("customerId") + "'...");
  LOGGER.info("Por un monto total de: '" + execution.getVariable("amount") + "'.");
 }

}


Note como accedemos a la variables del proceso mediante la variable execution del tipo DelegateExecution.



Excelente!!!



Agregar una Tarea o Actividad de Servicio al Proceso


Como ya hemos implementado nuestras clases Java que se harán cargo ejecutar nuestra lógica de servicio, es hora de ir al editor o modelador de Camunda BPM para agregar una nueva Tarea o Actividad de Servicio a nuestro proceso BPMN y configurarla adecuadamente para asociarla con nuestras clases de implementación de la interface JavaDelegate.

Abramos nuestro procesos en el Modeler, seleccione y arrastre el evento de finalización hacia la derecha para hacer espacio para la nueva Tarea de Servicio

Desde la barra de herramientas seleccione la figura correspondiente a Actividades y arrástrela hasta la posición correspondiente entre la Tarea Humana y el Evento de Finalización. El editor automáticamente enlazará los flujos adecuados. Con la Tarea de Servicios seleccionada, ubique la opción de Configuración y seleccione “Servicce Task”.



Proceda a nombrar la nueva Tarea de Servicio como “Mi Servicio”, que creativo ¿no les parece?, y nos debe quedar un flujo como el siguiente:



Seleccione la Tarea de Servicio, en la barra de propiedades ubique la sección de “Details”, despliegue el comboBox denominado “Implementation” y seleccione el valor “Java Class”. Seguidamente asigne el valor adecuado correspondiente al nombre calificado de la clase de implementación

pigbar.bpm.apps.bpm_demo.ServiceTaskDelegator



Guarde los cambios realizados al proceso BPMN y desde el eclipse construya, empaquete, despliegue y ejecute nuevamente nuestro proyecto Maven Java.

Levante una instancia del Proceso con los siguientes valores:

Customer Id = Yo el Supremo

Ammount = 125000

Complete la Tarea Humana asignada al usuario John y en el Log del servidor deberíamos poder observar una salida similar a la siguiente:


02-Dec-2016 12:02:38.479 INFO [http-nio-8080-exec-17] pigbar.bpm.apps.bpm_demo.ServiceTaskDelegator.execute Solicitud de Prestamo realizado por: 'Yo El Supremo'...
02-Dec-2016 12:02:38.479 INFO [http-nio-8080-exec-17] pigbar.bpm.apps.bpm_demo.ServiceTaskDelegator.execute Por un monto total de: '125000.0'.


Lo que demuestra que nuestra Tarea de Servicio se ejecutó a la perfeccción.

Genial!!!.

Hasta aquí nuestra serie de publicaciones sobre los primeros pasos con Camunda BPM. 

Nos quedan pendientes los temas específicos de la notación BPMN, la API REST de la plataforma y como desarrollar aplicaciones para este poderoso y versátil motor de BPM.

Pronto les estaré invitando al Webinar sobre la notación BPMN que estaremos realizando con la plataforma de Camunda BPM.

Atentos a este medio y al twitter!!!

Hasta la próxima

3 comentarios:

  1. Excelente trabajo, muchas gracias! me ah ayudado bastante ... espero que retomes los temas específicos que describes al final... buena suerte!

    ResponderEliminar
  2. +10 Muy Buena explicación, gran trabajo.
    espero sigas con el tema, saludos.

    ResponderEliminar
  3. +10 muy bien explicado, gran trabajo.
    espero sigas con este tema. saludos.

    ResponderEliminar