Archivo

Archivo para la categoría ‘jBPM’

jBPM + Reflection

Lunes, 16 de Febrero de 2009

hello

Categories: jBPM Tags: , , ,

Ejemplo Básico jBPM (y II)

Lunes, 19 de Enero de 2009

Para el ejemplo he utilizado lo mínimo , como veis no tengo ni ficheros de configuración , ni los de test ni nada… queda así mi estructura básica :

configComo veis hay un paquete basico.init donde se va a iniciar la aplicación, un paquete basico.action donde está el handle de las acciones que definamos en los workflows y un directorio almacen-jPDL donde voy a almacenar el/los workflow/s que vayamos haciendo.

Para crear un nuevo workflow… botón derecho sobre el directorio donde lo quereis crear y elegir New, Other,  process definition.

seleccprocessdefinition

El workflow es muy simple, simplemente simulará el encendido de un botón y finalizará el workflow

wfbotonDespués de dibujarlo, hay que añadir las acciones… a mi me resulta más comodo hacerlo por código, modificar el xml directamente. El contenido es el siguiente :

<?xml version=”1.0″ encoding=”UTF-8″?>

<process-definition  xmlns=”urn:jbpm.org:jpdl-3.3″  name=”Boton”>
<start-state name=”Inicio”>
<transition to=”Boton ON” name=”Pulsa Boton”>
<action name=”action” class=”basico.action.MessageActionHandler”>
<message>Pulsando Boton</message>
</action>
</transition>
</start-state>
<node name=”Boton ON”>
<action name=”action” class=”basico.action.MessageActionHandler”>
<message>Boton en posicion ON</message>
</action>
<transition to=”Fin” name=”Fin”>
<action name=”action” class=”basico.action.MessageActionHandler”>
<message>Proceso terminado</message>
</action>
</transition>
</node>
<end-state name=”Fin”></end-state>
</process-definition>

La aplicación donde cargaremos y ejecutaremos el workflow es la siguiente :

package basico.init;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;

public class Start {

public static void main(String[] args) throws FileNotFoundException {
FileInputStream fis = new FileInputStream(“almacen-jPDL/Boton/processdefinition.xml”);
ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(fis);
ProcessInstance instance = new ProcessInstance(processDefinition);
instance.signal(“Pulsa Boton”);
instance.signal(“Fin”);
}
}

Simplemente cargamos el fichero processdefinition.xml, parseamos el xml en la estructura ProcessDefinition y creamos una instancia del workflow. Con esto ya tendremos nuestro workflow preparado para recibir las ordenes.

La primera es “Pulsa Boton” que nos llevará al nodo Boton ON y ejecutará una acción… esta acción se define aqui :

package basico.action;

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

public class MessageActionHandler implements ActionHandler {

private static final long serialVersionUID = 1L;

String message;

public void execute(ExecutionContext context) throws Exception {
context.getContextInstance().setVariable(“message”, message);
System.out.println(message);
}
}

El resultado final una vez ejecutado el workflow son los siguientes mensajes en la pantalla

Pulsando Boton
Boton en posicion ON
Proceso terminado

Fácil no?

Ahora os podeis bajar el código del ejemplo aquí



Categories: jBPM Tags: , ,