09.11.2014 Views

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

SHOW MORE
SHOW LESS

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>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!