Jugando con jBPM #12 – jBPM + Drools

Bueno como siempre, la idea del post es tratar de mostrar alguna funcionalidad de jBPM. Pero en este caso nos vamos a fusionar con otro framework muy importante dentro de la suite de productos de JBoss. Estamos hablando de JBoss Drools, este framework pretende cumplir todas las funcionalidades de un BRMS (Business Rule Management System – Sistema de administración de Reglas de Negocio).

En este caso vamos a ver un ejemplo sencillo de como podemos usar a Drools dentro de un ActionHandler de jBPM.

Para empezar con el ejemplo vamos a ver el gráfico del proceso del negocio que vamos a utilizar:

Drools + jBPM

Drools + jBPM

Este proceso básicamente se encargara de obtener los datos de una persona (de algún modo, podría ser una tarea humana cargar los datos de la persona) y con estos datos automáticamente se categorizara la persona teniendo en cuenta su edad, su sueldo, su categoría de trabajo, si posee vehículos, etc. Este es un proceso muy común en los análisis de riesgo crediticio, o también podría ser parte de la decisión para dar un seguro. La idea es que esta categorización se haga de manera automática con el motor de inferencias que nos provee Drools y de paso aprovechar de separar esta lógica de categorización dejándola afuera del código Java compilado, haciendo que esta sea mucho mas flexible a cambios. Sin dejar de lado la ventaja de que con los DSL (Domain Specific Language – Lenguajes Específicos de Dominio) podemos enmascarar las reglas definidas en lenguaje de Drools a algo muy parecido al lenguaje natural. (Mas de esto en un futuro post)

Entonces pasamos directamente a ver código y los pre-requisitos que necesitamos para que todo esto ande.

Como ya explique en post anteriores para que jBPM ande necesitamos sus dependencias, de la misma manera Drools tiene las suyas. Para obtener estas dependencias nos dirigimos a la pagina oficial de Drools y descargamos los binarios (Aprox. 50 megas)

Bajamos los binarios de Drools (Drools 4.0.7 Binaries):

http://www.jboss.org/drools/downloads.html

También recomiendo bajar el plug-in para eclipse, el cual nos hará las cosas mucho mas fáciles a la hora de escribir las reglas y sus correspondientes DSLs.

Drools 4.0.7 Eclipse Europa 3.3 Workbench (funciona para Ganymede también)

Una vez que tengamos esto descargado, necesitaremos descomprimirlos por ahí y luego crear una User Library en eclipse con los jars de Drools y sus correspondientes dependencias (que se encuentran en el directorio /lib).

(Para los que les interese Drools, recomiendo los ejemplos que hay en la pagina de downloads y la documentación oficial)

Una vez que tenemos los plug-ins instalados (jBPM y Drools) y las dependencias de ambos en nuestro proyecto, ya estamos listos para ver el codigo del proceso mostrado anteriormente.

Primero vamos al nodo (de tipo node) Obtener Persona, el cual tiene un ActionHandler asociado que posee el siguiente código:

public void execute(ExecutionContext context) throws Exception {

  Persona persona=new Persona();  
  persona.setEdad(45);  
  Trabajo trabajo = new Trabajo();  
  trabajo.setPuesto(Puesto.GERENTE);  
  trabajo.setSueldo(50000);  
  persona.setTrabajo(trabajo);  
  ArrayList<Vehiculo> vehiculos = new ArrayList<Vehiculo>();  
  Vehiculo vehiculo=new Vehiculo();  
  vehiculo.setValor(130000);  
  vehiculo.setModelo("Audi A3");  
  vehiculos.add(vehiculo);  
  persona.setVehiculos(vehiculos);  
  context.setVariable("persona", persona);  
  context.leaveNode();
}

Como se puede observar en este ActionHandler solo armamos un objeto persona, la idea en la realidad seria que sacáramos de algún lado (como por ejemplo de una base de datos, o un servicio) este objeto. Una vez que tenemos este objeto Persona, lo asignamos a una variable de contexto y continuamos la ejecución del proceso.

Al continuar la ejecución, el proceso llega al nodo llamado Categorizar, el cual también tiene un ActionHandler asociado, el cual se encarga de levantar una Sesion de Drools para ejecutar las reglas que vamos a ver mas adelante. Vemos el codigo de este ActionHandler:

public void execute(ExecutionContext context) throws Exception {
  //Creamos un paquete de reglas a partir del archivo categorizar.drl
  PackageBuilder builder = new PackageBuilder();
  builder.addPackageFromDrl(new  InputStreamReader(this.getClass().getResourceAsStream("/categorizar.drl"));
  //Con este paquete de reglas creamos un RuleBase
  RuleBase ruleBase = RuleBaseFactory.newRuleBase();
  ruleBase.addPackage(builder.getPackage());

  //Con este rule base instanciamos una nueva Session Stateful de reglas.
  StatefulSession session = ruleBase.newStatefulSession();

  //Buscamos en el contexto el objeto persona anteriormente obtenido
  Persona persona=(Persona)context.getContextInstance().getVariable("persona");
  //insertamos este objeto a la Working Memory como un fact
  session.insert(persona);

  //Creamos un objeto de tipo Salida que va a contener los resultados de las ejecuciones de la reglas
  //Y lo agregamos como una variable global
  Categoria categoria=Categoria.BAJA;
  Salida salida=new Salida();
  salida.setCategoria(categoria);
  session.setGlobal("salida", salida);
  //Una vez que tenemos las reglas (en el paquete) y los hechos insertados en la WM
  //Disparamos las reglas
  session.fireAllRules();
  session.dispose();
  //Buscamos los resultados y los guardamos en una variable del contexto del proceso
  context.getContextInstance().setVariable("categoria", salida.getCategoria());
  //Continuamos la ejecucion
  context.leaveNode();
}

Para los que recién comienzan con Drools este código suele ser bastante traumático, ya que se hacen varias cosas bastantes inexplicables a simple vista. Para tratar de explicar un poco lo que estamos haciendo veamos el siguiente gráfico que explica como generamos un paquete de reglas, que nos va a servir para inferir sobre nuestros objetos.

Generacion de Package

Generacion de Package

Como observamos en el gráfico y en el código vamos a armar un paquete de reglas partiendo de una definición de reglas que en nuestro caso esta en un archivo drl llamado categorizar.drl (también podría estar en una definición en xml de las reglas). Como podemos ver esta tarea la tiene encargada la clase PackageBuilder, la cual compila y genera el código que termina resultando en un paquete de reglas. Una vez que tenemos este paquete de reglas (que no es mas que un resultado binario y optimizado para la ejecución de nuestras reglas) creamos una nueva instancia de la clase RuleBase a la cual le agregamos el paquete que acabamos de generar. Esta clase RuleBase va a ser la encargada de tener todos los paquetes de reglas (por ende todas las reglas que se encuentren en esos paquetes) para que el motor de inferencias pueda ejecutarlas contra los hechos (o facts en ingles, que son nuestros objetos)  que se van a encontrar en la Working Memory (es una memoria especial donde nosotros almacenamos nuestros hechos/objetos)

Con los siguiente gráficos de la documentación oficial espero que se aclara un poco el panorama:

RuleBase

RuleBase

Distribución de reglas y hechos en Drools

Distribución de reglas y hechos en Drools

Cuando el flujo de ejecución llega a este nodo, vamos a notar que Drools se pone a trabajar, lo que significa que hasta este momento, no se había hecho uso de Drools, por esto vamos a notar una demora en este nodo. Como resultado de este nodo guardamos una variable llamada categoría que decidirá en el siguiente nodo que acción hay que ejecutar.

Lo único importante que nos esta faltando ver es el archivo de reglas llamado categorizar.drl:

package com.sample.rules
import com.sample.action.dominio.Persona;
import com.sample.action.dominio.Persona.Categoria;
import com.sample.action.dominio.Vehiculo;
import com.sample.action.dominio.Trabajo;
import com.sample.action.dominio.Trabajo.Puesto;

global com.sample.action.output.Salida salida;
rule "Evaluar Categoria Alta"
when
  $persona : Persona ( edad > 35)
  $trabajo : Trabajo(puesto == Puesto.GERENTE, sueldo > 10000) from $persona.trabajo
  exists ($vehiculo : Vehiculo(valor > 40000) from $persona.vehiculos)

then
  System.out.println("Categoria Alta");
  salida.setCategoria(Categoria.ALTA);
end
rule "Evaluar Categoria Media"
when
  $persona : Persona ( edad > 21 )
  $trabajo : Trabajo(puesto == Puesto.ESCLAVO, sueldo < 6000) from $persona.trabajo
  exists ($vehiculo : Vehiculo() from $persona.vehiculos)

then
  System.out.println("Categoria Media");
  salida.setCategoria(Categoria.MEDIA);
end
rule "Evaluar Categoria Baja"
when
  $persona : Persona ( edad > 21 , edad < 35)
  $trabajo : Trabajo(puesto == Puesto.ESCLAVO, sueldo < 6000) from $persona.trabajo
  not (exists ($vehiculo : Vehiculo() from $persona.vehiculos))
then
  System.out.println("Categoria Baja");
  salida.setCategoria(Categoria.BAJA);
end

Como podemos ver son reglas muy sencillas y fáciles de leer. Y lo mejor de todo es que estas reglas las tenemos centralizadas en este archivo drl, lo cual nos hará la vida mucho mas fácil cuando estas cambien y tengamos que adaptarnos a los cambios.

Espero que haya servido de algo el post, me imagino que le falta mucho detalle de como funciona Drools y como es la sintaxis de las reglas y que podemos hacer dentro de ellas. Pero ahondare en siguientes post, la finalidad de este era mostrar rápidamente como podíamos integrar muy desacoplada mente Drools con jBPM.

Espero comentarios, ya que me imagino que hay muchas cosas sobre el post que pueden no quedar claras.

About these ads
Tagged , , , , , , , , , , , , , , , , , , , , , , ,

41 thoughts on “Jugando con jBPM #12 – jBPM + Drools

  1. Sala, ya me querés robar el terreno que reclamé como propio y nunca usufructué. Sos un inescrupuloso.

    Cada tanto voy a venir a descontrolarte el blog.

  2. Alexander says:

    hola, estoy incluyendo drools a JBPM, pero no encuentro como realizar el deploy de las reglas (DRL) o donde colocarlas para que sean tomadas por el classloader.

    He probado hacer el deploy de las reglas junto con las clases, en el mismo paquete, pero al llamar el DRL sale un nullpointerexception. Tambien en el paquete de definicion del proceso lo mismo.

    Mi pregunta es donde o como coloco el archivo de reglas categorizar.drl?

  3. salaboy says:

    Gracias por tu comentario,
    Te comento que ya me habian preguntado esto antes..
    Probablemente lo mejor sea subir el proyecto del ejemplo que en estos momentos no lo tengo a mano.
    Para ponerlo en el classpath el archivo drl debe estar dentro de algun directorio que este dentro del buildpath de tu proyecto.
    Como es la estructura actual de tu proyecto?

    Saludos

  4. Paco says:

    Hola

    Oye qusiera saber si puedes explicar un ejemplo sencillo del uso de Drools en eclipse, lo que quiero saber es como voy poniendolas reglas, en eclipse habra algo asi de click derecho->nueva regla o tengo q hacerlo a mano desde el codigo??

    Trate de instalar Drools-BRMS en JBoss, encontre una pagina donde dice que tengo q descargar un archivo drools-jbrms.war y copiarlo en JBOSS_HOME\server\default\deploy pero al momento de querer entrar me marcar error sabes algo al respecto tu??

    gracias y saludos

  5. Sai says:

    Hi,

    I have roles to be given to each user for each UI. In my application, user dynamically updates the user roles in security.drl file which is located in the JBOSS default/conf folder. I need to refresh the updated version of the security.drl file without restarting the server and Application.

    How JBOSS can be refreshed at runtime without restarting?

    Please do the needful. Thanks in Advance.

    Regards,
    Sai.

  6. salaboy says:

    Hi Sai,
    First of all thanks for you comment,
    Second i think that you are mixing things.. why do you have roles in a Drools file? in Drools you probably have the assignments rules to assign users to roles. But you have a big confusion if you have your users hardcoded in .drl files.
    I recommend you that roles and users information keep it in a database or in an ldap tree.
    Let me know if you wanna know more information about that.
    Thanks again!

  7. Sai says:

    Hi , Thank you so much for immediate response.

    Here I m updating the security.drl file dynamically.

    The Process is obtaining all the roles from LDAP and display the roles in a drop down so that Administrator can choose these roles and assign them to the rules.Then I m creating a new security.drl with the newly assigned roles.

    Now the updated security.drl file is in
    D:jboss-4.2.2.GA\server\default\conf folder.

    Now my problem is how to Refresh JBOSS without restarting so that the new security.drl will take effect.

    Hope this is understandable.
    Your help is highly appreciated.

    Thanks in Advance.
    Sai.

  8. Sai says:

    Hi, Here is the sample code .

    String[] ruleFiles={“security.drl”};

    RuleBase rb=(RuleBase) Contexts.getApplicationContext().get(“securityRules”);
    rb.setRuleFiles(ruleFiles);
    rb.compileRuleBase();

    With this code I m able to refresh the drl file and able to fire the updated rules,But only when the application restarted.

    Is it possible to fire the updated rules without restarting the application.

    Thanks in Advance,
    Sai.

  9. salaboy says:

    What version of drools are you using?
    Thanks!

  10. titan says:

    Hola salaboy, estoy trabajando con las reglas de negocio y me entere de esta herramienta de Drools, visite tu blog y me ha servido de mucho para empezar a realizar mis primeras reglas. Sin embargo quisiera saber si estas (especificamente el grafo que se genera) se puede desplegar en un motor de workflows como jboss jbpm.

  11. salaboy says:

    No he entendido del todo tu pregunta.. Puedes reformularla?
    Cuando uno utiliza reglas con Drools, y estas se compilan generan un grafo que representa la red RETE que las reglas conforman. Este grafo es solamente explicativo y nos sirve para ver si las reglas que hemos escrito han sido bien expresadas.
    Recuerda que tanto jBPM como Drools son frameworks de desarrollo de integración y por lo tanto puedes combinarlos en caso de ser necesario. Pero primero tienes que analizar bien la situación que quieres resolver.
    Saludos. Espero tu pregunta mas detallada.

  12. titan says:

    Hola, gracias por responde rapido. Mira lo que pasa es que apenas empiezo con esto de workflows y reglas de negocio y talvez no sepa explicarme pero planteare de nuevo mi duda.

    Estoy haciendo un proyecto en el cual los procedimientos los represento mediante workflows; esto lo hago en eclipse con un plugin de jbpm y por medio de eclipse me conecto al motor de jbpm y despues de esto, dentro del motor puedo visualizar el workflow que hice en eclipse.

    Ahora debo agregar reglas de negocio y mi intencion era hacer lo mismo que con los workflows, concectarme a jbpm y ahi visualizar el grafo. Pero no se si esto se pueda hacer. Seguramente estoy confunfido. Esto es un proyecto escolar y mi intencion de visualizarlo en jbpm era mostrarl los resultados a mi asesor. Entonces espero puedas ayudarme diciendome como le muestro a mi asesor que ya aplique bien las reglas de negocio.

    Espero haberme explicado mejor y me puedas ayudar. GRACIAS DE ANTEMANO

  13. salaboy says:

    Actualmente… tienes una herramienta de drools para hacer eso…Pero las reglas de negocio no se visualizan en forma de grafo. Ya que por lo general estas reglas se visualizan en editores de texto, debido a que su naturaleza es mucho mas textual. Si tienes ganas de investigar, actualmente existe una herramienta llamada Guvnor que se encarga de contener tus reglas de negocio para poder editarlas de manera online.
    Lo que tu me comentas es una de las formas mas básicas de utilizar jBPM, mediante el uso de la jBPM-Console. Como jBPM es solamente un framework orientado solo de administración de procesos de negocio, las reglas quedan fuera de su alcance. Por eso has hecho muy bien al utilizar Drools para esto. Lamentablemente la consola de jBPM no tiene la capacidad de mostrar las reglas de negocio.
    Tienes que tener en cuenta también que tanto Drools como jBPM son ambos frameworks que se distribuyen como librerias java normales (archivos Jars), por lo tanto si en tu aplicación incluyes los jars de cada framework podrás hacer uso de todas las funcionalidades que ellos proveen.
    Saludos. Espero haber sido claro con mi respuesta, sino, espero tus comentarios!

  14. titan says:

    Gracias por tu ayuda. Seguire trabajando en eclipse pero no se si se pueda ejecutar ahi dentro de eclipse para no mostrar el codigo si no simplemente los resultados. Por que ami manera de ver el RETE tree es muy poco explicativo. Seguire visitando tu blog y espero me puedas seguir ayudando.

  15. salaboy says:

    El árbol RETE es un gráfico que no esta orientado a usuarios finales, sino a desarrolladores. Ya que representa como se compilan las reglas en un árbol optimizado para el momento de ejecución. Por lo tanto no serviría de mucho verlo en la jBPM console. Si quieres mostrar los resultados simplemente basta con mostrar el texto de tus reglas y luego ver en la ejecución de tus procesos como se toman las decisiones según cada situación. Por ejemplo puedes hacer una regla que decida entre dos caminos de tu proceso y luego mostrar que camino se eligió con la regla.
    Saludos

  16. titan says:

    Gracias de nuevo, mira ya mencionas un punto en el que tenia duda, el de ejecutar los procesos. Perdona si es una pregunta tonta pero en verdad que no se mucho de esto, ¿Como ejecuto los procesos? como te mencione estoy utilizando Eclipse, en donde tengo instalado el plugin de jbpm-jpdl, la herramienta grafica que creo es el GPD y porsupuesto las drools.

    Mil Gracias por contestar a mis preguntas y aclarar mis dudas.

  17. salaboy says:

    Para ejecutar tus procesos en jBPM tienes diferentes maneras, ya que es un framework y te provee de las APIs para programar tus clientes que van a interactuar con los procesos que definas. Si quieres, puedes utilizar la consola web de jBPM (creo que ya la estas usando, debido a que mencionaste que con eclipse te conectabas al motor de jBPM), en esta consola veras tus procesos que diseniaste en eclipse y podrás “instanciarlos” (es una manera de decir que ya no son mas una simple definición sino que ahora ya se encuentran corriendo por los nodos que definiste). Estas instancias por lo general las veras con el titulo de Process Instances.
    Espero que se haya entendido, y como dije antes tus consultas no molestan. Aprovecha que es gratis!

  18. titan says:

    Gracias de Nuevo por tu respuesta, seguire en mi proyecto y te ire comentando como me fue y seguramente te volvere a escribir para aclarar mas dudas.

    Saludos

  19. salaboy says:

    Gracias por tus comentarios.
    Si tu proyecto no es de una organización privada y tienes ganas de publicar como van las cosas, podemos hacer algun post aqui sobre los pasos en tu aprendizaje, asi tambien como tus resultados.
    Saludos.

  20. titan says:

    Hola Salaboy como estas, soy yo de nuevo, has usado las tablas de decision en Excel, que opinas de ellas?. Las puedo incluir en el proyecto que ya te mencione antes o son otra forma independiente de representar tus Reglas. Espero haberme explicado.

    Y otra cosa mas JBoss Rules es lo mismo que Drools?

    Saludos

  21. salaboy says:

    Hola como estas, que bueno que hayas vuelto por aca, gracias por tu comentario.
    Las use una vez en una prueba de conceptos, a decir verdad es tan facil como definir reglas en DRL, solo que las escribes en excel utilizando ciertas reglas de formato y nombres de celda para definirlas.
    Puede llegar a ser muy util si tienes usuarios acostumbrados a usar excel y deseas enseñarles a escribir las reglas ahi.
    En tu proyecto puedes tener mezcla de todas las formas de escribir las reglas, ya que las planillas de excel son traducidas y quedan como si fuera un DRL mas.
    Saludos

  22. Felipe says:

    Hola, queria saber si alguien tiene ideas de como representar un business process por medio de rules?…la idea seria hacer un business process dinamico, cada vez que se presenta un evento la rule engine sea en grado de agregar una nueva actividad al proceso dependiendo de las reglas establecidas

  23. Nicolas says:

    Hola Salaboy, por los posts tuyos que he leído, veo que sabes bastante de jBPM. Resulta que hace un tiempo estuve trabajando con jBPM-JBoss, sin obtener mayores resultados, me cambié a Intalio, pero me encontré con la sorpresa de que la Community Edition no incluye BAM. Hace poco encontré las soluciones de Drools, las cuales estoy probando hace unos días pero he tratado de instalar el Drools, el jBPM y el JBoss y no me funciona.

    Lo que necesito es montar una solución de BPM con BAM y si es posible con BRE.

    Te cuento lo que he hecho hasta el momento para ver si me puedes dar alguna ayuda o recomendarme un libro o un tutorial.

  24. Nicolas says:

    1. Descargué el archivo Drools 5.0 Guvnor Standalone (descrito como Standalone Guvnor with JBoss AS) de la página http://www.jboss.org/drools/downloads.html.

  25. Nicolas says:

    2. Descargué el jBPM 4.0 desde la página http://jboss.org/jbossjbpm/jbpm_downloads/

    3. Descomprimí el jBPM 4.0 en una carpeta en el equipo.

    4. Copié el Drools 5.0 Guvnor Standalone en la carpeta {jBPM 4.0}/install/downloads

    5. renombré el drools-5.0-guvnor-standalone.zip como jboss-4.2.3.GA.zip

    6. Modifiqué el archivo {jBPM 4.0}/install/build.xml para indicar que la versión de jboss es la 4.2.3.GA

  26. Nicolas says:

    7. Dentro de la carpeta install ejecuto la orden ant demo.setup.jboss que según la descripción hace: “installs jboss, installs jbpm into jboss, starts jboss, creates the jBPM DB schema, deploys examples, loads example identities, installs and starts eclipse”

    8. Este comando descarga, instala y ejecuta eclipse-jee-galileo-linux-gtk

    9. Una vez iniciado el eclipse continúo con las instrucciones que indica el documento http://docs.jboss.com/jbpm/v4/userguide/html_single/#d0e428 en el capítulo 2.

    10. Adicionalmente instalé las herramientas de Drools en Eclipse usando el repositorio http://download.jboss.org/jbosstools/updates/JBossTools-3.1.0.M3/

  27. Nicolas says:

    Una vez realizados estos pasos, no me aparece la pestaña de deployment ni puedo encontrar la ruta para “runtime location”.

    Después de hacer un “truco” consistente en descargar el archivo jbpm-jpdl-3.2.GA, descomprimirlo y usarlo como ubicacion del runtime me aparece la pestaña de deployment; sin embargo al hacer la prueba con la direccion que viene configurada (/jbpm-console/upload), me sale el siguiente mensaje: “An exception happened while testing the server connection. Reason: An unexpected exception caused the test connection operation to fail”. Lei en algun blog que si cambiaba la direccion por /jbpm-console/, funcionaría y efectivamente el test funcionó, logré hacer el deploy, pero no me aparece ningún proceso en el jbpm-console.

  28. Nicolas says:

    Pues bien, aquí van las preguntas:
    1. ¿Qué me falta o en donde estoy equivocado en el proceso de instalación para encontrar el runtime sin hacer el “truco”?

    2. ¿En qué ruta se debe hacer el deploy para que me aparezca en el jbpm-console?

    3. ¿Qué utilidades de Drools debo usar para implementar BAM y BRE? (Ya tengo instalado el BIRT)

    4. ¿Dónde pongo los archivos generados con BIRT (rptdesign) para que me aparezcan en el jbpm-console?

    5. ¿Cuál es la utilidad de cada una de las herramientas de Drools? (Drools Flow, Drools Guvnor, Drools Expert y Drools Fusion), no me queda muy claro de la descripción de la página.

    Agradezco la colaboración y espero no ser muy pesado con las preguntas, pero en verdad me urge poder implementar una solución de BPM.

    P.S. Tuve que partir los comentarios porque no me lo dejaba subir con mayor tamaño

    • salaboy says:

      Buenas Nicolas, gracias por todos tus comentarios.
      No creo que pueda ponerme a analizar tu situación particular de todos los pasos que has realizado, pero si puedo darte algunos lineamientos para llegar a la solución que andas buscando.

      Tu mencionas que andas buscando lo siguiente:
      “Lo que necesito es montar una solución de BPM con BAM y si es posible con BRE.”

      Si hablamos de jBPM y Drools, ninguna de las dos se caracteriza por ser una solución final, sino que por el contrario son herramientas para facilitarle la vida al desarrollador.

      Para la parte de BPM tienes dos opciones, como tu bien dices jBPM, o puedes usar Drools Flow. Si vas por Drools Flow, solo deberas aprender un solo set de APIs tanto para BPM como para BRE.
      Por lo tanto si escojes jBPM tendrás que si o si también utilizar Drools, pero aprendiendo 2 APIs distintas.

      Tanto jBPM como Drools Flow tiene APIs para implementar BAM. Lo cual simplemente significa que tienen métodos para extraer datos y poder generar reportes que te permitirán monitorear las ejecuciones de tus procesos de negocio.

      Espero haber aclarado tu panorama, sino puedes seguir comentando.
      Saludos

  29. Hiram Jafet says:

    Hola salaboy :D, ando apenas comenzando con jBPM, y BPM en general, he estado probando algunos procesos en la consola web de jbpm, pero no he podido avanzar en un ejemplo que deseo realizar, el ejercicio que quiero hacer consiste en un proceso con reglas de negocio (Drools), pero no logro lanzar las reglas para que las tomen los procesos que se instancien en la consola web, en que carpeta las deberia de poner o como las logro lanzar, saludo.

    • salaboy says:

      Son muchos conceptos juntos, tienes que comenzar por alguno de todos ellos. Primero deberías manejar bien los conceptos detras de un BPMS como jBPM5 luego deberías amigarte con las APIs antes de usar la consola, lo cual te va a ayudar a entender el ciclo de desarrollo y que información tienes disponible para usar. Una vez que ya manejes bien los conceptos relacionados con BPM puedes pasar a ver como funciona un motor de reglas, pero es demasiado para empezar. Espero que sirva, saludos!

      • En realidad no ando tan perdido, he seguido algunos ejemplos que me encuentro en la web y otros tantos que vienen de ejemplo cuando instalas jBPM, aunque tienes mucha razon, engranarme mas con lo que hay detras de jBPM seria lo mejor, en cuanto a la API la he utilizado para realizar algunas pruebas con JUnit y eso me dio a entender aun mas el funcionamiento de este BPMS, que me recomiendas para ir empezando a entender el funcionamiento de un motor de reglas en este caso Drools integrado con jBPM? (digo aparte de este post en donde se ve el funcionamiento integral de jBPM y Drools).

        Te felicito enormemente por mantener este espacio activo, en realidad pensaba que no habria respuestas a mis preguntas por la fecha del ultimo comentario :S, saludos

  30. salaboy says:

    Te recomendaria ver los ejemplos de drools sin mezclaros con los procesos todavia. Para entender el motor puedes ver los ejemplos que tenemos publicados acá: https://github.com/Salaboy/Drools_jBPM5-Training-Examples
    También podrías hacer click acá mismo en el blog en los links de community training, tanto de Drools como de jBPM5
    Saludos

  31. Hiram Jafet Romo Torres says:

    Hola de nuevo Salaboy, quisiera que me orientaras acerca de un proceso demasiado simple que estoy realizando que consta solo de un nodo de inicio -> una tarea humana -> el nodo final, lo que estoy tratando de hacer es que en la tarea humana el usuario pueda subir un archivo (no importando que formato) y guardarlo en disco, tengo mi que pide una entrada de tipo (type=”file”), como el siguiente:

    Me podrias orientar a como cacharlo-manipularlo dentro de la tarea humana para que lo pueda guardar en disco? saludos

    • Hiram Jafet Romo Torres says:

      Lo siento no se vio el codigo html saludos.

      -form method=”POST” enctype=”multipart/form-data” action=”complete”-
      -input type=”file” name=”fileItem”-
      -input type=”submit” value=”Upload”-
      -form-

  32. salaboy says:

    Hola Hiram Jafet,
    Para poder ayudarte necesitaria saber bien que version estas usando y que queres hacer con el archivo. como jBPM se puede configurar de muchas maneras y a un archivo lo puedes guardar en tantos lugares distintos, se complica mucho ayudarte con tan poca información.
    Saludos

    • Hola,

      Estoy con la version de jBPM5, en realidad estoy usando el kit de DEMO de la ultima version estable (jbpm-5.1.0.Final), en realidad lo que deseo hacer es pedir el archivo en la -forma- ligada a la tarea humana como te lo comente en el comentario anterior, y por el momento solo desearia guardarlo en alguna parte del servidor (quiza mas adelante guardarlo en una base de datos) para que posteriormente en otra tarea humana pueda ser consultado.

      NOTA: poder implementar el proceso desde jbpm-console

      saludos…

      • salaboy says:

        Te recomiendo que para entender bien la herramienta y los modulos de la misma empieces con ejemplos simples. Estoy casi seguro de que el soporte para subir archivos en la consola que viene por defecto no esta soportado. La mayoría de las veces, por este tipo de razones fallan las herramientas genéricas. Yo a todos los que empiezan con jBPM5 les recomiendo que arranquen simple creando los proyectos con el IDE y macen para entender bien todas las partes. El mecanismo para subir un archivo es el mismo mecanismos que usuaria cualquier aplicación web para subir un archivo. Luego en la tarea solo tendrías que tener una variable que haga referencia a donde ese archivo fue subido.
        Saludos

  33. Hola salaboy,

    Hace tiempo estuvimos en contacto para unas dudas en este mismo thread, ya cada vez estoy mas metido con esto de los procesos xD, solo que ahorita necesito tu opinion en cuanto a como integrar jBPM con algun gestor documental que maneje versioning y como que gestor documental me recomiendas? saludos….

    • salaboy says:

      Hola Hiram,
      Cualquier implementación de JCR[1] debería servirte para integrar jBPM con un repositorio de de documentos. La integración puede ser desde muy simple hasta compleja. Dependiendo de los requerimientos es como vas a manejarlo.
      La integración mas simple debería guardar como variable de proceso donde se encuentra el documento guardado en el repositorio para poder modificarlo en las distintas tareas humanas. Integraciones mas avanzadas usarían la metadata del repositorio para administrar el documento. Y algo un poco mas avanzado seria integrar a nivel de APIs el repositorio y jBPM para poder cambiar el estado de los documentos ejecutando métodos contra el repositorio.

      Saludos

      [1]: http://en.wikipedia.org/wiki/Content_repository_API_for_Java

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 944 other followers

%d bloggers like this: