domingo, julio 05, 2009

Introducción a jBPM Parte I ...

Antes de empezar a hablar de jBPM creo que sería interesante saber que es BPM y su relación con jBPM. Si acudimos a nuestra querida wikipedia BPM es:

Se llama Business Process Management (BPM) a la metodología empresarial cuyo objetivo es mejorar la eficiencia a través de la gestión sistemática de los procesos de negocio, que se deben modelar, automatizar, integrar, monitorizar y optimizar de forma continua.


En torno a estos conceptos ha surgido muchíisimas iniciativas para el soporte de los BPM, podríamos decir que lo que se lleva hoy día en el mundo empresarial de las IT es la gestión del negocio con BPM y claro todas las empresas del sector intentan sacar tajada dando soporte BPM.

Existen múltiples estándares para la definición de procesos de negocio entre los más extendidos están BPMN, XPDL y YAWL. Al mismo tiempo también han surgido herramientas que permiten modelar los procesos entornos automatizar

Como indico en el tema vamos a introducir un poco jBPM 4.0, esta herramienta nos aporta una plataforma para la gestión de procesos. Vamos hablando claro, lo que nos aporta es una Runtime para la ejecución de procesos definidos de manera gráfica. El lenguaje gráfico está basado en jPDL un lenguaje gráfico definido por al gente de jBoss.



A continuación lo que haremos será indicar como instalar la herramienta jBPM 4.0 desde cero y en siguientes entradas a este blog indicaré como se contruye un proyecto desde cero y como se crea y ejecuta un proceso completo.

Instalación de jBPM 4.0 + MySQL 5.0 (Windows)
1.- Requisitos
JDK 1.5 o superior preinstalado
Ant 1.7.0 preinstalado (variable de entorno ANT_HOME configurada)

1.1.- Descargar jBPM desde aquí (enlace jBPM de Sourceforge).

2.- Descomprimir jbpm-4.0.zip en directorio raiz. Ej: C:\jbpm-4.0

3.- Para la instalación sólo tenemos que entrar en directiorio c:\jbpm-4.0\jboss y ejecutar el script para su instalación:
c:\jbpm-4.0\jboss> ant demo.setup
3.1.- Para la instalación con otras BBDD usar, primero hay que configurar los ficheros (usaremos ejemplo MySQL):
C:\jbpm-4.0\db\jdbc\mysql.properties
C:\jbpm-4.0\db\hibernate.cfg

y ejecutar:
c:\jbpm-4.0\jboss> ant -dDatabase=mysql demo.setup
si no se usa una BBDD se usará una por defecto Hypersonic que no es más que una base de datos en memoria.
Al terminar ya tendremos instalado el servidor jboss y eclipse en el directorio jbpm-4.0.

5.- Vamos a instalar el GPD en eclipse:
5.1.- Abrimos eclipse c:\jbpm-4.0\eclipse\eclipse.exe
5.2.- Desde el menu Help -> Install New Software -> Add -> Archive
5.3.- Seleccionamos el archivo c:/jbpm-4.0/gpd/jbpm-gpd-site.zip
5.4.- En la ventana de instalación seleccionamos todos lo items y pulsamos en Install
5.5.- Tras la instalación es recomendable reiniciar eclipse

6.- Una vez reiniciado eclipse, añadiremos las librerias de jBPM
6.1.- Desde Windows->Preference->Java->User Library
6.2.- Seleccionamos New
6.3.- Introducimos el nombre jBPM_Liraries y pulsamos en Add Jars
6.4.- Las librerias a introducir son c:\jbpm-4.0\jbpm.jar y todas las que se encuentre en c:\jbpm-4.0\lib
6.5.- En jbpm.jar seleccionamos Source Attachment y le damos a Edit, luego External Folder he indicamos c:\jbpm-4.0\src
6.6.- Pulsamos en OK

7.- Ahora vamos a introducir el XSD de jpdl
7.1.- Desde Windows->Preference->XML->XML Catalog
7.2.- Le damos a Add y seleccionamos C:\jbpm-4.0\src\jpdl-4.0.xsd
7.3.- Pulsamos OK

8.- Configuraremos la runtime de jBPM
8.1.- Desde Windows->Preference->JBoss jBPM->jBPM 4-> Runtime locations
8.2.- Le damos a Add e introducimos el nombre jBPM-4.0 y seleccionamos el directorio c:\jbpm-4.0
8.3.- Le damos a Ok y luego marcamos el checkbox del runtime

9.- Reiniciar eclipse

10.- Importación de ejemplos:
10.1.- Desde el Package explorer le damos al mene File->Import->Existing Project in Workspace
10.2.- Seleccionamos el directio c:\jbpm-4.0
10.3.- Marcar la carpeta de examples
10.4.- Pulsar Finish y se importarán los ejemplos en un proyecto
10.5.- En el proyecto configuramos el Build Path y agregamos las librerias de jBPM.

11.- Ejecución de un proceso. Destacar que cada ejemplo posee normalmente 2 ficheros principales que son 'nombre_fichero.jpdl.xml' con la definición gráfica del proceso y un fichero java donde se ha programado un código de prueba en base a test JUnit. Para ejecutar estas pruebas seleccionamos la correspondiente clase java y le damos a Run As->JUnit Test
11.1.- Si no se ha configurado nada se van a usar los ficheros de configuración importados:
jbpm.cfg.xml
jbpm.hibernate.cfg.xml
jbpm.mail.properties
jbpm.mail.templates.examples.xml
loggin.properties

estos ficheros están preconfigurados para que utilicen la BBDD Hypersonic en memoria. Habrá que cambiar estos fichero si queremos usar MySQL
11.2.- Configurar la persistencia con MySQL
- jbpm.hibernate.cfg.xml sustituir las propiedades por:

<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpmdb4</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.format_sql">true</property>

16 comentarios:

makam dijo...

Hola,
Segui los pasos tal cual lo explicado, pero tengo un problema,
no puedo crear un proyecto nuevo del tipo jbmp, solo puedo crear un proceso nuevo sobre un proyecto ya creado (proyecto de cualquier tipo).
Tengo instalado Elcipse galileo. y jbmp 4.0.
Cuando baje jbmp 4 no encontre en ningun directorio el setup como lo mencionas, me estara faltando algo ?
desde ya , gracias.
saludos

Sebatian.

Ángel Jesús dijo...

No existe un fichero setup como tal, sino que hay un fichero (build.xml) que contiene un conjunto de rutinas que se ejecutan con Ant. Por eso el requerimiento de tener instalado Ant antes de la instalación. Comprueba que tengas instalado eso y luego si estas en la ruta:

c:\jbpm-4.0\jboss

tienes que ejecutar esto:

c:\jbpm-4.0\jboss> ant demo.setup

Si no tienes instalado Ant, con la variable de entorno configurada, seguramente te salga un mensaje de comando no encontrado o algo parecido.

Espero que te sirva.

makam dijo...

Hola,
Perfecto, instale el ant, configure las variables de entrno e instale jBPM correctamente. ;)
En cuanto a crear un proyecto jBPM nuevo, creo me esta faltando instalar las actualizaciones de jboss, estoy en eso. cuando lo resuelva posteo el resultado.
muchas gracias por la respuesta.
Saludos

makam dijo...

Bueno , al parecer avance un poco,
me esta dejando agregar un nuevo proyecto jBPM, pero al momento de crearlo me pide que ponga la locacion de jBPM runtime, y le pongo el directorio donde tengo intalado el jbpm y me dice:
This location does not contain a valid JBoss jBPM runtime.
tambien lo configure desde Windows->Preference - jMPB runtime location, agregando el directorio del jbpm.
Estoy googleando desesperandamente pero no encuentro solucion.
Si se te ocurre algo, estaria agradecido.
Saludos.

Ángel Jesús dijo...

No te lo dectecta con esto????

8.1.- Desde Windows->Preference->JBoss jBPM->jBPM 4-> Runtime locations
8.2.- Le damos a Add e introducimos el nombre jBPM-4.0 y seleccionamos el directorio c:\jbpm-4.0
8.3.- Le damos a Ok y luego marcamos el checkbox del runtime

makam dijo...

Hola,
Si, eso anda, fue o primero que intente, pero al momento de crear un nuevo proyecto, me pedia q localizara jbpm runtime nuevamente y cuando le seleccionaba el jar de jbpm o la carpeta ya extraida no funcionaba.
Ya lo solucione, nose porque necesitaba al momento de crear el proyecto agregar jbpm 3.2 runtime a pesar de q teng instalado el 4.0
Se ve que quedo algo mal en la integracion.

Gracias Angel.
Saludos.

Sebastian.

makam dijo...

Angel, q tal.
Bueno buscando por diferentes lugares, pude finalmente integrar jbpm en elipse y esta funcionando de maravilla.
En nuestra empresa estamos iniciando un proyecto en el cual jbpm se adecua mucho a nuestras necesidades, pero aún estamos por decidirnos s utulizar la version 4.0 o alguna version de la api anterior.
Por lo que he investigado son un poco diferentes ya que la 4 esta mas orientada a servicios y cambia un poco todo.
Si no es molestia me gustaria un punto de vista de alguien que ya tenga la experiencia en esto. Para ir por un camino un poco mas seguro.
Si podes dame tu opinion sobre el tema.
Saludos y gracias.

Ángel Jesús dijo...

Hola Cbaz,

la verdad que no he trabajado todavía mucho con estas herramientas, sólo he ido comentado algunas cosas que he podido hacer. Decirte que son bastantes las diferencias entre las versiones 3.x y 4.0 de jBPM. Yo te recomendaría que usaras la versión 3.x porque ahora mismo es la más usada en proyectos y además la versión 4 ha salido recientemente, y puede que incluso esté más 'verde' en ese sentido.
Por si quieres mirar más documentación sobre la versión 3.x te adjunto un par de enlaces de interés. Aquí tienes un enlace a la doc de la versión 3.2:

http://docs.jboss.org/jbpm/v3/userguide/

Existen un libro interesante que quizás te pueda servir:

http://www.packtpub.com/jboss-jbpm/book

Pues nada, espero que mis comentarios puedan servirte, aunque tampoco he aportado mucho.

Espero postear algo más durante la semana que viene, no solo de jBPM sino de otras herramientas BPM.

Muchas gracias por leer el blog.

Saludos.

makam dijo...

Angel, muchas gracias por tu aporte.
Al final decidimos utilizar jbpm 4.0
ya que nos permitia una mejor interoperabilidad con spring, para el manejo de transacciones y demas.
La verdad que si. cambio bastante la API, pero bueno, ya nos metimos por este camino.
Ni bien madure los conocimientos, sin duda posteare algo si puedo tb :)
Saludos. y gracias.

Sebatian.

makam dijo...

Hola Angel que tal!
Tengo una consulta, quiza podes darme una mano.
Necesito listar todas las definiciones de procesos que tengo en la base, o sea los que ya les hice el deploy.No encuentro forma de hacerlo, lo unico que se me ocurre es hacer una consulta a la base pero por afuera de la API, ya que esta no me provee ningun mecanismo para listar las definiciones de procesos aun no instanciados.
en jbpm 3. existe un metodo findAllProcessDefinitions() , pero en jbpm 4 no logro encontrar algo similar.
Bueno, eso es todo.
gracias por tu apoyo.
Saludos

Ángel Jesús dijo...

Ahora mismo no caigo si existe un método parecido en jBPM 4.0, he consultado la API pero no encuentro. Por curiosidad de qué Clase es ese método. Cuando tengas consultas tan técnicas, lo mejor es preguntar en foros, ya que allí hay bastante más gente que sabe sobre el tema y la respuesta suele ser rápida. Existe un foro oficial de jBPM seguramente allí te den una respuesta (muchas cabezas piensan más que 1 o 2 ;). Te dejo el enlace:

http://www.jboss.org/index.html?module=bb&op=viewforum&f=217

Gracias

makam dijo...

Buenisimo ;)
Consulto por ahi entonces,
Gracias nuevamente.

makam dijo...

Angel, como estas
yo molestando nuevamente por estos lados :)
Estoy teniendo un problema hace un tiempo y no encuentro forma de solucionarlo.
Tengo integrado Jbpm 4 con spring y hibernate y todo funciona a la perfección se podría decir, puedo crear un deploy, iniciar un proceso, crear usuarios , etc.
Pero el tema es que no me esta dejando borrar nada, cada vez que quiero borrar algo , ejecuto el metodo de la API y me lanza una "java.lang.NullPointerException"
como que se perdieran los datos en el medio.
Quiza es un tema en mi configuracion de spring y hibernate, pero lo raro es que sucede solo al borrar, y solo contra la base de jbpm. porque el resto de las tablas mias que tengo en esa base, funcionan bien.

Alguna idea ? ...

Cbaz.

makam dijo...

Solucionado!
Tenia un problema en el applicationContext.xml
habia unos llamados a unos bins q estaban mal...
saludos.

Anónimo dijo...

Hola angel primero que todo felicitaciones por tu post. Segundo quiero comentarte un par de dudas que tengo para haber si alguien me las puede despejar. La primera es que estoy instalando desde la oficina en la cual nos conectamos por proxy y por ende me sale un error al momento de empezar la descargar; como puedo autenticarme en el proxy desde el archivo de instalación. La segunda hace referencia a como puedo instalar el jbpm sobre postgres porque lanzo el comando ant -dDatabse y me dice que -dDatabase no se reconoce

Gracias

Ángel Jesús dijo...

Hola,

lo primero perdonad que no tenga acutalizado el blog, a ver si saco un ratillo para añadir cosillas sobre BPMN, BPEL y temas varios sobre procesos de negocios. Lo segundo GRACIAS por leerme. Lo tercero aquí van las respuestas:

Para la primera pregunta, no se si te podré ayudar mucho, pero si te miras el fichero:

c:\jbpm-4.0\jboss\build.xml

allí es donde se configura la rutina demo.setup que vas a ejecutar. Mirate a ver si se puede configurar algo respecto a user/pass para conexiones desde proxies.

Para la segunda pregunta supongo que el comando correcto será:

c:\jbpm-4.0\jboss> ant -dDatabase=postgresql demo.setup

NOTA: cuidad que es postgresSQL, el SQL final :).

recuerda reconfigurar los parametros correspondientes en el fichero:

C:\jbpm-4.0\db\jdbc\postgresql.properties


Espero servirte de ayuda.

Muchas gracias.