2008.06.08.Introduccion a un BPM.pdf - Willy .Net
2008.06.08.Introduccion a un BPM.pdf - Willy .Net
2008.06.08.Introduccion a un BPM.pdf - Willy .Net
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Introducción sobre <strong>BPM</strong><br />
<strong>BPM</strong> es <strong>un</strong> paradigma para la administración de procesos de negocio. El concepto es algo<br />
abstracto y en realidad engloba numerosas actitudes y tareas a desarrollar en <strong>un</strong>a empresa, pero en<br />
nuestro caso lo enfocaremos a <strong>un</strong>a de sus técnicas principales: La gestión de procesos de negocio a<br />
través de flujos, lo que se suele denominar workflow.<br />
Mediante <strong>BPM</strong> se persigue el modelado de las actividades de negocio para lograr <strong>un</strong>a mejor<br />
administración, automatización y optimización.<br />
El sistema implantado en <strong>un</strong>a empresa para lograr estos objetivos y adherirse al paradigma lo<br />
denominan <strong>BPM</strong>S.<br />
Alg<strong>un</strong>os ejemplos de aplicaciones de <strong>BPM</strong> o motivos de implantación son las que siguen:<br />
Implantación o mejora del sistema de calidad<br />
Comprensión y mejora de procesos<br />
Establecimiento real de SLA<br />
Reingeniería de procesos<br />
Optimización de tareas<br />
Establecimiento de metodología a nivel de empresa<br />
Control y seguimiento de los procesos organizativos<br />
Como hemos señalado, nosotros nos centraremos en los flujos de negocio, técnica que permite<br />
acercar el analista al programador mejorando la comprensión y la com<strong>un</strong>icación mediante diseños<br />
gráficos de secuencias de tareas que conj<strong>un</strong>tamente realizan <strong>un</strong>a f<strong>un</strong>ción de alto nivel e importancia<br />
para los objetivos de <strong>un</strong>a empresa.<br />
Representan <strong>un</strong>a formalización de la ordenación requerida de este tipo de procesos, que<br />
mediante las herramientas o software adecuado puede ser explotado para mejorar desde varias<br />
perspectivas la secuenciación de tareas de negocio.<br />
Mediante <strong>un</strong> workflow se estudian los aspectos operacionales de <strong>un</strong>a actividad de trabajo: cómo<br />
se estructuran las tareas, cómo se realizan, cual es su orden, cómo se sincronizan o la manera en que<br />
se relacionan <strong>un</strong>as con otras.<br />
Existen numerosas implementaciones para establecer <strong>un</strong> workflow, alg<strong>un</strong>as privadas como W4<br />
y otras públicas como OpenSymphony o J<strong>BPM</strong>.<br />
Alg<strong>un</strong>os estándares han surgido en los últimos años para la definición de flujos de trabajo. Dos<br />
de los más importantes son:<br />
• XPDL: Para definición de flujos de trabajo en formato XML<br />
• BPEL: Proporciona facilidades para la orquestación de servicios, combinación de servicios<br />
web para conseguir <strong>un</strong> flujo de negocio.
Figura 1. Ejemplo básico de <strong>un</strong> proceso de negocio con nodo de decisión<br />
Implementación de <strong>BPM</strong> con J<strong>BPM</strong><br />
<strong>BPM</strong> es <strong>un</strong>a idea, <strong>un</strong> paradigma o <strong>un</strong> concepto. Existen numerosas implementaciones de este<br />
modelo tanto libres como privadas. Una de ellas es J<strong>BPM</strong>, solución de JBOSS para java<br />
actualmente en su versión 3.2.<br />
Breve descripción del framework<br />
J<strong>BPM</strong> es <strong>un</strong>a implementación en Java de <strong>BPM</strong> que facilita la creación de flujos de procesos de<br />
negocio permitiendo la integración de procesos para la <strong>un</strong>ión de personas y aplicaciones<br />
Soporta dos lenguajes de proceso:<br />
- JPDL: Enfocado a la definición de flujos de procesos en Java.<br />
- BPEL: Proporciona facilidades para la orquestación de servicios, combinación de servicios<br />
web para conseguir <strong>un</strong> flujo de negocio. El soporte BPEL se encuentra de momento en fase<br />
Beta, pero se añadirá en <strong>un</strong> futuro a J<strong>BPM</strong>.<br />
Las dos características más potentes o útiles de <strong>BPM</strong> y en concreto de J<strong>BPM</strong> son su orientación<br />
gráfica y la persistencia en la BD.<br />
J<strong>BPM</strong> enfoca su filosofía hacia GOA. Mediante <strong>un</strong> gráfico se diseña el flujo y posteriormente se<br />
le dota de la lógica necesaria mediante mapeos con clases de Java. De este modo se crea <strong>un</strong> nexo<br />
entre el analista o diseñador y el programador. Existen herramientas para diseñar estos flujos.<br />
Utilizaremos GPD, <strong>un</strong> plugin para Eclipse de fácil manejo e instalación.
J<strong>BPM</strong> tiene la capacidad de persistir los flujos. En los lenguajes tradicionales no existen<br />
situaciones de parada y espera de notificación de modo que ese thread pueda ser guardado en la<br />
base de datos. De modo que no hay soporte para situaciones de asincronía sin que el thread continúe<br />
corriendo.<br />
J<strong>BPM</strong> modela flujos de negocio que básicamente son maquinas de estados, a<strong>un</strong>que los flujos<br />
son algo más que eso. De este modo cualquier cosa que sea susceptible de ser <strong>un</strong>a maquina de<br />
estados finitos puede ser modelada con <strong>un</strong> <strong>BPM</strong>: navegación web, procesos de backup, sistemas<br />
empotrados de control, autómatas totales en general. Realmente la mayor parte de sistemas<br />
informáticos pueden ser modelados así, la cuestión es si es viable o conveniente<br />
J<strong>BPM</strong> es básicamente <strong>un</strong>a librería de clases Java y viene distribuida en <strong>un</strong> JAR, de este modo<br />
puede quedar embebida en cualquier tipo de aplicación: web, swing, en servidor, en cliente, etc.<br />
Desde la página de JBOSS podemos descargarnos el paquete entero del framework. Este incluye<br />
los siguientes elementos distribuidos en carpetas:<br />
• config: ficheros de configuración para <strong>un</strong> entorno java estándar<br />
• db: Scripts SQL para la creación de la base de datos en los SGDB más com<strong>un</strong>es<br />
• designer: Plugin de eclipse para diseñar gráficamente los flujos de negocio<br />
• doc: Guía de usuario y javadoc del API<br />
• examples: Ejemplos de implementación de flujos.<br />
• lib: Binarios de la distribución<br />
• server: Un servidor de aplicaciones JBOSS que contiene <strong>un</strong>a implementación J<strong>BPM</strong> para<br />
<strong>un</strong>a aplicación de consola vía Web<br />
• src: Fuentes de la distribución y componente de identidad de J<strong>BPM</strong><br />
Perspectivas de J<strong>BPM</strong><br />
Existen numerosas formas de analizar <strong>un</strong> framework. J<strong>BPM</strong> como hemos explicado con<br />
anterioridad tiene como principales virtudes su orientación a ejecución de flujos de procesos<br />
diseñados gráficamente y la persistencia en la base de datos que soporta su estabilidad en la gestión<br />
de procesos.<br />
Comportamiento de J<strong>BPM</strong> a nivel de base de datos<br />
J<strong>BPM</strong> utiliza hibernate para gestionar la persistencia de sus datos. Mediante ficheros de<br />
mapeo HBM preestablecidos en la configuración del marco es capaz de almacenar todo lo<br />
relacionado a <strong>un</strong> flujo de negocio definido y ejecutado de modo transparente al programador al<br />
margen de <strong>un</strong>a situación especial en la que se desee intervenir en esa persistencia.<br />
El framework proporciona scripts de creación de base de datos para las más com<strong>un</strong>es:<br />
Oracle, PostgreSQL o SQLServer.
De este modo el modelo de datos original de J<strong>BPM</strong> contiene 33 tablas que gestionan datos<br />
estáticos de definición de flujos y datos dinámicos de instancias de esos flujos.<br />
Comportamiento de J<strong>BPM</strong> a nivel de procesos<br />
J<strong>BPM</strong> está implementado en Java, de modo que corre sobre <strong>un</strong>a JVM.<br />
Mediante <strong>un</strong> fichero XML en JPDL se define el flujo de negocio que representa lo diseñado<br />
gráficamente, el plugin de eclipse u otra herramienta de diseño se encarga de actualizar el fichero<br />
conforme modificamos el gráfico a<strong>un</strong>que también podemos editarlo manualmente.<br />
Una vez definido el flujo, las clases del framework con DOM4J parsean el XML. Se puede<br />
definir mediante <strong>un</strong> String en formato XML, empaquetado en <strong>un</strong> fichero .par o en <strong>un</strong> fichero XML<br />
libre.<br />
Una vez parseado se busca esta definición por id en su base de datos en la tabla , si no la<br />
encuentra realiza el deploy de toda la información referente al flujo, después se ejecuta el flujo,<br />
conforme a lo definido en el grafico y a las clases java.<br />
Si el flujo se encuentra definido ya, simplemente inicia la instancia ya que la información de<br />
éste ya se encuentra desplegada. En caso de que se desee iniciar <strong>un</strong>a instancia anterior, se buscará<br />
su id_ en la tabla “jbpm_process_instance” y se reiniciará o reanudará el flujo.<br />
Cuando se ejecuta el flujo, se dan facilidades para efectuar paradas asíncronas, abortar el<br />
proceso, controlar el r<strong>un</strong>time de ejecución, etc.<br />
Existe <strong>un</strong> elemento Token, <strong>un</strong>a clase del framework. Cada instancia de token representa <strong>un</strong><br />
hilo de ejecucion en el flujo, de modo que virtualmente se va desplazando por los nodos conforme<br />
se avanza en la ejecución. Si se bifurca <strong>un</strong> nodo se creará <strong>un</strong> nuevo hilo de ejecución y <strong>un</strong> nuevo<br />
token.<br />
Los elementos son los que se pueden esperar en <strong>un</strong> grafo de este tipo: Nodos que ejecutan<br />
acciones, transacciones que conectan <strong>un</strong>os nodos con otros, estados de inicio y fin, bifurcaciones,<br />
decisiones, <strong>un</strong>iones, ...<br />
La ejecución del flujo en sí no difiere de la de cualquier aplicación en Java que persista<br />
valores en la base de datos durante su ejecución.<br />
Para poder ejecutar <strong>un</strong> flujo en nuestros proyectos nosotros utilizaremos el servicio Spring<br />
<strong>BPM</strong>Service, en la capa Business Process de neoplatform. Este elemento nos da en <strong>un</strong> principio<br />
facilidades para implementar y manejar nuestros flujos de negocio. En la versión 2.8.1 del<br />
framework envuelve dos implementaciones <strong>BPM</strong>: J<strong>BPM</strong> y Oracle Workflow.
Pasos para la creación y ejecución de <strong>un</strong> flujo<br />
*Este paso no es necesario pues ya ha sido realizado en la implementación del servicio de neo.<br />
Instalación<br />
Los pasos a realizar para utilizar J<strong>BPM</strong> son los siguientes:<br />
• Descargar la suite completa de J<strong>BPM</strong> de la web de JBOSS *(Sólo GPD)<br />
• Ejecutar script para crear las tablas en la base de datos requerida.<br />
• Instalar el plugin GPD para Eclipse bien por el update site o copiando directamente<br />
las librerías descargadas correspondientes en las carpetas feature y plugin de Eclipse<br />
• Añadir el jar de jbpm al classpath del proyecto *<br />
Creación<br />
Una vez tengamos instalado todo lo necesario comenzaremos a diseñar el flujo. Para ello<br />
debemos seguir los siguientes pasos(<strong>un</strong>a forma de hacerlo):<br />
• Mediante el plugin GPD, diseñar el flujo con los tipos de nodo necesarios para las<br />
necesidades del negocio.<br />
• En los nodos que tengamos que realizar algún trabajo de negocio definir los actions<br />
con la clase que los implementa. Si se establecen tareas definir swimlanes o roles de<br />
ejecución.<br />
• Inyectar en <strong>un</strong> fichero de configuración de Spring las clases definidas en los actions<br />
• Configurar en <strong>un</strong> fichero de Spring el datasource para la base de datos y la<br />
configuración general y de mapeos de hibernate *** (Comprobar parámetros del<br />
datasource)<br />
• Crear <strong>un</strong> testcase de JUnit que realice <strong>un</strong>a prueba del comportamiento deseado del<br />
flujo. En caso de existir varios caminos de ejecución o posibles comportamientos<br />
distintos, parametrizar el test o crear tantos métodos de test como caminos a<br />
explorar. Este modo de realización sigue la metodología TDD, de modo que<br />
podamos pensar en el diseño anterior antes de codificar las acciones que ejecutarán<br />
la lógica de negocio<br />
• Crear las clases de los actions en los paths definidos implementando las acciones a<br />
realizar y las decisiones de propagación de flujo<br />
Ejecución<br />
• Una vez definido e implementado el flujo, ejecutar el testcase comprobando que todos<br />
nuestros assert dan positivo (barrita verde). Puede ser útil colocar trazas simples por<br />
consola o de log4java en alg<strong>un</strong>os p<strong>un</strong>tos.<br />
• Una vez hemos asegurado que el testcase responde como esperamos, integrar el flujo<br />
con la aplicación y realizar de nuevo las pruebas de su f<strong>un</strong>cionamiento.<br />
• Subir el flujo y las clases de acción a nuestro sistema de control de versiones
Consideraciones y posibles errores<br />
- La intención de <strong>BPM</strong> con su filosofía GOA no es la misma que la de <strong>un</strong> diagrama de<br />
secuencias o de colaboración de UML: Este modela la interacción de <strong>un</strong>a parte de la<br />
aplicación a nivel de negocio interno, especificando al detalle las llamadas a los métodos<br />
incluso con su signatura y los objetos involucrados de modo que teóricamente <strong>un</strong><br />
programador no debe necesitar tomar decisiones arquitectónicas ni prácticamente de diseño<br />
y se limitara a la implementación ya que están pensados en principio para llegar a <strong>un</strong> nivel<br />
de detalle suficiente para evitarlo. <strong>BPM</strong> sin embargo está pensado para <strong>un</strong>a comprensión del<br />
negocio a alto nivel, diseñando tareas de alto nivel y flujos de alto nivel. Un nodo bien<br />
podría desembocar mensajes a cientos de objetos. Implementar <strong>un</strong> flujo a este nivel de<br />
detalle no es el objetivo y además provocaría <strong>un</strong> exceso. El control de la lógica se volvería<br />
más complicado, la persistencia continua en base de datos ralentizaría la ejecución y<br />
aumentaría drásticamente el número de registros en la base de datos y la virtud de acercar el<br />
técnico al responsable de negocio o al diseñador desaparecería.<br />
- <strong>BPM</strong> no soluciona los problemas del negocio. Puede simplificar el desarrollo o facilitar la<br />
trazabilidad, la comprensión o la integración pero se construye sobre lógica de negocio ya<br />
definida. Es <strong>un</strong> elemento de construcción superior que utiliza la lógica creada para mejorar<br />
la solución o para diseñarla a muy alto nivel, no para decidirla.<br />
- <strong>BPM</strong> no es algo mágico ni ning<strong>un</strong>a panacea. Realmente es <strong>un</strong>a aproximación para mejorar a<br />
muchos niveles los procesos de negocio y pueden ser útiles, sin embargo no aportan algo<br />
realmente innovador y espectacular. Las revoluciones o innovaciones informáticas llegan a<br />
cuenta gotas y al cabo de muchos años, las revoluciones de marketing llegan cada vez que<br />
abres el explorador o el oído.<br />
- <strong>BPM</strong> no es maleable como la plastilina. A<strong>un</strong>que da ciertas facilidades para manejar de <strong>un</strong><br />
modo interesante y en ocasiones más sencillo los flujos de negocio, la implementación y<br />
modificación de éste no difiere mucho de <strong>un</strong> modelo clásico. Incluso con el soporte de <strong>un</strong>a<br />
herramienta CASE, características como evolución dinámica o mantenimientos correctivos<br />
al vuelo (al menos en mi conocimiento y a nivel comercial) todavía no están logradas.<br />
Referencias de interes<br />
• Guía de usuario de J<strong>BPM</strong> en la Web de JBOSS disponible en formato PDF y HTML<br />
online: http://docs.jboss.com/jbpm/v3/userguide/<br />
• Página web del framework neo: web neoplatform<br />
• Descarga de J<strong>BPM</strong> 3.2(JBOSS J<strong>BPM</strong> jPDL Suite) starter kit suite J<strong>BPM</strong>