Jugando con jBPM #1- Ejemplo básico

<post>

Hacia rato que no escribia nada por aca.. pero bueno.. aprovecho ahora para mostrar algunos ejemplos que tengo en mente con jBPM. La idea es mostrar procesos simples y a la vez ir viendo un poco las APIs de jBPM y los Handlers mas comunes..y otras cosas que vayan surgiendo…

En este ejemplo vamos a ver un proceso inventado por mi llamado Mails, que tiene como finalidad representar el proceso que muchos realizamos en el dia a dia de revisar nuestros e-mails.

La siguiente imagen representa el proceso modelado con GPD (Graphic Process Designer):

Mails Process

Ejemplo

Como podemos ver el proceso se explica por si solo, esta es una de las ventajas de utilizar un lenguaje Orientado a Grafos como jPDL.

A continuación vamos a ver algunos snippets de código en jPDL generados por la herramienta GPD. La idea es resaltar y empezar a ver un poco de como esta conformado jPDL y como lo vinculamos con comportamientos (o detalles técnicos) para que el proceso pueda ejecutarse en un entorno de ejecución.

Vamos a empezar con la definición clásica de todo proceso en jPDL:

<process-definition xmlns=”urn:jbpm.org:jpdl-3.2″  name=”Mails”>
<start-state name=”Inicio”>
<transition to=”Login”></transition>
</start-state>

Como podemos ver, nada raro.. solo se explicita que versión de jPDL que estamos usando, el nombre del proceso  y luego ya podemos empezar a describir los nodos que compondrán el proceso.

También vemos el nodo llamado Inicio del tipo start-state que nos indica por donde va a comenzar la ejecución del proceso cuando tengamos una ejecución/token/execution path del mismo. Como se puede observar el nodo start-state tiene solo una transición a un nodo llamado Login.

A continuación vemos el nodo llamado Login que es de tipo task-node, estos tipos de nodo tiene la características de contener una lista de nodos task que son los que realmente definen las tareas humanas que se van a crear para el o los usuarios asignados.

<task-node name=”Login”>
<task name=”Ingresar Datos”>
<description>
El usuario Ingresa los datos Nombre de Usuario y Contraseña
</description>
<assignment expression=”group(user)”></assignment>
<controller>
<variable access=”read,write” name=”username” mapped-name=”username”></variable>
<variable access=”read,write” name=”password” mapped-name=”password”></variable>
</controller>
</task>
<transition to=”Autentificacion”></transition>
</task-node>

Como podemos ver dentro de este task-node tenemos sola una tarea definida (tag task) llamada Ingresar Datos. Las cosas a destacar de esta tarea son:

  • La asignación de un grupo de usuarios mediante una expresión, lo que quiere decir que todos los usuarios que estén dentro del grupo user podrán realizar esta tarea (en post siguientes entrare en detalle de este tema)
  • La descripción es solo a nivel informativa
  • Definimos variables que deberán ser llenadas en esta tarea (en este caso, username y password, también me explayare en este tema en post siguientes)

Siguiendo un poco con el proceso vemos un nodo de tipo node, el cual define una acción que delega el comportamiento en el la clase AutentificacionActionHandler.

<node name=”Autentificacion”>
<action name=”Autentificacion” class=”com.sample.action.AutentificacionActionHandler”></action>
<transition to=”Autentificacion ok?”></transition>
</node>

Esta clase AutentificacionActionHandler implementa la interfaz llamada ActionHandler que define y nos obliga a implementar el método execute:

import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;

public class AutentificacionActionHandler implements ActionHandler {

public void execute(ExecutionContext context) throws Exception {
// Llamada al método de autentificacion obteniendo los datos
// que ingreso el usuario en el formulario a partir de las
// variables del contexto
String username=(String)context.getVariable(“username”);
String password=(String)context.getVariable(“password”);
boolean loggedIn=login(username,password);
context.setVariable(“loggedin”,loggedIn);
}

}

Esta podría ser una implementación correcta de esta accion, la cual utiliza un método login para revisar si el usuario se autentifica correctamente con el sistema o no. Y este resultado se guarda en una variable de contexto llamada loggedin. Como vamos a ver ahora esta variable se utiliza en el siguiente nodo para decidir que transición tomar:

<decision name=”Autentificacion ok?” expression=”#{loggedin==true}”>
<transition to=”Cargar Mails Bandeja de Entrada” name=”Si”></transition>
<transition to=”Login” name=”No”></transition>
</decision>

Acá solo tenemos que destacar que este nodo decision que la expresión que decide por que transición seguir se analiza en runtime para cada instancia del proceso. Esto significa que dependiendo del valor de la variable loggedin en la instancia del proceso (sacada del contexto del mismo) es porque transición seguirá la ejecución.

Espero que se haya entendido mas o menos el ejemplo, ya de a poco iré ganando un poco de habilidades de redacción y tratare de mejorar mi ortografia, pero la idea del post era empezar a ver un poco de jPDL, gráficamente y su sintaxis XML, seguido un poco de los actions handlers. En próximos post veremos temas como:

  • Ejecución del proceso
  • Fork Nodes
  • Process State y Super State
  • Decision Handlers
  • Exceptions

Hasta la próxima.. dejen comentarios o criticas a gusto y placer!

</post>

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

51 thoughts on “Jugando con jBPM #1- Ejemplo básico

  1. Josep says:

    Hola de nuevo.. estoy siguiendo tu ejemplo y me gustaria saber como se realiza la expresion en la que se valida si el usuario pertenece al grupo de usuarios para poder continuar con el flujo. La expresion group() esta predefinida por jBPM?.
    Gracias.

  2. salaboy says:

    Exacto.. jBPM out of the box posee un componente de identity(identidades) que nos permite utilizar un esquema predefinido de Grupos, Usuarios y Membresias (User, Groups and Memberships) esto nos permite cargar nuestros propios usuarios, grupos y las relaciones entre ellos.
    Cuando estamos dentro de jPDL (Lenguaje de definiciones de proceos) podemos utilizar estas expresiones ya predefinidas que resuelve los grupos y los usuarios.
    Si esto, de alguna manera no te gusta, puedes directamente declara un AssigmentHandler escrito en codigo Java que resuelva la logica de quien va a tener asignada la tarea.

    Comentame si queda claro el tema.. sino publico un ejemplo el fin de semana.
    Saludos

  3. Josep says:

    Holas de nuevo.. gracias por tu contestación, si quedo claro, y me alegra saber que se pueden realizar estas funcionalidades sin tener que crear clases java especificas por parte del desarrollador / usuario, ya que es justamente el punto que mas nos interesa evaluar del jBPM para dedicir si se ajusta a nuestras necesidades,ver cuantas cosas podemos hacer sin tener que programar “realmente” utilizando funcionalidades ya preestablecidas. Siguiendo con el ejemplo que has posteado, el metodo “login” al cual invocas dentro del execute de public class AutentificacionActionHandler() ,que en realidad sera el que ataque las tablas de usuarios y verifique la validez de los datos de usuario y passw, te la defines tu en la misma clase no?, solo que no la has incluido en el ejemplo, o es un método tambien ya creado?.

    De nuevo gracias por tu ayuda.
    Un saludo.

  4. salaboy says:

    Buena pregunta.. lamentablemente mi ejemplo no ha sido muy claro y puede que eso complique mas que aclarar.
    Para responder a tu pregunta tengo que hacer una aclaracion sobre el ejemplo importante, tienes que recordar que justo en el ejemplo estamos modelando un caso donde una de las tareas del proceso va a ser la autenticacion del usuario, ya que cualquier cliente de mails realizara este paso en orden de obtener los mail del usuario especificado. Con esto quiero decir que en un caso real es muy dificil que cuando modeles un proceso este tenga un nodo llamado autenticacion. Por ejemplo cito otro ejemplo con el fin de aclarar:
    Imaginate el proceso de un banco de crear cuentas para sus nuevos clientes, en este caso seguramente apareceran tareas como: Consultar los datos del cliente, Consultar las deudas del cliente, etc. Pero nunca sera un paso del proceso autenticar a nadie, ni mucho menos llamar a alguien para que haga esto, ya que estos seran detalles tecnicos ocultos para el analista que modela el proceso.

    Entonces como respuesta a tu pregunta original puedo decir que esta funcionalidad no viene provista por el solo hecho de que eso es un detalle tecnico que escapa de los limites de jBPM y dependiendo de donde tu tengas guardados tus usuarios (Base de datos, Arbol LDAP, Archivos de texto, ETC) cada uno tendra que programar el conector a su componente de Identidades que despues utilizara en la logica que realizan los nodos internamente.

    Nuevamente espero haber aclarado y no haber confundido mas.. cualquier cosa no tienes mas que comentar nuevamente para que sigamos discutiendo..
    Muchas gracias por tu comentario!

  5. sergio says:

    Esta interesante este ejemplo, bueno yo estoy empezando en esto de jbpm. pero creo que me confundo entre los task nodes y los nodes, segun lo que entiendo, los task nodes, son asignados a un usuario o un rol, y los nodes, son como metodos propios del negocio, si estoy en lo cierto?? o estoy confundido…

    gracias de antemano por su respuesta

  6. salaboy says:

    Con respecto a tu pregunta, primero que nada disculpa por la demora en la respuesta, por lo general suelo responder en el mismo instante. Interesante tu pregunta, y es normal que cuando se esta empezando con jBPM se mezclen un poco los conceptos y las funcionalidades de cada tipo de nodo. Por esto paso a explicarte los conceptos asociados a estos dos nodos.
    Los nodos de tipo task, van a ser tareas realizadas por seres humanos (personas), por lo tanto cuando modeles un proceso, tienes que tener en cuenta que tareas hacen las personas y que tareas realizan los sistemas. Como ejemplo de tarea personas tienes los clasicos como: firmar un cheque, aprobar una accion que no sea automatizada, recibir documentos no digitales, etc.
    En cambio las acciones automatizadas son los nodos de tipo node, los ejemplos mas clasicos son: debitar dinero de una cuenta de banco.
    Espero que haya quedado claro. Cualquier cosa comenta de nuevo.
    Saludos y gracias por tu comentario, de este tema podemos discutir mucho, ya que tienes que cambiar tu vision de programacion a la vision de modelado de procesos.

  7. sergio says:

    muchas gracias, por la respuesta, y creo que estare rondando tu blog para seguir aprendiendo acerca de JBPM, lo que pasa es que estoy haciendo un proyecto en el que se hace necesario el uso de jbpm, y pase por aqui y se me hizo interesante

  8. Gomez says:

    Hola:
    Tengo un problema que no le he podido resolver desde hace mucho.

    Si alguien me puede ayudar mil gracias

    necesito realizar una consulta filtrada por medio del id del ProcessInstance, esta consulta traera datos de diferentes tablas por lo tanto necesito hacer un QUERY que tenga un WHERE.

    necesito ingresar esos datos en un tabla o en un grid, debo de realizarlo en un JSP.

    en el grid de la pagina JSP tendra n filas y cada fila tendra un link para descargar archivos.

    Entonces necesito descargar los archivos serializados por medio de RUNA WFE ( JBOSS ).

    CON RUNA WFE NO PUEDE HACER (UN GRID, REALIZAR UN QUERY). SI SE PUEDE HACER POR FAVOR INSTRUIRME PARA PODER HACERLO.

    ya tengo creado mi JSP.
    Cuando voy a descargar un archivo de la base de datos, almacenado por medio de RUNA WFE. me da el siguiente ERROR.

    java.lang.ClassNotFoundException: ru.runa.wf.FileVariable

    Por lo tanto no puede descargar los archivos que fueron almacenados por medio de RUNA WFE.

    Necesito ayuda, para poder realizarlo. por favor

    en donde la puedo descargar la clase o enviarmela al correo gomezcos@gmail.com

    Alguna idea o Sugerencia.

    MIL GRACIAS.

  9. salaboy says:

    Sin duda por lo que me estas comentando, RUNA WFE debe tener intermanete una clase que usa para serializar los datos que tenes dentro del proceso.
    Para deserializar estos datos vas a necesitar ver en que JAR (Java Archive) tenes esa clase dentro de RUNA WFE. Una vez que encuentres el JAR que lo contiene vas a tener que incluirlo como dependencia a tu proyecto que quiere deserializar esa clase.
    Espero que sirva.. Y sino espero tus comentarios.
    Muchas gracias.

  10. Gomez says:

    GRACAS POR TU RESPUESTA.

    la verdad que tienes toda la razon.
    Pero ya busque ese .jar entre los 2736 .jar que existen en RUNA WFE. y no encuentro

    Encontre una llamado:
    jboss-serialization.

    Voy a probar este haber si funciona.

    Pero mi duda es en donde lo pego Estoy utilizando Netbeans 6.0.1

    Gracias.

    • Saludos Gomez:

      Estoy interesado en crear un proceso que me permita utilizar conexion con Runa Wfe y Postresql, aun no lo comprendo del todo, queria sabes como ha ido tu busqueda en este tema y el netbeans que utilizaste, pudiste accesar a la Base de datos de Runa?, espero me puedas ayudar, saludos y gracias de antemano.

  11. salaboy says:

    Es muy buena idea usar Netbeans!! Felicitaciones por eso!
    Otro lugar donde podrías fijarte es en la configuración de jBPM que incluye RUNA. No se exactamente que nombre tendrá este archivo pero tendrias que buscar en algo que se llame como jbpm.cfg.xml, o en los mapeos de hibernate que pueden llamarse hibernate.cfg.xml. Si encuentras estos archivos y puedes enviármelos al mail, por ahi puedo revisarlos y ayudarte a solucionar tus problemas.
    Muchas gracias!

  12. Oskar says:

    Saludos…

    Seria bueno que hubiera un campo que permita buscar directamente sobre el blog.

    Muy bueno el blog

  13. salaboy says:

    Voy a ver si hay alguna forma de proveer esa funcionalidad.
    Gracias por la sugerencia.

  14. manuel rodriguez says:

    hola que buen ejemplo….
    tengo un problema recien estoy empezando con el tema de workflow y tengo que publicar un workflow en este portal…bueno ya se como colocar la definicion y hacer alguna instancia … pero no me doy cuenta como hacer el recorrido si tengo diferentes actores en mi proceso…. gracias de antemano…..

  15. salaboy says:

    Que bueno que estés empezando a usar jBPM. No entendí exactamente con que portal estas trabajando ni cual es tu problema concretamente.
    Me imagino que tenes varias tareas que resuelven personas y no sabes como asignar cada persona a cada tarea?
    O cual es tu duda exactamente?
    No hay problema con tratar este tipo de dudas aca.
    Saludos y espero mas comentarios tuyos.

  16. manuel rodriguez says:

    Hola mauricio,

    gracias por responder….
    bueno ya hice mis procesos con usuarios asignadas a cada uno de ellos….eso esta bien…
    y tambien lo coloque en el liferay y guarde la definicion sin problemas….
    pero al testear o hacer correr el proceso …aqui la duda….es como testear mi proceso…
    lo unico q pude hacer es iniciar una instancia y segui los pasos de un usuario pero los demas procesos que son de otros usuario no se como puedo verlos…o sea no hay un lugar donde me pueda logear para poder ver los procesos de los diferentes usuarios….esto lo pude hacer con la consola de jbpms de jboss…. pero desde liferay no se como hacerlo??…
    espero que hayas tenido alguna experiencia en esto para poder ayudarme….
    chau

  17. Rosa says:

    Hola!… bueno yo soy nueva en lo que es JBPM y tengo que hacer un proceso en la que la mayoria de nodos son Tasks…he revisado mucho y la verdad es que no encuentro ejemplos en los que en un Task Node se encuentren varios Tasks y como pasar de uno a otro.. es como un token? o un token hijo?

    Gracias.. y felicitaciones por el blog esta muy bueno me aclaró muchas dudas

  18. salaboy says:

    Rosa, gracias por tu comentario.
    Te comento algunos detalles sobre Task y Task Nodes.

    No se si ya habras llegado a la conclusión de que un Task Node es un contenedor de Tareas (Tasks), las cuales se instancian en el momento en el que tu ejecución del proceso llega al Task Node (acá se crean instancias de objetos llamados TaskInstance).
    Esto significa que en el caso que tengas un Task Node que tiene definida dos Tasks dentro de el, estas crearan dos objetos TaskInstance, de los cuales ambos deben ser terminados (terminadas las tareas) para que el proceso continúe con su ejecución. (Este es el comportamiento por defecto)
    En el caso de las tareas no se crea un token hijo, pero si tenes que tener en cuenta el contexto de las variables entre el token del proceso y el contexto de cada tarea (para este tema te recomiendo leer en el documentación oficial sobre Task Controllers)
    Espero haber sido de ayuda, Saludos. Espero mas comentarios tuyas si te quedan dudas sobre esto.

  19. Rosa says:

    Muuuchas Gracias.. comenzare a leer la documentacion para ver sobre los task controllers… gracias sobre todo por tu pronta respuesta…
    Dime.. tienes algun ejemplo en el que pueda ver el codigo para guiarme sobre los tasks o sabes de alguna pagina donde pueda conseguirlos?

    Gracias … y que buen blog …

  20. salaboy says:

    Comentame exactamente cual es tu situación y yo te armo un ejemplo que trate de demostrar la solución a tu problemática, probablemente le sirva a mucha gente el ejemplo.
    Saludos

  21. Julen says:

    Hola buenas,
    Estoy creando un ejemplo simple con JBPM. Utilizo la version 3.2.6 de JBPM y JBoss 4.2.3. Soy nuevo en esto y no se porque no puedo hacer deploy. Además, cuando intento logearme con los usuarios de ejemplo en el jbpm-console no me deja. ¿Necesito instalar algo más o con solo instalar JBoss y JBPM en eclipse debería funcionar?

    Gracias

  22. salaboy says:

    En principio no deberías hacer nada mas, pero es un problema comun que tienen muchos. Debes revisar la configuración de la seguridad de la web console.
    También en tu base de datos, donde guarda los usuarios, revisar si los mismos estan insertados. Sino, debes revisar como insertarlos. Si mal no recuerdo habia una tarea ANT para realizar esto.
    Saludos

  23. mauricio says:

    Buenas, en el momento estoy consultando sobre jBPM y Drools; ya que queremos iniciar un proyecto de BPM para el seguimiento de inventarios en la empresa donde laboro. Actualmente tengo instalado jbpm-jpdl-3.2.3, con el JBoss que trae la suite, con base de datos en postgres. Siguiendo foros y tutoriales he podido diseñador mi primer proceso “Hello-jBPM” (es algo muy simple pero un éxito para mi en este momento, considerando que jBPM no es nada fácil de entender)

    He querido ir avanzando y he modificado el “Hello-jBPM”, al cual le añadi un nodo de desicion el cual me indica si una variable viene en “SI” asigna una tarea a “user” y si es diferente finaliza el proceso; pero lastimosamente cuando ejecuto el proceso me sale un error que no se a que se refiere

    Error completing task: An exception of type “org.jbpm.graph.def.DelegationException” was thrown.

    el error sucede en el momento en que la transición que lleva del “start” al “nodo de desicion”, en el cual tengo un action que llena una la variable

    mi correo es cmjhingeniero@yahoo.es, agradezco cualquier tipo de información, la verdad es urgente aprender jBPM y Drools

    Gracias

    Error completing task: An exception of type “org.jbpm.graph.def.DelegationException” was thrown.

    • salaboy says:

      Hola como estas?
      Primero que nada gracias por tu comentario. Veo que recién estas empezando. Comprendo cuando dices que jBPM es complicado de entender, pero es cuestión de meterse en tema nomas. Luego veras que es un framework bastante sencillo.
      Con respecto al error que estas teniendo, es básicamente que no has configurado correctamente el decision handler que contiene la lógica para decidir por que camino seguir. El error que estas obteniendo (“org.jbpm.graph.def.DelegationException” ) la mayoría de las veces significa que jBPM no ha sido capaz de encontrar la clase que tu indicaste en el classpath de la aplicación.

      • mauricio says:

        Gracias salaboy por tu pronta respuesta, es interesante poder contar con tus comentarios en estos primeros pinitos con jBPM, el problema lo he solucionado………..ahora no quiriendo ser molesto quisiera saber como puedo crear un proceso de negocio que tome cierta informacion de una base de datos en postgres (es una bd diferente a la de jBPM)

        gracias

  24. salaboy says:

    Gracias por tu nuevo comentario.
    Te comento que para crear un proceso de negocio que utilice datos de otra base datos, solamente tienes que traer esos datos, que puedes recuperarlos de varias maneras distintas, como normalmente recuperas datos en una aplicación java, y luego insertar estos datos en las variables del proceso en jBPM.
    Fíjate que para hacer esto tienes dos maneras, una es agregar esta información antes de comenzar el proceso, o una vez que ya ha comenzado. Dependiendo de lo que necesites hacer con esa información es cuando la vas a insertar.
    Saludos

  25. mauricio says:

    Gracias nuevamente por tu pronta respuesta y por la valiosa información que brindas a través de este blog. Siguiendo con el tema de jBPM he instalado el jbpm-4.0 y he notado que en la version 3.x y la version 4 las diferencias estan muy marcadas. Que versión me recomiendas para empezar, he notado que es un poco más fácil trabajar con la 3.x (impresión inicial)???

    Gracias

    • salaboy says:

      Es una buena pregunta, yo te recomendaría arrancar con la versión 3.2.6.SP1 si tu proyecto se va a usar en algún entorno de producción, esto es, en una empresa para darle un uso real a tu software.
      Si solo estas experimentando con la herramienta, por ahí seria bueno que arranques viendo la versión 4, que yo no considero que esta lista para usarse en producción.
      Saludos

  26. mauricio says:

    Hola salaboy, en el momento ando de introducción con la herramienta, tus aportes y comentarios me han servido para conocer más sobre jBPM. En el momento me ha surgido una duda. En mi empresa el proceso de negocio que queremos modelar trata sobre el seguimiento de inventarios, para lo cual queremos definir mensajes tipo alarmas que notifiquen a ciertos usuarios sobre las fases o partes en las que se encuentra el proceso de negocio.

    1. Esto sería posible de realizar con jBPM??? me podrías dar algún tipo de orientación con algún enlace o documentación en la que me pueda basar???
    2. La parte de BAM como se maneja en jBPM, existe otro framework???
    3. De pronto jBPM maneja algun tipo de training, si es asi me gustaria conocer costos y fechas???

    Muchas gracias por tus respuestas y una vez más felicito tu excelente blog

    • salaboy says:

      Excelente, vamos por pasos. Voy a tratar de responder a tus preguntas:

      1) dependiendo del tipo de eventos que quieras manejar es como lo puedes manejar. Si solo quieres avisar a los encargados de ciertas tareas que tienen que realizarlas, puedes usar reminders o timers. Sobre estos puedes encontrar información en la documentación oficial de jBPM en http://www.jbpm.org.

      2) Dependiendo de la versión que uses de jBPM hay distintos enfoques. Básicamente, la idea es configurar al framework para que deje logs de sus actividades y luego tu implementarías la herramienta que se dedique a analizar estos datos para BAM. Podrías usar reportes dinámicos con JasperReports o alguna otra solución parecida.

      3)jBPM es un proyecto open source que actualmente es propiedad de JBoss/Red Hat. Esta compania da los cursos oficiales, los cuales son muy genéricos y están orientados a desarrolladores Java con bastante experiencia. Estos cursos también se caracterizan por ser bastante caros para una persona individual (arriba de los U$D 1000 por persona, un curso de 3 días). Aparte de eso no hay nada, salvo personas, mas free lance como yo que te pueden dar una ayuda.

      Espero haber sido de ayuda. Saludos por aquellos lados.

  27. mauricio says:

    Excelente tu información, no quiero parecer cansón pero el tema me ha interesado bastante. He estado modelando procesos sencillos e ir paso por paso para poder comprender toda esta información.

    En el momento me ha surgido una duda. Todo los procesos que he modelado hasta el momento requieren de que un usuario inicie el proceso. Mi pregunta se enfoca a saber si existe la posibilidad de arrancar un proceso automaticamente, es decir generar una instancia de un proceso siempre que se genere un nuevo registro en una tabla en una base de datos cualquiera (bajo postgres)

    espero poderme entender…….gracias

    • salaboy says:

      Gracias por tu comentario.
      Si tecnicamente lo que tu quieres hacer es posible, pero jBPM al ser genérico no tiene dicha funcionalidad implementada, porque esta funcionalidad que tu dices es especifica para tu situación. Tu tendrías que implementar algo que este escuchando en una tabla y cuando se agregue un registro tu creas un proceso como lo haces normalmente en jBPM.
      Saludos

  28. mauricio says:

    buenas, en este momento estoy tratando de que mi proceso envie un email a través de un Mail Node. Me he basado en un ejemplo que hay en la web (http://tratandodeentenderlo.blogspot.com/2009/08/uso-de-un-nodo-node_20.html), en el cual pude simularlo correctamente (el e-mail en mi servidor local me llego).

    Ahora quiero avanzar un poco más y poder mandar ese mismo correo al correo de nuestra empresa, y no se que hacer…..que configuración debo de realizar y en donde para poder poner la dirección del servidor???

    Exitos

  29. mauricio says:

    Hola…….help me!!! he instalado jbpm-4.2 bajo tomcat y con postgres; me ha parecido muy vacana esta nueva version de jbpm, espero que lo que menciono salaboy sobre lo inestable para un ambiente de producción pueda solucionarse pronto.

    En el momento he estado interactuando y navegando con el jbpm-console, para lo cual me ha surgidola gran duda: Los procesos de negocio que se modelan en eclipse como son publicados en la consola de jbpm?????

    el proyecto para modelar procesos de negocio en la web que viene con esta version como se accede a él……..he intentado mediante http://localhost:8080/jbpmeditor; pero no logra entrar……..si alguien me puede guiar estaria muy agradecido

    Gracias

  30. mauricio says:

    Bueno……..la segunda duda ya la he aclarado la direccion correcta para entrar al jbpmeditor es http://localhost:8080/jbpmeditor/p/explorer……….solo tengo la duda de como poder arrancar un proyecto bpm con la version 4.2

    Si alguien sabe de un ejemplo basico me interesaria…..desde como modelar el proceso en eclipse o en jbpmeditor hasta llevarlo a la ejecucion en jbpm-console

    Gracias

  31. mauricio says:

    Hola………quisiera saber si alguien me puede colaborar con este error que me esta saliendo en jbpm4.2, el proceso llama una tarea java que solo imprime HOLAMUNDO

    URL: ‘http://localhost:8080/gwt-console-server/rs/process/definition/HolaMundo-2/new_instance’
    Action: ‘org.jboss.bpm.console.client.process.StartNewInstanceAction’
    Exception: ‘class com.google.gwt.http.client.RequestException’
    HTTP 500: Unknown error

    Agradezco cualquier respuesta al respecto

    Gracias

  32. Sara says:

    hola,

    Una pregunta, cómo puedo instalar jbpm 4 en un Tomcat previamente instalado? es que necesito integrarlo con Liferay…he integrado liferay con el Tomcat instalado por jbpm4 pero no funciona. Con lo cual me gustaria probar al revés, instalar jbpm 4 en el Tomcat donde tengo Liferay….como podría hacerlo???

    Muuuuchas gracias

  33. salaboy says:

    Sara como estas?
    Mira, jBPM es un framework, por lo tanto tendrías que aclarar que exactamente quieres instalar. Yo supongo que te refieres a la consola de jBPM. En ese caso, la consola es una aplicación web normal, y deberías seguir los mismos pasos que para instalar cualquier aplicación web en tomcat. Yo te recomendaría que te bajaras las cosas por separados y trataras así.
    Con respecto a la integración con liferay tb hay mil maneras de integración, las cuales no necesariamente son a nivel de interfaz gráfica, por lo tanto te recomendaría que definieras exactamente que quieres lograr.
    Saludos

  34. Sara says:

    Hola! bien y tu??
    Pues, de momento tengo integrado liferay en el servidor tomcat que se instalo al descargar jbpm4. Pero no me despliega correctamente las aplicaciones.

    Con lo cual había pensado hacerlo al reves, instalar o integrar jbpm en el servidor tomcat donde tengo liferay original. Necesito utilizar jbpm para crear un workflow que pueda manejar desde mi portlet y automatice algunos procesos de éste. Es decir, simplemente poder acceder a ProcessEngine, que he leido que se despliega como un recurso en Tomcat al iniciarlo no?
    Pero no sé exactamente como integrar jbpm 4 en el tomcat instalado junto con liferay.

    Muchisiiimas gracias, estás sirviendo de ayuda a muchos programadores noveles, que es mi caso con el proyecto fin de carrera!

  35. salaboy says:

    Cual es el problema en concreto que estas teniendo? Ves algun error en la consola de tomcat? Ya que si las aplicaciones no se estan desplegando correctamente Los errores deberian ser reportados

  36. Sara says:

    No, lo único que pone “Deployment will start in few seconds ” pero aunque aparece en webapps desplegado, no aparece cuando lo intento añadir con liferay y add application.

    De todas formas, si quisiera hacerlo al revés….simplemente tendría que añadir algun jar d jbpm en el directorio lib de tomcat? pero no desplegaría el recurso en tomcat no?….lo siento estoy un poco perdida.

    Muchas graaacias

  37. Sara says:

    Añado al post anterior, que sé que Liferay 6 integra jbpm, pero sin embargo, integra jbpm 3, además no sé si es posible acceder al ProccessEngine de igual forma, como recurso. Pero me gustaría usar jbpm 4, e integrarlo….la versión de liferay me da igual pero la de jbpm no, ya que existen cambios importantes no?

    Muchas gracias

  38. Hola, como estas Salaboy?

    Una pregunta con respecto a este ejemplo (recuerda q soy hiper nuevo en esto).
    Como corro el programa? debo hacer ajuro un test? o hay otra forma de hacerlo?

    Saludos y disculpa el tipo de pregunta tan BASICO.

  39. salaboy says:

    Si, si haces un test de unidad con JUnit o TestNG puedes probar un proceso de negocio.
    Recuerda que mis ejemplos usaban la version 3.2.6.SP1 de jBPM, y te recomendaria que empieces a probar una mas nueva.
    Saludos

  40. hola, gracias por responder..
    Estoy usando jBPM 3.2.3 con la finalidad de aprender lo basico he ir subiendo de versiones. (debido que tengo tiempo para ello).
    Gracias nuevamente. estare probando un poco a ver. Saludos desde Venezuela

  41. aaah. se me habia olvidado preguntarte. como hago para correr ese ejemplo? osea como creo el test? se que se guarda en el src/test/java y que hereda de TestCase. Pero creo el processDefinition y al momento de usar los assert (por ejemplo el del login) de verdad que no se como hacerlo. use esto para el inicio
    assertEquals(
    “Aqui comienza la Ejecucion”,
    instance.getRootToken().getNode().getName(),
    “Inicio”);

    pero despues de ahi no tengo idea.

    Saludos

  42. salaboy says:

    Te recomendaria que leas la documentacion de esa version. Sino entiendes los conceptos basicos de jBPM se te va a hacer muy complicado usarlo.

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

    Saludos

  43. ok.
    de verdad muchas Gracias.

    Saludos

  44. franmen says:

    hola salaboy, me gustaria saber si estas pensando lanzar una nueva edicion de tu libro, ahora con jbpm5

    • salaboy says:

      si ya esta casi listo.. sale ahora en sept.. espero.. si es que todo va bien.
      Los voy a mantener al tanto por aca por el blog.. pero es un proceso lento el de escritura por lo general.
      Abrazo

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 975 other followers

%d bloggers like this: