Manual de Introducción a JBoss jBPM

March 29, 2018 | Author: davazro | Category: Wild Fly, My Sql, Eclipse (Software), Table (Database), Java (Programming Language)


Comments



Description

MANUAL DE INTRODUCCIÓN A JBOSS jBPMJorge Roldán Barrio Índice de contenido Control de versiones.............................................................................................................................2 1. Introducción......................................................................................................................................3 2. Instalación.........................................................................................................................................4 2.1 Instalación del servidor de aplicaciones JBoss..........................................................................4 2.2 Ejecución del instalador jBPM..................................................................................................4 2.3 Instalación de un servidor de base de datos MySQL.................................................................4 2.4 Instalación del plugin para Eclipse Jboss Tools ........................................................................5 2.5 Comprobación del conjunto de la instalación............................................................................5 3. Modelado de procesos en jBPM.......................................................................................................7 3.1 Nodos.........................................................................................................................................7 3.1.1 Nodo de inicio y fin (start y end).......................................................................................7 3.1.2 Nodo de tarea (task-node)..................................................................................................7 3.1.3 Nodo de estado (state) .......................................................................................................7 3.1.4 Nodo de decisión (decision)...............................................................................................7 3.1.5 Nodos fork y join ..............................................................................................................8 3.1.6 Nodo node..........................................................................................................................8 3.2 Transiciones...............................................................................................................................8 3.3 Acciones ....................................................................................................................................8 4. Ejemplo de proceso simple...............................................................................................................9 5. Persistencia de procesos.................................................................................................................12 6. Asignación de tareas.......................................................................................................................15 7. Uso de un nodo de decisión............................................................................................................18 Conclusiones.......................................................................................................................................21 Referencias.........................................................................................................................................22 Control de versiones Fecha Autor Observaciones 10/08/09 Jorge Roldán Barrio Versión inicial del documento paralela o en función de alguna condición. actividades o tareas que componen del proceso. Existen varios sistemas de gestión de procesos de negocio. cuya principal ventaja para aquellos que quieren aprender esta tecnología es que es open-source. En el presente manual se pretende introducir al lector en el uso de esta herramienta. y define el flujo de trabajo (workflow) que rige su funcionamiento. Al conjunto de estas tareas se le conoce como proceso de negocio.Manual de introducción a JBoss jBPM 1. y uno de ellos es JBoss jBPM. Un workflow modela de forma gráfica las relaciones entre las distintas tareas.Business Process Management System) es una aplicación que gestiona estos flujos de trabajo. La gestión de procesos de negocio (BPM – Business Process Management) se encarga del modelado de los procesos de negocio. 3 de 22 . y se encarga de automatizar la secuencia de acciones. Introducción La lógica de negocio se puede definir en forma de una serie de tareas relacionadas que se deben ejecutar de forma secuencial. Un sistema de gestión de procesos de negocio (BPMS . Esta automatización permite integrar los procesos de la empresa y rediseñarlos de acuerdo a nuevas estrategias. Hypersonic es una base de datos que se almacena en memoria.1.6.Manual de introducción a JBoss jBPM 2.0. − Ejecución del instalador de jBPM. Haciendo doble clic sobre el archivo C:\JBoss\jboss-5.jar. − Comprobación del conjunto de la instalación. Si no se dispone de un servidor de base de datos MySQL instalado. Instalación Antes de empezar a trabajar con jBPM.bat se arranca el servidor con la configuración por defecto. vamos a realizar la instalación sobre MySQL.net.GA del servidor de aplicaciones Jboss de jboss. El archivo descargado es un . se ha a realizado la instalación en un equipo Windows XP que tiene instalada la versión 1.1 Instalación del servidor de aplicaciones JBoss Se debe descargar la versión 5. − Instalación del plugin para Eclipse Jboss Tools.GA. Tras esto ya se pasa a realizar la instalación. webservices.1.2.zip que se debe descomprimir en el directorio que se desee.0.GA\bin\run. Se trata de un servidor de aplicaciones completo pero sin funcionalidades de cluster. pero lo dejaremos tal y como está y pulsaremos “Next”.3 Instalación de un servidor de base de datos MySQL Lo más sencillo sería realizar la instalación utilizando la base de datos Hypersonic. todos los archivos del servidor se van encontrar en la carpeta C:\JBoss\jboss-5.2 Ejecución del instalador jBPM A continuación se debe descargar el instalador de jBPM de la dirección sourceforge. − Instalación de un servidor de base de datos MySQL. A continuación pregunta por los paquetes a instalar. En este caso.6. después la base de datos y finalmente la ruta del servidor. en nuestro caso. etc. 2. se descarga de 4 de 22 . Durante la realización de este manual. 2. se va a proceder a la instalación de dicha herramienta y de un conjunto de utilidades que facilitan el desarrollo jBPM en Eclipse llamadas jBoss Tools. Por ello. Se ejecuta el instalador de jBPM.org.0_04-b12 de la JDK de Sun.SP1. Sin embargo. Al ejecutarse este instalador permite instalar la suite de jBPM sobre distintas versiones del servidor de aplicaciones de Jboss y distintas bases de datos como Hypersonic o MySQL. Seleccionamos el archivo jbpm-installer-3. la información almacenada se va a perder cada vez que se pare el servidor. 2. Lo primero que pide es la ruta de instalación.0. usada para desarrollo. Es necesaria la instalación de un JDK en el equipo si es que no se encuentra ya instalado. Ahora se debe elegir la versión del servidor en la que estamos realizando la instalación. que en este caso va a ser C:\java\jbpm. La instalación comprende los siguientes pasos: − Instalación del servidor de aplicaciones Jboss.1. − Desplegar Jboss jBPM y seleccionar Process Project.jboss. Ahora habría que crear el esquema de base de datos que usa jBPM. se pueden recuperar los archivos que se encuentran en la carpeta C:\java\jbpm\examples\src\test\resources\simple y dejarlos en el paquete simple.sql. Drools.html.info. (X)HTML. por ejemplo. JSF. se debe ir al MySQL Administrator y crear un nuevo catálogo llamado jbpmtest y un nuevo usuario de nombre jbpmtest y sin password. Con esto se debería haber creado un proyecto de ejemplo que tiene una definición de un proceso simple en el archivo processdefinition. 2. En la ruta de instalación de jbpm (C:\java\jbpm) hay.xml y eliminando la línea que hace referencia a esta 5 de 22 . jBPM. Para ello se va a instalar Jboss Tools. se debe arreglar yendo al archivo C:\java\jbpm\src\resources\gpd\version. a través de File → Open Script se puede seleccionar el script para la creación de las tablas en MySQL. − Seleccionar la ruta el entorno de ejecución de Jboss jBPM. C:\java\jbpm\database\jbpm.5 Comprobación del conjunto de la instalación Una vez instalado Jboss Tools. Para hacer que funcione.org/tools/download. Se asigna a este usuario todos los permisos de la tabla jbpmtest. Se puede realizar la descarga de forma directa o seguir las instrucciones para realizar la actualización desde Eclipse. pulsar Finish. simple.jar.Manual de introducción a JBoss jBPM dev. Jboss Tools dispone dispone de plugins que proporcionan soporte en Eclipse para Hibernate. Si se va al MySQL Query Browser y se realiza la conexión al esquema jbpmtest. Con la ejecución de este script.mysql. entre otras cosas. Smooks. JBoss ESB o JBoss Portal. Por sencillez. Si el paquete simple estuviese vacío. entre otros. se habrá finalizado la instalación de jBPM con MySQL. Entre estas herramientas.xml del paquete simple de la carpeta src/main/jpdl. ya se puede crear un proyecto jBPM de ejemplo en Eclipse de la siguiente manera: − Ir a File → New Project. Se puede obtener Jboss Tools de la dirección http://www.4 Instalación del plugin para Eclipse Jboss Tools Para el desarrollo en jBPM es útil contar con una herramienta de modelado gráfico que simplifique las cosas. Por último. − Introsucir el nombre del proyecto. que en este caso se encuentra en C:\java\jbpm. se va a mantener la configuración por defecto para la fuente de datos que utiliza jBPM. − Asegurarse de que está habilitado el check para que cree la definición de proceso de prueba. 2.mysql.com/downloads/ el servidor MySQL Community Server y las herramientas de administración GUI Tools.jpdl. Si aparece un error en el proyecto que hace referencia a que falta la librería C:\java\jbpm\lib\activation. Una vez descargados se procede a su instalación. JBoss AS. scripts de creación del esquema usado por jBPM. que es un conjunto de herramientas para Eclipse. Seam. 6 de 22 . se puede comprobar verificando que esta definición se ha guardado en la tabla JBPM_PROCESSDEFINITION de la base de datos. Si se hace doble clic sobre el archivo processdefinition. Al hacer un “clean” del proyecto el error debería haber desaparecido. El siguiente paso a dar es desplegar esta definición de proceso en el servidor jBPM para poder trabajar con ella. Ya se dispone del entorno de trabajo configurado y una definición de proceso desplegada.Manual de introducción a JBoss jBPM librería. que deberá estar arrancado.xml se abrirá el jBPM Graphical Process Designer con la descripción gráfica del proceso de ejemplo. Para ello hay que ir a la pestaña deployment y revisar los datos en el apartado Deployment Server Settings para que coincidan con los del servidor de aplicaciones. Pulsando en Deploy Process Archive se realizará el despliegue. 3. Los criterios de la decisión se pueden especificar: 7 de 22 .1. Si es el propio proceso quien debe tomar la decisión se debe usar un nodo de decisión. Cuando la ejecución del proceso llega a un nodo de tarea.2 Nodo de tarea (task-node) Representa una o varias tareas que deben ser ejecutadas por una persona.Manual de introducción a JBoss jBPM 3. transiciones y acciones. se puede utilizar el jBPM Graphical Process Designer de Jboss Tools. Al llegar a cualquiera de ellos finaliza la ejecución de este flujo.1.4 Nodo de decisión (decision) Una decisión se puede modelar de dos formas distintas. 3. Para representar un proceso en forma gráfica. El nodo se quedará en estado de espera hasta que el usuario informe de la realización de la tarea. 3. Modelado de procesos en jBPM A continuación se va a describir los elementos que definen un proceso en jBPM. Un proceso puede tener varios nodos de fin. Los nodos de fin delimitan el final de la ejecución de un proceso. Un proceso está definido a partir de sus nodos. 3. Permanece a la espera de una señal que lance la continuación del proceso. se crea una instancia de una tarea (task) en la lista de los miembros del proceso.1. y pueden ser de los siguientes tipos: − Nodos de inicio y fin − Nodo de tarea − Nodo de estado − Nodo de decisión − Nodos fork y join − Nodos node 3. Un proceso debe tener un único nodo de inicio.1. en función de si es el proceso o una entidad externa quien debe tomar la decisión.3 Nodo de estado (state) Es un estado de espera que no requiere de la ejecución de ninguna tarea. a los que puede llegar en función de las condiciones de ejecución del proceso.1 Nodos Definen los pasos que que se tienen que seguir durante la ejecución de un proceso.1 Nodo de inicio y fin (start y end) Los nodos de inicio delimitan el comienzo de la ejecución de un proceso. 1. 8 de 22 . Si es una entidad externa quien debe tomar la decisión se deberían usar varias transiciones que salgan de un estado de espera.1. 3. Pueden tener condiciones de guarda las restringen. 3. 3. Los nodos recorreran sus transiciones examinando las condiciones hasta encontrar la primera transición que cumpla las condiciones. Contienen un subelemento Action que se ejecuta cuando el proceso llega al nodo. mediante beanshell scripts que devuelven un boolean. − Mediante una clase DecissionHandler que devuelva la transición a seguir. Estas acciones no tienen influencia sobre el flujo de control del proceso.3 Acciones Una acción se ejecuta cuando ocurren determinados eventos en la ejecución de un proceso.2 Transiciones Indican el camino a seguir desde un nodo a otro dentro del proceso.5 Nodos fork y join Un nodo fork divide la ejecución de un proceso en múltiples ejecuciones concurrentes. A este estado de espera se le indicará cual es la transición a seguir cuando se relance la ejecución del proceso. Principalmente cuando se entra o se sale de un nodo y cuando se toma una transición. 3. Los nodos join recogen todas estas ejecuciones concurrentes antes de continuar con la ejecución del proceso.Manual de introducción a JBoss jBPM − Añadiendo condiciones a las transiciones.6 Nodo node Permite definir el comportamiento de nuestros propios nodos. graph. − Nodo first: Nodo intermedio de estado.def.jbpm.jbpm. En el artículo de instalación de Jboss Tools se creó un proyecto Simple que definía en proceso simple en jBPM. En primer lugar hay que ir a la definición de dicho proceso. Las dos transiciones tienen asociadas una acción definida a través del manejador MessageActionHandler: package com. import org.ActionHandler.exe. public class MessageActionHandler implements ActionHandler { private static final long serialVersionUID = 1L.Manual de introducción a JBoss jBPM 4. Ejemplo de proceso simple Una vez realizada la instalación de la herramienta jBPM y de haber visto los componentes de un proceso de negocio. − Transición to_end: Transición que va del nodo first al nodo end. import org. − Transición to_state: Transición que lleva del nodo start al nodo first.graph.ExecutionContext.sample. /** * The message member gets its value from the configuration in the 9 de 22 . − Nodo end: Nodo final del proceso. Se va a estudiar este ejemplo para empezar a comprender cómo trabajar con jBPM. se va a proceder a presentar un ejemplo de un proceso en jBPM. que se encuentra en el archivo processdefinition.xml del paquete simple del directorio src/main/jpdl.action. Al hacer doble clic sobre este archivo se puede ver este proceso modelado de forma gráfica en el jBPM Graphical Process Designer: El proceso simple está compuesto de tres nodos y dos transiciones: − Nodo start: Nodo inicial. graph. "first").xml").xml file.exe. processDefinition).getVariable("message")).getNode().def.getNode(). assertNull( "Message variable should not exist yet". instance. import org.getContextInstance().jbpm. */ public void execute(ExecutionContext context) throws Exception { context.ProcessDefinition. ProcessInstance instance = new ProcessInstance(processDefinition).getRootToken(). import junit. instance.getName().jbpm.TestCase. cuyo valor está definido dentro de las propiedades de la acción. // The configured action should execute and the appropriate message // should appear in the message process variable. The process variable is created if it doesn't exist yet.ProcessInstance.graph. */ String message. /** * A message process variable is assigned the value of the message * member. parseXmlResource("simple/processdefinition. instance.getContextInstance(). assertNotNull("Definition should not be null". assertEquals( "Instance is in start state".framework.setVariable("message". } } Esta acción guarda en el contexto de la instancia de proceso la variable 'message'. The value is injected directly by the engine. assertEquals( "Instance is in first state". message).signal(). Vamos a probar la ejecución de este proceso mediante la clase de test SimpleProcessTest: package com.sample. // Move the process instance from its start state to the first state. import org.getName(). // Create an instance of the process definition. assertEquals( 10 de 22 .Manual de introducción a JBoss jBPM * processdefinition. instance. "start"). public class SimpleProcessTest extends TestCase { public void testSimpleProcess() throws Exception { // Extract a process definition from the processdefinition.getRootToken(). ProcessDefinition processDefinition = ProcessDefinition. } } instance. "end").getVariable("message"). assertEquals( "Instance is in end state". que puede ser creado de forma gráfica.xml. En este ejemplo se ha visto cómo crear instancias de un proceso a partir de un archivo de definición de proceso. // Move the process instance to the end state. assertTrue("Instance has ended". 11 de 22 . instance. "Going to the first state!").getName(). También se ha visto cómo se realiza la ejecución de un proceso.hasEnded()).Manual de introducción a JBoss jBPM "Message variable contains message".getContextInstance(). instance. Por último.getContextInstance().signal(). se envía otra señal a la instancia para que vaya al estado final y termine la ejecución del proceso. instance. assertEquals( "Message variable is changed".getNode(). A continuación crea un nueva instancia del proceso simple y después manda una señal a la instancia creada para que pase al primer estado. Lo primero que hace este método de prueba es leer la definición del proceso del archivo simple/processdefinition. The configured action // should execute again.getRootToken(). "About to finish!"). The message variable contains a new value.getVariable("message"). instance. mysql. se debe cerrar el contexto: // Se cierra el contexto jBPM jbpmContext.hbm2ddl.auto">create</property> También hay que añadir la librería del conector de MySQL que contiene el driver JDBC a la base de datos.createJbpmContext(). Cuando se hayan finalizado estas operaciones. en la carpeta src/main/config se pueden encontrar varios ejemplos de configuración para las distintas bases de datos soportadas.Manual de introducción a JBoss jBPM 5.cfg.xml y hacer un cambio para que no se vuelva a crear el esquema de la base de datos cada vez que se cargue la configuración. Persistencia de procesos En el apartado anterior se ha visto cómo ir recorriendo el flujo de ejecución de una instancia de un proceso de forma local. Lo primero es cargar la configuración de jBPM. Para la persistencia en bases de datos. Para poder realizar operaciones de persistencia se debe crear un contexto jBPM: // Se crea un contexto jBPM JbpmContext jbpmContext = jbpmConfiguration.getInstance(). Sin embargo. Una vez hecho esto. Por tanto. que va a ser comentar la línea: <property name="hibernate.xml.xml por el de hibernate. se pueden realizar operaciones de persistencia.config.config. El estado de esta ejecución se guarda en memoria y cuando esta termina no queda rastro de ella. jBPM utiliza Hibernate. que se guarda en el archivo jbpm.close(). sino que haya ocasiones en que se mantenga a la espera de que ocurra algún evento o de que algún actor realice una tarea antes de reanudar la ejecución. toda la información relativa a la ejecución del proceso debe persistir en una base de datos de la que poder recuperar cuando sea preciso. Como ejemplo vamos a crear una instancia del proceso simple: // Se obtiene un GraphSession que prmite realizar operaciones adicionales // sobre los grafos de procesos 12 de 22 . lo normal es que un proceso no se ejecute de esta forma.config. lo primero que hay que hacer es realizar la configuración adecuada para la base de datos en el archivo hibernate. Hay que sustituir el contenido del archivo hibernate. Dentro del proyecto que hemos creado. Una vez creado este contexto.xml. Por ello. se va a ver cómo se maneja la persistencia en jBPM. de la siguiente manera: // Se carga la configuración de jBPM JbpmConfiguration jbpmConfiguration = JbpmConfiguration. println("Se ha creado la instancia: " + processInstance.findLatestProcessDefinition("simple").createJbpmContext().getId() + " del proceso: " + processDefinition.getInstance(). 13 de 22 .getId()). Para ello.getGraphSession(). // Se buscan las instancias del proceso simple List processInstances = graphSession. } Ahora se puede revisar la base de datos y comprobar la creación de esta instancia en la tabla JBPM_PROCESSINSTANCE.findLatestProcessDefinition("simple"). // Se crea un contexto jBPM JbpmContext jbpmContext = jbpmConfiguration.getGraphSession(). De esta manera. // Busca la última versión del proceso simple ProcessDefinition processDefinition = graphSession.findProcessInstances(processDefinition. System. En el campo NODE de esta tabla se indica en que nodo del flujo se encuentra la ejecución de este proceso. También se puede ver en la tabla JBPM_TOKEN el token de ejecucion de esta instancia.Manual de introducción a JBoss jBPM GraphSession graphSession = jbpmContext. se ha creado una instancia del proceso simple que está preparada para su ejecución. // Se crea una nueva instancia del proceso simple ProcessInstance processInstance = new ProcessInstance(processDefinition). for (Object object : processInstances) { processInstance = (ProcessInstance)object.getName()). un usuario debería recuperar esta instancia del contexto de la siguiente forma: // Se carga la configuración de jBPM JbpmConfiguration jbpmConfiguration = JbpmConfiguration.out. // Se obtiene un GraphSession que permite realizar operaciones adicionales // sobre los grafos de procesos GraphSession graphSession = jbpmContext. // Busca la última versión del proceso simple ProcessDefinition processDefinition = graphSession. // Se arranca la ejecución de esta instancia processInstance. for (Object object : processInstances) { ProcessInstance processInstance = (ProcessInstance)object.signal().getId()). } else { System.getId()).out.println( "Se va a enviar una señal a la instancia: " + processInstance. } } Con esto se ha visto cómo usar la persistencia de jBPM para crear una instancia de un proceso y posteriormente recuperar esta instancia y continuar con su ejecución. 14 de 22 .hasEnded()) { System.out.getId()).println( "Ya ha terminado la instancia: " + processInstance.findProcessInstances(processDefinition.getId()). // Se comprueba si esta instancia ha concluido if(!processInstance.println( "Se ha enviado una señal a la instancia: " + processInstance.out. System.Manual de introducción a JBoss jBPM // Se buscan las instancias del proceso simple List processInstances = graphSession. Para crear una tarea en un nodo de tarea. − Pooled Actor: Se le indica una secuencia de actorId separados por comas.Manual de introducción a JBoss jBPM 6. Esta tarea al ser creada no es asignada a la lista de ningún actor. esta tarea pasa inmediatamente a la lista de actividades pendientes de este actor. Cuando se crea la tarea al entrar al nodo de tarea. − Swimlane: Un swimlane o carril sirve para definir una asignación que es la misma para varias tareas de un proceso. Le damos nombre a esta tarea. un nodo de tarea representa una o varias tareas que deben ser ejecutadas por una persona. un nodo de tarea y un nodo final: Como ya se ha mencionado anteriormente. vamos a las propiedades de este nodo. en este caso algoquehacer y descripción si queremos. Esto permite a los actores responsables de su realización recoger las tareas pendientes que existan en un determinado momento para completar su ejecución. Cuando la ejecución del proceso llega a un nodo de tarea. se crea una instancia de una tarea (task) en la lista de los miembros del workflow. Asignación de tareas A continuación se va a exponer cómo crear tareas en jBPM y asignar qué actor o actores las deben realizar. − Expression: Se le indica una expresión de asignación evaluada por el componente de 15 de 22 . En primer lugar vamos a crear una definición de proceso llamada tarea formada por un nodo inicial. En el apartado Assignment. vemos que hay varias formas de asignar un tarea: − Actor: Se le indica el actorId. Un actor la debe recuperar de la lista de tareas pendientes para el pool de actores y asignarsela para que forme parte de su lista de tareas. En la tabla de tareas pulsamos el botón derecho del ratón y seleccionamos New Task. que es un String que identifica el actor responsable de la tarea. El nodo se quedará en estado de espera hasta que el usuario informe de la realización de la tarea. En el primer paso vamos a crear una instancia de este proceso tarea y a iniciar su ejecución.createJbpmContext(). // Se crea un contexto jBPM JbpmContext jbpmContext = jbpmConfiguration. Esto es algo que ya hemos visto: // Se carga la configuración de jBPM JbpmConfiguration jbpmConfiguration = JbpmConfiguration. al que vamos a llamar user1: Después de desplegar este proceso en el servidor. // Se crea una nueva instancia del proceso simple ProcessInstance processInstance = new ProcessInstance(processDefinition). Para mantener el ejemplo sencillo vamos a realizar la asignación de la tarea a un actor. vamos a realizar una prueba en dos pasos.findLatestProcessDefinition("tarea"). grupo o rol. Permite realizar asignaciones en función del usuario.Manual de introducción a JBoss jBPM identidad de jBPM. 16 de 22 .getGraphSession(). // Busca la última versión del proceso simple ProcessDefinition processDefinition = graphSession. que será la que realice la asignación de la tarea. // Se obtiene un GraphSession que permite realizar operaciones adicionales // sobre los grafos de procesos GraphSession graphSession = jbpmContext. − Handler: Se le indica una clase manejadora. // Se pasa al nodo tarea processInstance.getInstance().signal(). 17 de 22 . Vamos a recuperar los procesos pendientes para el usuario user1 gracias a la clase TaskManagementSession y a informar de la finalización de esta tarea: // Se carga la configuración de jBPM JbpmConfiguration jbpmConfiguration = JbpmConfiguration.findTaskInstances(actorId).end().out. String actorId = "user1". es decir. for (TaskInstance taskInstance : instances) { System.close(). no esta marcada como terminada.getName() + taskInstance. List instances = tms. TaskMgmtSession tms = jbpmContext.getTaskMgmtSession().close(). Se puede ver en la tabla JBPM_TASKINSTANCES de la base de datos una instancia de la tarea algoquehacer asignada al usuario user1 pendiente de ser ejecutada. // Se informa de la finalización de la tarea taskInstance. // Se crea un contexto jBPM JbpmContext jbpmContext = jbpmConfiguration. Se ha visto como asignar una tarea a un actor y de como recuperar las tareas pendientes de un actor en un proceso posterior para llevar a cabo su ejecución.getId()).getInstance().Manual de introducción a JBoss jBPM // Se cierra el contexto jBPM jbpmContext. } // Se cierra el contexto jBPM jbpmContext.createJbpmContext().println( "Tarea pendiente de ejecutar por " + actorId +":" + taskInstance. Los criterios de la decisión se pueden especificar de las siguientes formas: − Añadiendo condiciones a las transiciones o beanshell scripts que devuelven un boolean. } } 18 de 22 . − Mediante una subclase de DecissionHandler que devuelve la transición a seguir. @Override public void execute(ExecutionContext executionContext) throws Exception { executionContext. Uso de un nodo de decisión Un nodo de decisión se usa para modelar un punto en el flujo en que el propio proceso toma una decisión sobre el camino a seguir. valor). Los nodos recorreran sus transiciones examinando las condiciones hasta encontrar la primera transición que cumpla las condiciones.setVariable("valor". A continuación se va a crear como ejemplo un proceso que contiene un nodo de decisión que utiliza una subclase de DecissionHandler para conocer la transición a seguir. que se encarga de introducir en el contexto de ejecución una variable valor: public class ValorAction implements ActionHandler { public String valor. En la siguiente imagen se puede ver el proceso de ejemplo: Este proceso empieza en un nodo de inicio del que se sale mediante la transición comenzar.getContextInstance().Manual de introducción a JBoss jBPM 7. Esta transición tiene una acción crearvalor manejada por la clase ValorAction. getVariable("valor").out. } } } Por último. } @Override public void execute(ExecutionContext executionContext) throws Exception { System. por la transición terminar2: public class Decisor implements DecisionHandler { public Decisor(String info) { super(). } @Override public String decide(ExecutionContext executionContext) throws Exception { String valor = (String)executionContext.println( "Se sale del flujo por el nodo: " + executionContext.getName()). if(valor != null) { return "terminar1". } } 19 de 22 . manejada por la clase MostrarMensajeAction: public class MostrarMensajeAction implements ActionHandler { public MostrarMensajeAction(String info) { super().getNode(). } else { return "terminar2". al llegar a cualquiera de los nodos finales se lanza una acción que muestra en que nodo está terminando la ejecución del flujo.getContextInstance().Manual de introducción a JBoss jBPM A continuación se llega a un nodo de decision manejado por una clase Decisor. que comprueba si en el contexto de ejecución existe una variable valor con un valor asignado. Si existe esta variable se abandona el nodo por la transición terminar1 y si no. xml.getVariable("valor")). // Mueve la instancia de proceso desde el estado inicial al primer estado. instance.Manual de introducción a JBoss jBPM Se puede ejecutar este proceso mediante una clase de test como esta: public void testSimpleProcess() throws Exception { // Extraer la definicion de proceso del archivo processdefinition. En caso contrario se termina en el nodo final2.getRootToken(). assertEquals( "La instancia está en el estado inicial". ProcessInstance instance = new ProcessInstance(processDefinition).signal().getContextInstance(). por la consola se verá un mensaje que indica que ha terminado en el nodo final1.parseXmlResource("decision/processdefinition. assertNull( "La variable 'valor' no debe existir todavía". // Create an instance of the process definition. assertNotNull("La definicion debe no ser nula". ProcessDefinition processDefinition = ProcessDefinition.getNode(). instance.xml"). } Si en la configuración se ha introducido un valor para la variable valor. instance. 20 de 22 . "inicio"). processDefinition).getName(). 21 de 22 .Manual de introducción a JBoss jBPM Conclusiones El presente manual está siendo realizado durante el aprendizaje de la herramienta [email protected]) o como comentarios a través de mi blog. Aunque este manual contiene suficiente información para ayudar a los usuarios inexpertos en su introducción a jBPM. Para ello agradecería que todo aquel lector que tenga alguna duda o sugerencia sobre el material presentado en este documento me la hiciese llegar por correo electrónico (jorge.com). también relacionados con el mundo Java. No es más que la compilación de los pequeños artículos que estoy escribiendo en mi blog (http://tratandodeentenderlo. Estoy tratando de plasmar en ellos la experiencia adquirida durante el aprendizaje de jBPM. aunque mi intención es escribir sobre otros temas de interés. es mi intención seguir ampliándolo. 3 − Bussines Process Management with Jboss jBPM (Matt Cumberlidge.Manual de introducción a JBoss jBPM Referencias − jBPM jPDL User Guide 3. Packt Publishing) 22 de 22 .2.
Copyright © 2024 DOKUMEN.SITE Inc.