jBPM y MySQL
Jbpm tiene un gestor de base de datos asociado mas o menos decente llamado Hypersonic, para hacer tus pruebas desarrollos, prototipados, probar persistencia, añadir usuarios y todo lo que se te ocurra, pero no tiene un nivel de robustez necesario para hacer una aplicacion seria, entre otras cosas las tablas las guarda en memoria solamente en la ejecucion del servidor. De todas maneras antes de hablar de hacer algo con un gestor serio como es MySQL hablare un poco de Hypersonic y de su configuración, que en parte nos ayudará un poco a comprender la configuracion de MySQL en el jBPM.
Para ver un poco que puede hacer, vamos a jugar un poco con el HSQL Database Manager, el cual esta muy bien escondidito entre los recursos del JBoss. Lo primero de todo es encender el JBoss application server que hay incorporado en la distribución de jBPM (JBPM_PATH\server\start.bat). Este ya tiene todo configurado para que su gestor de base de datos por defecto sea Hypersonic.
En la dirección http://localhost:8080/jmx-console/ podemos arracar esta aplicación, simplemente hay que pinchar en la linea que pone database = jbpmDB, service = Hypersonic en el apartado jboss.
Te llevara a una pagina con las funciones disponibles para el hypersonic, ahí le damos al botón Invoke en la linea que pone startDatabaseManager(). A los pocos segundos verás aparecer en tu pantalla la aplicación.
Es bastante sencillita y si estas familiarizado con SQL no creo que tengas ningún problema en probar cosas.
Puedes probar con un Select * from PUBLIC.JBPM_ID_GROUP para ver que grupos por defecto estan definidos en jBPM, si quieres añadir alguno nuevo y quieres acceder al jBPM-console para jugar con tu workflow favorito, acuerdate de modificar (mas bien añadir) el grupo en el archivo web.xml, dentro del paquete jbpm-console.war (el .war puedes descomprimirlo con el winrar mismo) en jbpm-jpdl-3.2.3\server\server\jbpm\deploy. Miraros ahi las etiquetas <security-role> y <security-constraint>.
Si queremos algo mas robusto, como ya dije, tenemos que ir a parar a MySQL por ejemplo (jBPM también soporta otros muchos gestores que se pueden utilizar como Oracle, DB2, MSQL…)
Lo primero es bajarse el MySQL, la versión más recomendable a fecha de hoy es el 5.0 (http://dev.mysql.com/downloads/mysql/5.0.html).
La Instalacion es bastante sencilla e intuitiva, recomiendo instalar también el MySQL Administrator que viene por separado para tener una ventana gráfica para administrar el gestor, aunque por línea de comando también puedes hacer todo, de hecho lo haré así…
La primera vez que arrancas el MySQL command Line Client te pedirá la contraseña que pusiste durante la instalación, desde aquí ya puedes crear la base de datos que usará jBPM:
Lo siguiente crear la infraestructura que utiliza jBPM, para esto usaremos el fichero jbpm.jpdl.mysql.sql (jBPM_PATH\db) donde estan contenidas todas las tablas y las relaciones necesarias. Así que las siguientes ordenes serán:
mysql>USE jbpmbackend
mysql>source JBPM_PATH\db\jbpm.jpdl.mysql.sql
Si todo va bien veras un montón de Querys OK aparecer por pantalla, cuando todo va bien no deja de ser bonito verlo
También tendrás que añadir tus usuarios, para esto si seria mejor que tuvieras el administrador de mySQL, ten en cuenta el fichero web.xml dentro de jbpm-console.war.
Una vez lista la base de datos hay que decirle al señor JBoss que queremos usar MySQL como gestor de base de datos. Al xml que configura esto se le llama JNDI Data source y se configura en JBPM_PATH\server\server\jbpm\deploy\jbpm-ds.xml (puedes crear otro archivo siempre que termine en -ds.xml)
El contenido del archivo debe quedar mas o menos de la siguiente manera:
<?xml version=”1.0″ encoding=”UTF-8″?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/jbpmbackend</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>tu_password</password>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata></local-tx-datasource>
</datasources>
Y ya que estamos modificando ficheros, vamos a cambiar un par más…
JBPM_PATH\server\server\jbpm\conf\login-config.xml
<application-policy name = “jbpm”>
<authentication>
<login-module code=”org.jboss.security.auth.spi.DatabaseServerLoginModule”
flag=”required”>
<module-option name=”dsJndiName”>java:/MySqlDS</module-option>
<module-option name=”principalsQuery”>
SELECT PASSWORD_ FROM JBPM_ID_USER WHERE NAME_=?
</module-option>
<module-option name=”rolesQuery”>
SELECT g.NAME_ ,’Roles’
FROM JBPM_ID_USER u,
JBPM_ID_MEMBERSHIP m,
JBPM_ID_GROUP g
WHERE g.TYPE_=’security-role’
AND m.GROUP_ = g.ID_
AND m.USER_ = u.ID_
AND u.NAME_=?
</module-option>
</login-module>
</authentication>
</application-policy>
Aqui insertamos el modo de autenticación del modulo de login, creo que está por defecto, sino lo insertamos, teniendo en cuenta el nombre jndi que hayamos puesto en la configuración anterior.
Y por ultimo el fichero de configuración de Hibernate contenido dentro del jbpm-console.war (en WEB-INF\classes). Hibernate es el que se encarga de la persistencia en jBPM, con lo cual es un archivo de configuración muy importante.
Debe quedar algo tal que así (solo pongo el trocillo que he modificado):
<!– hibernate dialect –>
<property name=”hibernate.dialect”>org.hibernate.dialect.MySQL5Dialect</property><!– JDBC connection properties (begin) –>
<property name=”hibernate.connection.url”>jdbc:mysql://localhost:3306/jbpmbackend</property>
<property name=”hibernate.connection.username”>root</property>
<property name=”hibernate.connection.password”>tu_password</property><!– JDBC connection properties (end) –>
<property name=”hibernate.cache.provider_class”>org.hibernate.cache.HashtableCacheProvider</property>
<!– DataSource properties (begin) == –>
<property name=”hibernate.connection.datasource”>java:/MySqlDS</property>
A continuación será necesario bajarse el driver de mySQL (creo que no te viene por defecto), se llama MySQL Connector/J y lo podemos encontrar en la siguiente dirección http://dev.mysql.com/downloads/connector/j/5.1.html, lo que necesitamos es el archivo .jar que lo copiaremos en jbpm/lib/mysql-connector-java-5.1.7-bin.jar
Y ya está , en principio debería funcionar, por lo menos a mi si me funciona correctamente. Es un poco mareo todo y hay que ser muy cuidadoso en todos los pasos pero una vez lo configuras ya funciona bien para siempre
