Introducción a Activiti
0. Índice de contenidos.
- 1. Introducción.
- 2. Entorno.
- 3. Instalación.
- 4. Cargar los ejemplos.
- 5. Activiti Modeler.
- 6. Activiti Explorer.
- 7. Activiti Probe.
- 8. Conclusiones.
1. Introducción
En este tutorial vamos a introducir la herramienta que pretende pisar muy fuerte en la gestión de
flujos de trabajo (BPM – Business Process Management) : Activiti
¿Qué es Activiti?
Es una nueva plataforma (motor) ligera Open Source de BPM creada por Alfresco Software y que dispone de licencia de
Apache (Apache License 2.0).Esta plataforma se desarrollará como un proyecto independiente de los productos que ya proporciona Alfresco.
Destaca entre muchas otras cosas por ser capaz de implementar el estándar BPMN 2.0 y por dos de sus creadores Tom Baeyens
(fundador y arquitecto del proyecto jBPM (JBoss)) y Joram Barrez
Según el propio Tom Baeyens : «Activiti será un punto de inflexión en el sector BPM» (asi que si él lo dice será por algo 😉 )
Herramientas que constituyen la suite de Activiti :
- Activiti Engine : Fichero JAR que contiene la PVM (Process Virtual Machine o Máquina Virutal de procesos) y la implementación
del lenguaje de procesos BPMN - Activiti Probe : Consola de administración del sistema
- Activiti Explorer : Herramienta para la gestión de tareas / procesos
- Activiti Modeler : Herramienta de modelado de procesos BPMN (compatible con navegadores AJAX)
OJO : EL tutorial se ha realizado sobre una versión Alpha (versión 3)
2. Entorno.
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil Asus G50Vseries (Core Duo P8600 2.4GHz, 4GB RAM,320 GB HD).
- Sistema operativo: Windows Vista Ultimate.
- Mozilla Firefox 2.0.0.20
- Apache Tomcat 6.0.26
3. Instalación.
Importante : Requiere tener instalado la JDK 5+ , Ant 1.7.1+ y Tomcat 6.026 (Aunque este último lo podemos instalar desde una tarea Ant)
PASO 1 : Configurar la variable de entorno JAVA_HOME y referenciarla en el PATH
PASO 2 : Configurar la variable de entorno ANT_HOME y referenciarla en el PATH
PASO 3 : Nos conectamos a la página web http://www.activiti.org/
PASO 4 : Accedemos a la pantalla de descarga pulsando sobre «Download Activity Now»
PASO 5 : Nos descargamos la última versión en formato ZIP
PASO 6 : Descomprimimos el ZIP en un directorio al que denominaremos ACTIVITI_HOME , en mi caso C:\activiti-5.0.alpha3
Con esto ya tendriamos instalado todo lo necesario para poder utilizar esta herramienta 😉
Antes de seguir me gustaría hacer referencia a la existencia de un fichero dentro del
directorio «setup» de ACTIVITI_HOME denominado : build.xml (Donde se encuentran gran parte de las
tareas automatizadas por Ant)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 |
<project name="activiti.setup" default="demo.setup"> <property file="${user.home}/.activiti/build.properties" /> <property file="build.properties" /> <property file="build.${db}.properties" /> <property name="activiti.home" value=".." /> <property name="activiti.version" value="5.0.alpha3" /> <echo message="Activiti home = ${activiti.home}" /> <echo message="Activiti version = ${activiti.version}" /> <property name="apache.mirror.url" value="http://mirrors.enquira.co.uk/apache/" /> <property name="tomcat.home" value="${activiti.home}/apps/apache-tomcat-${tomcat.version}" /> <property name="tomcat.filename" value="apache-tomcat-${tomcat.version}.zip" /> <property name="tomcat.download.url" value="{apache.mirror.url}tomcat/tomcat-6/v${tomcat.version}/bin/${tomcat.filename}" /> <property name="activiti.modeler.download.url" value="http://activiti.org/downloads/activiti-modeler-${activiti.version}.war" /> <available property="is.activiti.modeler.available" file="${activiti.home}/setup/build/activiti-modeler-${activiti.version}.war" /> <target name="demo.setup" depends="h2.install, h2.start, db.create, tomcat.install, deploy.activiti.engine.into.tomcat, db.demo.data, deploy.activiti.rest.into.tomcat, deploy.activiti.explorer.and.probe.into.tomcat, tomcat.start, deploy.activiti.modeler.into.tomcat "/> <target name="demo.teardown" depends="tomcat.stop, db.drop, h2.stop" /> <target name="h2.install"> <mkdir dir="${activiti.home}/apps/h2" /> <copy todir="${activiti.home}/apps/h2"> <fileset dir="${activiti.home}/lib"> <include name="h2*.jar"/> </fileset> <fileset dir="files/h2" /> </copy> <chmod perm="a+x"> <fileset dir="${activiti.home}/apps/h2"> <include name="*.sh"/> </fileset> </chmod> </target> <target name="h2.start" depends="internal.taskdef.launch"> <launch dir="${activiti.home}/apps/h2" script="h2.start" msg="TCP server running on"/> </target> <target name="h2.stop" depends="internal.taskdef.launch"> <launch dir="${activiti.home}/apps/h2" script="h2.stop"/> </target> <target name="db.create" depends="internal.classpath.libs"> <sql driver="${jdbc.driver}" password="${jdbc.password}" url="${jdbc.url}" userid="${jdbc.username}" classpathref="classpath.libs"> <javaresource name="org/activiti/db/create/activiti.${db}.create.sql" classpathref="classpath.libs" /> </sql> </target> <target name="db.drop" depends="internal.classpath.libs"> <sql driver="${jdbc.driver}" password="${jdbc.password}" url="${jdbc.url}" classpathref="classpath.libs" userid="${jdbc.username}"> <transaction> <javaresource name="org/activiti/db/drop/activiti.${db}.drop.sql" classpathref="classpath.libs"/> </transaction> </sql> </target> <target name="tomcat.install"> <mkdir dir="${activiti.home}/apps" /> <property name="tomcat.distro" value="${downloads.dir}/${tomcat.filename}" /> <available property="is.tomcat.available" file="${tomcat.distro}" /> <antcall target="internal.download.tomcat" /> <unzip src="${tomcat.distro}" dest="${activiti.home}/apps"/> <available file="${user.home}/.activiti/tomcat-users.xml" property="tomcat.users.available" /> <antcall target="tomcat.copy.users" /> <antcall target="tomcat.enable.debug" /> <chmod perm="a+x" os="Linux, Mac OS X"> <fileset dir="${tomcat.home}/bin"> <include name="*.sh" /> </fileset> </chmod> </target> <target name="tomcat.copy.users" if="tomcat.users.available"> <copy file="${user.home}/.activiti/tomcat-users.xml" todir="${tomcat.home}/conf" overwrite="true"/> </target> <target name="tomcat.enable.debug" if="tomcat.enable.debug"> <echo>Enabling tomcat remote debugging ... </echo> <replace file="${tomcat.home}/bin/startup.sh"> <replacetoken><![CDATA[ # Licensed to the Apache Software Foundation (ASF) under one or more]]></replacetoken> <replacevalue><![CDATA[ JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787" # Licensed to the Apache Software Foundation (ASF) under one or more]]></replacevalue> </replace> </target> <target name="tomcat.start" depends="internal.taskdef.launch"> <launch dir="${activiti.home}/apps/apache-tomcat-${tomcat.version}/bin" script="startup" msg="Using CLASSPATH:" /> </target> <target name="tomcat.stop" depends="internal.taskdef.launch"> <launch dir="${activiti.home}/apps/apache-tomcat-${tomcat.version}/bin" script="shutdown" msg="Using CLASSPATH:"/> </target> <target name="cfg.create"> <mkdir dir="${activiti.home}/setup/build/activiti-cfg" /> <copy todir="${activiti.home}/setup/build/activiti-cfg" overwrite="true"> <filterset filtersfile="build.${db}.properties" /> <fileset dir="files/cfg.activiti/${tx}" /> </copy> <jar destfile="${activiti.home}/setup/build/activiti-cfg.jar"> <fileset dir="${activiti.home}/setup/build/activiti-cfg" /> </jar> </target> <target name="deploy.activiti.engine.into.tomcat" depends="cfg.create"> <copy todir="${tomcat.home}/lib"> <fileset dir="${activiti.home}/lib"> <include name="activiti-engine-${activiti.version}.jar"/> <include name="mybatis-*.jar"/> <include name="h2-*.jar"/> <include name="freemarker-*.jar" /> <include name="juel*.jar" /> </fileset> <fileset dir="build"> <include name="activiti-cfg.jar"/> </fileset> </copy> <!-- Need to remove el-api.jar since it has an older verson of javax.el.* than JUEL--> <delete file="${tomcat.home}/lib/el-api.jar" /> </target> <target name="db.demo.data" depends="internal.classpath.libs"> <sql driver="${jdbc.driver}" password="${jdbc.password}" url="${jdbc.url}" userid="${jdbc.username}" classpathref="classpath.libs" src="files/demo/${db}.data.sql"/> <zip destfile="${activiti.home}/setup/build/activiti-examples.bar"> <fileset dir="${activiti.home}/docs/examples/src"> <include name="org/activiti/examples/bpmn/usertask/taskassignee/TaskAssigneeTest.testTaskAssignee.bpmn20.xml"/> <include name="org/activiti/examples/bpmn/usertask/taskcandidate/TaskCandidateTest.testMixedCandidateUserAndGroup.bpmn20.xml"/> <include name="org/activiti/examples/bpmn/usertask/taskcandidate/TaskCandidateTest.testMultipleCandidateGroups.bpmn20.xml"/> <include name="org/activiti/examples/bpmn/usertasktaskcandidate/TaskCandidateTest.testMultipleCandidateUsers.bpmn20.xml"/> <include name="org/activiti/examples/bpmn/usertask/taskcandidate/TaskCandidateTest.testSingleCandidateGroup.bpmn20.xml"/> <include name="org/activiti/examples/bpmn/usertask/FinancialReportProcess.bpmn20.xml"/> <include name="org/activiti/examples/taskforms/VacationRequest.bpmn20.xml"/> <include name="org/activiti/examples/taskforms/request.form"/> <include name="org/activiti/examples/taskforms/approve.form"/> <include name="org/activiti/examples/taskforms/adjustRequest.form"/> </fileset> </zip> <taskdef name="deploy-bar" classname="org.activiti.impl.ant.DeployBarTask"> <classpath> <pathelement path="files/demo"/> <fileset dir="build"> <include name="activiti-cfg.jar"/> </fileset> <fileset dir="${activiti.home}/lib"> <include name="activiti-engine-${activiti.version}.jar"/> <include name="mybatis-*.jar"/> <include name="h2-*.jar"/> <include name="freemarker-*.jar" /> <include name="juel*.jar" /> </fileset> </classpath> </taskdef> <deploy-bar file="${activiti.home}/setup/build/activiti-examples.bar" /> </target> <target name="deploy.activiti.rest.into.tomcat" depends="build.webapp.activiti.engine.init, build.webapp.activiti.rest"> <mkdir dir="${tomcat.home}/webapps/activiti-engine-init" /> <unzip dest="${tomcat.home}/webapps/activiti-engine-init" src="${activiti.home}/setup/build/activiti-engine-init.war" /> <mkdir dir="${tomcat.home}/webapps/activiti-rest" /> <unzip dest="${tomcat.home}/webapps/activiti-rest" src="${activiti.home}/setup/build/activiti-rest.war" /> </target> <target name="build.webapp.activiti.engine.init"> <zip destfile="${activiti.home}/setup/build/activiti-engine-init.war"> <fileset dir="${activiti.home}/setup/files/webapps/activiti-engine-init.war"/> </zip> </target> <target name="build.webapp.activiti.rest"> <zip destfile="${activiti.home}/setup/build/activiti-rest.war"> <fileset dir="${activiti.home}/setup/files/webapps/activiti-rest.war"/> <fileset dir="${activiti.home}/setup/files/webapps/libs" /> </zip> </target> <target name="build.webapp.activiti.probe"> <zip destfile="${activiti.home}/setup/build/activiti-probe.war"> <fileset dir="${activiti.home}/setup/files/webapps/activiti-probe.war"/> <fileset dir="${activiti.home}/setup/files/webapps/libs" /> </zip> </target> <target name="build.webapp.activiti.explorer"> <zip destfile="${activiti.home}/setup/build/activiti-explorer.war"> <fileset dir="${activiti.home}/setup/files/webapps/activiti-explorer.war"/> <fileset dir="${activiti.home}/setup/files/webapps/libs" /> </zip> </target> <target name="deploy.activiti.explorer.and.probe.into.tomcat" depends="build.webapp.activiti.explorer, build.webapp.activiti.probe"> <mkdir dir="${tomcat.home}/webapps/activiti-explorer" /> <unzip dest="${tomcat.home}/webapps/activiti-explorer" src="${activiti.home}/setup/build/activiti-explorer.war" /> <mkdir dir="${tomcat.home}/webapps/activiti-probe" /> <unzip dest="${tomcat.home}/webapps/activiti-probe" src="${activiti.home}/setup/build/activiti-probe.war" /> </target> <target name="deploy.activiti.modeler.into.tomcat" unless="skip.deploy.activiti.modeler"> <antcall target="internal.download.activiti.modeler" /> <!-- Can't use depends for this, due to http://ant.apache.org/faq.html#stop-dependency--> <mkdir dir="${activiti.home}/apps/activiti-model-repository"/> <copy file="${activiti.home}/setup/build/activiti-modeler-${activiti.version}.war" tofile="${tomcat.home}/webapps/activiti-modeler.war"/> </target> <target name="internal.download.activiti.modeler" unless="is.activiti.modeler.available"> <echo message="This could take a while. Set the 'skip.deploy.activiti.modeler' property in user.home/.activiti/build.properties to skip this step" /> <mkdir dir="${activiti.home}/setup/build"/> <get src="${activiti.modeler.download.url}" dest="${activiti.home}/setup/build/activiti-modeler-${activiti.version}.war"/> </target> <target name="internal.download.tomcat" unless="is.tomcat.available"> <mkdir dir="${downloads.dir}" /> <get src="${tomcat.download.url}" dest="${tomcat.distro}" /> </target> <target name="internal.taskdef.launch" depends="internal.classpath.libs"> <taskdef name="launch" classname="org.activiti.impl.ant.LaunchTask" classpathref="classpath.libs" /> </target> <target name="internal.classpath.libs"> <path id="classpath.libs"> <fileset dir="${activiti.home}/lib"> <include name="*.jar" /> </fileset> </path> </target> </project> |
4. Cargar los ejemplos.
Primero de todo nos aseguraremos de la correcta configuración de las variables de entorno JAVA_HOME y ANT_HOME.
Mediante la consola nos situaremos en el directorio ACTIVITI_HOME.
Accederemos al directorio «setup» y ejecutaremos la instrucción : ant demo.setup
La ejecución de esta tarea se debe a la existencia de un fichero build.xml que contiene todas las
tareas que se pueden realizar sobre el proyecto Activiti (instalar Tomcat, desplegarlo, etc.)
Si esta configurado arrancará el Tomcat de la instalación
Si NO se ha producido ningun error , se generará un nuevo directorio en ACTIVITI_HOME denominado «apps» en mi caso C:\activiti-5.0.alpha3\apps
Configuraremos la variable de entorno de CATALINA_HOME para que apunte al Tomcat que se ha instalado anteriormente.Esto
se realiza para que la instrucción de : ant demo.setup sea capaz de arracar automáticamente el Tomcat
Una vez hecho esto trataremos de arrancar manualmente el Tomcat instalado mediante la instrucción : ant tomcat.start
Si todo se encuentra bien configurado y tras ejecutar la anterior instrucción se arrancará la ventana de Tomcat
Desde este momento podremos acceder a las siguientes aplicaciones :
- Activiti Modeler : http://localhost:8080/activiti-modeler/p/explorer
- Activiti Probe : http://localhost:8080/activiti-probe
- Activiti Explorer : http://localhost:8080/activiti-explorer
Los usuarios proporcionados por defecto para el uso de las aplicaciones de ejemplo son los siguientes :
Usuario | Password | Rol |
kermit | kermit | admin |
gonzo | gonzo | manager |
fozzie | fozzie | user |
5. Activiti Modeler.
Es la herramienta de modelado de procesos BPMN 2.0, es una versión personalizada del editor de procesos
Signavio (http://www.signavio.com).
Como característica a destacar, decir que los ficheros de proceso son almacenados por el servidor en un sistema
de archivos central (funcionalidad similar a un repositorio de modelos)
Accedemos a su URL : http://localhost:8080/activiti-modeler/p/explorer
Nota : No es necesario autenticarse para ejecutar esta herramienta
En este punto voy a tratar a enseñar a utilizarla de forma muy básica.
En primer lugar distinguir 3 áreas claves de la página web de la herramienta :
- Menu superior : Muestra la funcionalidad básica (Creación de carpetas, diagramas, editar y mover)
- Menu lateral : Muestra las carpetas y diagramas almacenadas en el Workspace de trabajo
- Área trabajo : Muestra los elementos contenidos dentro de una carpeta pudiendo acceder a los diagramas tras pulsar sobre
uno de ellos
Vamos a crear un proyecto, para ello pulsamos sobre la opción New.
Seleccionamos la opción Folder ( New -> Folder). A continuación y mediante una
ventana emergente se nos solicitará el nombre , lo identificamos como «Prueba» y
pulsaremos sobre OK.
Se generará un directorio «Prueba» como se puede comprobar en la siguiente captura de pantalla que
descuelga directamente del workspace
Seleccionamos la carpeta «Prueba» y creamos un diagrama New -> Business Process Diagram (BPMN 2.0)
A continuación se cargará una pestaña con el editor de diagramas
Las áreas que componen la página web actual son :
- Menu superior : Muestra la funcionalidad de Guardar, Copiar, Pegar, Zoom , etc
- Menu lateral : Muestra los componentes que usaremos para generar el diagrama
- Área trabajo : Muestra el área que contendrá el diagrama
Vamos a crear un ejemplo sencillo de proceso :
Como veis se trata de un pPool denominado cliente con un estado de inicio y otro de fin,
en el que se ejecutan de forma secuencial tres tareas. Para ello arrastramos los elementos
necesarios de la barra de componentes.
Guardamos nuestro primer diagrama
Cargará una ventana modal con la referencia al diagrama creado : http://localhost:8080/activiti-modeler/p/editor?id=root-directory;Prueba;Modelo_Prueba.oryx.xml
Pulsamos sobre OK
Se actualizará el área (pestaña)del workspace con el diagrama creado
5. Activiti Probe.
Es la consola de administración que controla y ejecuta Activi Engine, es decir, permite administrar una instancia
de un proceso Activiti funcionando. Esta aplicación deber de ser utilizada por las personas encargadas de
mantener la infraestructura y los sistemas.
Accedemos a su URL : http://localhost:8080/activiti-probe
Para acceder se solicitará la autenticación mediante uno de los usuarios dados de alta en el sistema.
Introducimos el usuario y password de kermit
Una vez que nos conseguimos autenticar accederemos a la siguiente pantalla, en la cual podremos
ver detalles de la versión utilizada. Si accedemos a la opción de DATABASE
Podremos tener una interfaz web que acceda a las tablas de la base de datos como ya habeis podido comprobar
en las trazas de carga de los ejemplos es H2.
Para el que no lo conozca dire que H2 es una base de datos relacional implementada totalmente con Java, por lo que
tendrá la característica principal de ser totalmente integrable con nuestras aplicaciones Java, otra de las características
a destacar es que sólo permite una única conexión a la base de datos con lo que se consigue la integridad de los datos.
Página web : http://www.h2database.com
Para más información sobre esta base de datos consultar el siguiente tutorial :
Introducción al gestor de base de datos H2
Por ejemplo si accedemos a la tabla ACT_ID_USER podremos visualizar los usuarios anteriormente mencionados
Entre otras muchas cosas servirá sobre todo para ver los procesos que se encuentran en ejecución.
5. Activiti Explorer.
Es la aplicación del usuario final para listar y ejecutar las tareas, permite acceder en tiempo de ejecución
al motor Activiti (Activiti Engine)
Accedemos a su URL : http://localhost:8080/activiti-explorer
Nos autenticamos por ejemplo con el usuario : fozzie
Si la autenticación ha sido correcta accederemos a la siguiente página
Arrancaremos un nuevo proceso «Vacation request» desde la opción : Start New Process..
Rellenaremos los datos del formulario de solicitud de vacaciones y pulsaremos sobre OK
Indica que se ha iniciado sin problemas
Para comprobar que se ha iniciado sin problemas nos autenticaremos con el usuario : gonzo
Como se puede ver dentro de las tareas aparece la tarea que se generado desde el usuario : fozzie
Pulsamos sobre Claim, accedemos a la tarea y pulsamos sobre complete
Rellenamos la solicitud de las vacaciones del usuario Víctor Madrid para aprobárselas (porque seguro que se las merece 😉 )
Se mostrará un indicador de que la tarea se ha realizado
8. Conclusiones.
Como ya podeis ver esto del BPM tiene su miga.Me gustaria dejar claro que esta herramienta se encuentra todavía en etapa un poco «baby» y en algunos momentos
es un poco inestable pero tiene muy buena pinta y seguro que dentro de un tiempo cuando las versiones sean más estables se convertirá en una herramienta de referencia.
Hola buen post,
esto ya es integrable con Alfresco share?