Jugando con jBPM #5 – Node

En este post vamos a analizar el Nodo tipo Node, que es el mas genérico de los nodos en jPDL.
Vamos a analizar el código de la clase node para encontrar las características mas importantes, con el fin de empezar a conocer el comportamiento del mismo y el comportamiento base para todos los demas tipos de nodos ya que todos extienden de el.

Vamos a empezar por lo primero. La definicion de la clase Node

public class Node extends GraphElement implements Parsable

Esto es importante ya que todas las subclases de Node estaran regidas por esta herencia. Si vemos la interfaz Parsable propone lo siguiente:

public interface Parsable {
  void read(Element element, JpdlXmlReader jpdlReader);
  void write(Element element);
}

Como podemos ver se definen dos metodos que Node va a tener que implementar read y write, estos metodos seran los encargados de saber leer jPDL y escribir jPDL en caso de ser necesario. Esto sirve para que el framework pueda leer jPDL(que es un xml) y pueda levantarlo a objetos y por otro lado que nosotros podamos dibujar con GPD (Graphic Process Designer) y de objetos pueda escribir el jPDL correspondiente

Y la clase de la cual extiende Node llamada GraphElement es la encargada de definir en si el comportamiento de los nodos en cuanto a Eventos, Excepciones, todos los metodos para poder navegar en la jerarquia de GraphElement (y asi obtener sus hijos y sus padres), y ultimo pero no menos importante nos da la implementacion del metodo executeAction, que es el metodo que se encarga de ejecutar la siguiente linea:

action.execute(executionContext);

Continuamos viendo la estructura principal de su metodo execute:

public void execute(ExecutionContext executionContext) {
    if (action!=null) {
      try {
           executeAction(action, executionContext);
      } catch ...
    } else {
      leave(executionContext);
    }
}

Como podemos ver, esta implementación base de el método execute nos lleva a la conclusión de que los nodos de tipos Node, no se comportan como wait states y continúan el flujo de ejecución si no especificamos ninguna acción dentro de la definición del nodo. En caso de que especifiquemos una acción, esta pasa a ser la responsable de continuar con la ejecucion del flujo del proceso. Por esta razón en la acción debemos decidir si el comportamiento de la acción es síncrono, el ActionHandler va a tener que llamar al metodo context.leaveNode() para continuar la ejecución del proceso. En el caso de que tengamos un comportamiento asíncrono, el ActionHandler ejecutara la lógica asignada y se quedara en un wait state esperando que alguien externo continué la ejecución del proceso.

Como veiamos en el metodo execute, si hemos asignado una accion, cuando se ejecute el metodo execute esta accion se ejecutara por consecuencia. Esta accion es de tipo Action, la cual implementa ActionHandler. Por lo tanto la clase delegada que nosotros tenemos que implementar y especificar explicitamente en jPDL debe implementar la interfaz ActionHandler.

Un ejemplo de jPDL del nodo tipo Node:

<node name="Node">
        <action name="Node Action " class="com.wordpress.salaboy.handlers.NodeActionHandler.java"></action>
        <transition to="next node"></transition>
</node>

Espero que esto haya servido como pantallaso del nodo Node, seguramente seguire agregando informacion sobre este nodo a medida que vaya considerando necesario.

Advertisements

12 thoughts on “Jugando con jBPM #5 – Node”

  1. Bueno me alegro que estes sacando varios post seguidos ya que me esta siendo de mucha ayuda este blog, ya le comente a varios companieros acerca del blog por que asi como yo ellos estaban buscando una buena explicacion de JBPM

    Like

    1. Hola gracias por tu comentario. Que version de jBPM estas usando? Que exactamente quieres eliminar? ya que una definicion de procesos de negocio puede tener varias versiones, Para que quieres eliminarla?
      Saludos

      Like

      1. Hola:
        Gracias por contestar, uso la versión 3.2.3.
        He subido algunos workflows que ya no voy a usar pues eran sólo de prueba, ahora quiero eliminar esos datos “basura” que hay en las tablas.

        Like

  2. Hola Salaboy:
    He encontrado un método que pienso debe servir para lo que quiero:
    objeto. getGraphSession().deleteProcessDefinition()
    En estos días lo probaré.

    Like

  3. hola, disculpen q pregunte en este hilo, pero no encontré otro en español en esta página y estoy trancado con jbmp 5.2, les cuento: lo q hicimos nosotros fue tomar el archivo ant para la instalacion de jbpm 5.2 sobre jboss 7, pero como tenemos jboss 5 en el trabajo, hicimos varios cambios al ant, indicando q usamos jboss 5. Luego de correr el ant, se generan los .war de jbpm 5 en nuestra carpeta server/default/deploy, también cambiamos los data sources para q jbpm utilizara Oracle. Se ejecuta correctamente el ant y generan los 4 .war de jbmp: designer.war,
    drools-guvnor.war,
    jbpm-gwt-console.war,
    jbpm-gwt-console-server.war

    El problema q tenemos es que al levantar el servidor,tenemos errores porque se solapan clases del servidor con clases de esos .wars

    slf4j-jboss-logging.jar:loader=jbpm-gwt-console-server.war
    java2ParentDelegation=false

    dónde slf4j-jboss-logging.jar es el jar en conficto
    esto tomando en cuenta lo q decia un artículo en internet, pero no nos convence mucho
    esta solución, y no está funcionando, en algunos articulos utilizan :archive en lugar de :loader, si alguien por favor tiene claro la sintaxis mucho mejor

    cualquier duda a las órdenes.
    gracias

    Like

  4. agregamos al jboss-web.xml del jbpm-gwt-console-server.war
    lo siguiente (por algun motivo no se ve en mi comentario anterior)
    class-loading java2ClassLoadingCompliance=”false”
    loader-repository slf4j-jboss-logging.jar:loader=jbpm-gwt-console-server.war
    loader-repository-config java2ParentDelegation=false /loader-repository-config
    /loader-repository
    /class-loading

    faltan los “” de los tags (no se ven al escribir mi comentario)

    Like

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