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…
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
Excelente trabajo, muchas gracias! me ah ayudado bastante ... espero que retomes los temas específicos que describes al final... buena suerte!
ResponderEliminar+10 Muy Buena explicación, gran trabajo.
ResponderEliminarespero sigas con el tema, saludos.
+10 muy bien explicado, gran trabajo.
ResponderEliminarespero sigas con este tema. saludos.
Hola, Buenas tardes. Me han gustado mucho los tutoriales que ha ofrecido sobre Camunda. Le escribo desde la Universidad Complutense de Madrid y estamo investigando como integrar Camunda en nuestra estructura de trabaja. No se si nos podría ayudar. Espero que se ponga en contacto conmigo. Muchas Gracias. Un saludo. David.
ResponderEliminarHola, Buenas tardes. Me han gustado mucho los tutoriales que ha ofrecido sobre Camunda. Le escribo desde la Universidad Complutense de Madrid y estamo investigando como integrar Camunda en nuestra estructura de trabaja. No se si nos podría ayudar. Espero que se ponga en contacto conmigo. Muchas Gracias. Un saludo. David.
ResponderEliminar