Ir al contenido principal

Configurar jBPM para obtener Grupos y Usuarios desde nuestra Base de Datos

jBPM en su serie 6.x viene configurado para usar su propio esquema de Roles (Grupos) y Usuarios, pero un requerimiento muy frecuente es permitir que el jBPM busque u obtenga los Grupos y Usuarios desde nuestros medios personalizados, usualmente una Base de Datos.

Escribo este artículo debido a que recientemente me encontraba trabajando en un par de proyectos de BPM con jBPM 6.3, y era requisito obtener los Usuarios y Grupos desde una fuente relacional, razón por la cual me toco apoyar al arquitecto de turno en cómo realizar esa tarea.

Ya en un artículo anterior aprendimos a configurar el jBPM para que haga uso de nuestra propia Base de Datos favorita, Postgresql, para la persistencia de sus datos. Hoy vamos a seguir con ese ejemplo como base para aprovechar el ambiente que se definió en esa oportunidad.

Así que sin mas preámbulos manos a las sobras…






1.- Crear nuestra estructura de tablas.

O usar la que ya tenemos. En todo caso en este ejemplo usaremos la base de datos denominada usersrolesbd con la siguiente definición de tablas:


Tabla
users
Columna
Tipo
Valor por omisión
login_name * PK
Character(20)


user_fullname *
Character(80)


user_lang
Character(5)
en-UK
user_email
Character(120)


user_isgroup
boolean
false

Tabla de Usuarios (y Grupo o Rol)


Tabla
usersbyrol
Columna
Tipo
Valor por omisión
Id * PK
Autogenerada


rol_name * FK (users)
Character(20)


user_name * FK (users)
Character(20)



Tabla de Usuarios por Rol


2.- Generar scripts de Consultas y cargar datos base de Administrador.

2.1.- Haremos uso de las siguientes consultas de SQL :

Propiedad
SQL
Descripción
db.user.query
SELECT login_name FROM users WHERE login_name = ?
Consulta sí existe un usuario dado su nombre de usuario o login
db.roles.query
SELECT login_name FROM users WHERE login_name = ? AND user_isgroup = ‘true’
Consulta sí existe el Grupo o Rol dado su nombre de grupo
db.user.roles.query
SELECT rol_name FROM usersbyrol WHERE user_name = ?
Consulta los Roles para un nombre de usuario dado
db.name.query
SELECT user_fullname FROM users WHERE login_name = ?
Consulta el nombre de un usuario dado su login
db.email.query
SELECT user_email FROM users WHERE login_name = ?
Consulta el email de un usuario o grupo dado su login o nombre de usuario
db.lang.query
SELECT user_lang FROM users WHERE login_name = ?
Consulta el Lenguaje para un usuario dado su login
db.has.email.query
SELECT user_email FROM users WHERE login_name = ?
Consulta sí el Grupo tiene email
db.group.mem.query
SELECT user_name FROM usersbyrol WHERE rol_name = ?
Consulta los usuarios para un Grupo o Rol dado


2.2.- Crear datos bases.

En la tabla users agregar los siguientes registros:

Columna
Valor
login_name * PK
admin
user_fullname *
Administrador Admin
user_lang
en-UK
user_email
maildeladmin@correo.com
user_isgroup
false

Columna
Valor
login_name * PK
Administrator
user_fullname *
Administrador Administrator
user_lang
en-UK
user_email
maildeladministrator@correo.com
user_isgroup
false

Columna
Valor
login_name * PK
Administrators
user_fullname *
Grupo Administrador
user_lang
en-UK
user_email


user_isgroup
true


Puede crear otros usuarios y grupos de su elección. Pero no debe olvidar los antes indicados.


En la tabla usersbyrol agregar los siguientes registros:

Columna
Valor
rol_name * FK (users)
Administrators
user_name * FK (users)
admin

Columna
Valor
rol_name * FK (users)
Administrators
user_name * FK (users)
Administrator

Puede relacionar otros usuarios y grupos. Pero no debe olvidar loa antes indicados.


3.- Crear DataSource de acceso en servidor Wildfly.

Una vez que tenemos definida nuestra base de datos, su estructura y los scripts de sql respectivos, procedemos a crear el DataSource correspondiente para poder acceder a nuestra base de datos mediante su JNDI pertinente.

Para ello haremos lo siguiente:


3.1.- Abrir la consola de administración del servidor.
Accedemos a la ruta en la que se encuentre nuestro servidor de jBPM, por ejemplo



3.2.- Ingresar las credenciales del usuario administrador en caso de que sean solicitadas.
Si aun no tiene un usuario administrador creado, al abrir la url antes mencionada, será redireccionado a una página donde se le señala esta circunstancia, y se le invita a ejecutar un comando adecuado “add-user.bat / add-user.sh” para incorporar el usuario de management adecuado.




3.3.- Ir a la sección Create datasource.

Hacemos click o pinchamos en el enlace para crear datasources.



3.4.- Hacer click o pinchar en el botón “add”.

Esto nos lleva a la ventana donde debemos ingresar los datos para nuestro datasource.


3.5.- Ingresar datos de identificación del datasource.

Hay que poner especial atención a ingresar la JNDI en el formato adecuado.
Se acostumbra que sea java:jboss/datasources/DATASOURCE_NAME.



Datos:


Name = users_rolesDS
JNDI = java:jboss/datasources/users_rolesDS

Ingresar datos y pulsar “next” o siguiente.


3.6.- Seleccionamos el Driver adecuado.

Se nos presenta la lista de drivers declarados, de no existir aún el nuestro lo definimos o bien detectándolo o especificando el driver.



En nuestro ejemplo usamos el driver existente para nuestra conexión a Postgresql del ejemplo anterior.
Seleccionar el driver adecuado y pulsar “next” o siguiente.


3.7.- Ingresar datos para la conexión jdbc.

En esta sección se solicitan los datos adecuados para realizar el acceso a la base de datos y probar la conexión respectiva.



Datos:


Connection URL = jdbc:postgresql://localhost:5432/usersrolesdb
Username = jbpmuser
Password = ******** (el que corresponda)

Hacer click o pinchar en “Test connection”. En caso de error revisar nuestros datos de acceso y url de conexión.

Cuando todo este correcto pulsar “Done”.


3.8.- Activar nuestro datasource.

Pare ellos sólo debemos seleccionar nuestro datasource recien creado en la lista de datasources disponibles, y hacer click o pinchar en el botón “enable”.


4.- Preparar archivos de configuración.

En un editor de texto de su preferencia cree y edite los siguientes archivos con el contenido indicado.


4.1.- Archivo jbpm.usergroup.callback.properties:


db.ds.jndi.name=java:jboss/datasources/users_rolesDS
db.user.query=SELECT login_name FROM users WHERE login_name = ?
db.roles.query=SELECT login_name FROM users WHERE login_name = ? AND user_isgroup = ‘true’
db.user.roles.query=SELECT rol_name FROM usersbyrol WHERE user_name = ?

# Note que las propiedades y los valores de las Query son las que ya habíamos definido con anterioridad.

# Este archivo se usa para definir como obtener los roles para un usuario dado


4.2.- Archivo jbpm.user.info.properties:


db.ds.jndi.name=ava:jboss/datasources/users_rolesDS
db.name.query=SELECT user_fullname FROM users WHERE login_name = ?
db.email.query=SELECT user_email FROM users WHERE login_name = ?
db.lang.query=SELECT user_lang FROM users WHERE login_name = ?
db.has.email.query=SELECT user_email FROM users WHERE login_name = ?
db.group.mem.query=SELECT user_name FROM usersbyrol WHERE rol_name = ?

# Note que las propiedades y los valores de las Query son las que ya habíamos definido con anterioridad.

# Este archivo se usa para definir como obtener la información extra para un usuario dado.


5.- Configurar archivo .war.

El siguiente paso consiste en modificar nuestro archivo .war correspondiente al jbpm_console para que admita la configuración de usuarios y roles desde nuestra base de datos.

Para ello tenemos que ir al directorio de instalación del jBPM instaler, JBPM_INSTALLER_HOME, e ir al direcorio /lib. Allí encontraremos el archivo el archivo .war correspondiente al jbpm-console adecuado a nuestra versión. En este ejemplo usamos la versión 6.3, por lo que el .war que debemos usar es el jbpm-console-6.3.0.Final-wildfly-8.1.0.Final.war.

Una vez ubicado ese .war, lo abrimos con alguna herramienta adecuada para manipular archivos .zip (winzip. 7Zip, winrar, gestor de archivadores, etc).


5.1.- Configurar el archivo beans.xml.

Dentro del .war ir al directorio /WEB-INF/ y abrir el archivo beans.xml.

Ubicar la linea que dice:


<class>
    org.jbpm.services.cdi.producer.JAASUserGroupInfoProducer
</class>

Nota: Esto indica que se usa la implementación de JAAS por omisión.

Y reemplazarla por:


<class>
    org.jbpm.services.cdi.producer.DBUserGroupInfoProducer
</class>

Lo que indica al jBPM que queremos usar la implementación para Grupos y Usuarios por Base de Datos que viene con la herramienta.

Recuerde guardar los cambios realizados al archivo.


5.2.- Configurar archivos .properties.

Dentro del .war ir al directorio /WEB-INF/classes/. Seguidamente ubicamos nuestros archivos:


jbpm.user.info.properties
jbpm.usergroup.callback.properties
userinfo.properties

Los cuales ya teníamos listos desde los pasos anteriores. Seleccionamos esos archivos y los arrastramos y soltamos en el directorio /WEB-INF/classes/ del .war del jbpm-console. Sí nos pregunta sí deseamos reemplazar algún archivo existente respondemos que si a todo.


5.3.- Actualizar el .war de jbpm-console.

Cerramos el editor del .war. Si nos pregunta sí deseamos guardar los cambios y actualizar el archivo respondemos que SI, obviamente.

Paso seguido, nos dirigimos al directorio del instaler de jBPM, JBPM_INSTALLER_HOME, y por la consola ejecutamos el comando:

ant install.demo.noeclipse

Mediante el cual se generara la nueva instalación con las configuraciones realizadas.


LISTO!!! Ya debe tener jBPM configurado para usar su Base de Datos personalizada para Grupos y Usuarios.



Éxito y hasta una próxima entrega.

Comentarios

  1. Buen dia prodia indicarme si es tan amable como configurar la persistencia? ,para que me guarde en bd datos ingresados por formularios

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

El Melange todavía corre

Ese era el estribillo de un capítulo de unas de mis series favoritas de la infancia, Meteoro o Speed Racer. En ese capítulo un auto “fantasma” el X-3, aparecía de imprevisto y dejaba a todos asombrados con su rendimiento y prestaciones y volvía a desaparecer. Traigo ese episodio a colación puesto que recientemente sostuve una amena charla con un querido amigo, en la que el me manifestaba como los Mainframes habían muerto, o mejor dicho, el concepto de la computación distribuida basada en Mainframes había desaparecido. Para variar, yo no estuve de acuerdo, y le dije que por el contrario, el modelo de computación basado en Mainframes está mas vigente que nunca. Estos fueron mis argumentos:

Primeros pasos con Camunda BPM – Modelando un Proceso BPMN 2.0

Tenemos entre manos la tercera publicación de nuestra serie sobre la Plataforma de BPM de Camunda .  El día de hoy vamos, por fin, a empezar a modelar o construir nuestro primer proceso sencillo en notación BPMN 2.0. Para ello vamos a usar el modelador o editor que ya hemos instalado en nuestra primera publicación , y vamos a guardarlo en la sección de recursos del proyecto Maven Java que configuramos en la segunda publicación . Así que, como ya es costumbre, manos a las sobras…

Como configurar jBPM para usar nuestra propia Base de Datos en un sólo paso

Llevo un buen rato trabajando con jBPM en su serie 6.x, y mi opinión sobre este producto en la versión mecionada no ha mejorado para nada. Es una herramienta plena de funciones y caracteristicas avanzadas, pero tambien está llena de Bugs y es realmente inestable, sobre todo en el ambiente de modelamiento.  Así mismo, debo decir que tiene una muy aceptable API REST y que el motor de procesos y la consecuente ejecución de los procesos es estable y bastante rápida. En esta publicación daré inicio a una serie de artículos que hablan sobre ciertas configuraciones comunes e importantes que se hacen con jBPM. Hoy iniciamos con la configuración de jBPM para que use nuestra base de datos favorita. Esto tiene sentido porque el producto viene con la base de datos H2 por omisión, la cual es excelente para pruebas y evaluaciones rápidas de la herramienta, pero es completamente inaceptable en un ambiente de desarrollo, QA o producción cualquiera. Así que manos a l