Software utilizado● Sistema operativo: Linux● Java JDK 1.5 o superior● Drools Distribution 6.0● Eclipse 3.7 o superior● Eclipse Drools Plugin● Software de hojas de cálculo
¿Qué son las reglas de negocio?● Reglas que definen el comportamiento de
una organización o negocio● Definidas en el lenguaje de la organización● Definidas por personal de negocios
¿Qué son las reglas de negocio?● Cuando se codifican en aplicaciones, se
conocen como la Lógica de Negocio● Se encuentran como parte del código
fuente o en bases de datos.● No es fácil que el personal de negocio
pueda modificarlas o entenderlas una vez implementadas en los sistemas
¿Qué son las reglas de negocio?● Hoy en día, existe toda una rama de
estudio.● Sus características se han
"Estandarizado" en The Business Rules Manifesto
¿Qué son las reglas de negocio?● Las reglas de negocio son una forma de
Representación del Conocimiento (Knowledge Representation and Reasoning). Un área de inteligencia artificial.
● Si, podría hacerse un sistema experto usando reglas
¿Qué son las reglas de negocio?Las reglas de negocio suelen expresarse
como enunciados:• CUANDO
– se cumplan ciertas condiciones• ENTONCES
– realizar ciertas acciones
¿Qué son las reglas de negocio?● Los sistemas especializados en manejar
las reglas se denominan BRMS (Business Rules Management Systemo Crear reglas (Authoring)o Desplegarlas (Deploy)o Almacenar reglas (Repository)o Modificar y monitorear reglas
Reglas de negocio con Drools● Proyecto comunitario de JBoss● Soporte comercial de Red Hat● Open Source y Free Software (Licencia Apache 2.0)● Multiplataforma (Java)● Fácil integración con otras tecnologías abiertas
Reglas de negocio con DroolsMétodos para crear reglas● Reglas en formato DRL ● Tablas de decisión (XLS)● Lenguaje natural (Con DSL)
Ejemplo 1: Hello World● Crear nuevo
proyecto desde Eclipseo New Drools Project
● Drools Runtime 6
● Crear nuevo proyecto desde Eclipseo New Drools Project
● Drools Runtime 6
Ejemplo 1: Hello World● groupId=drools● artifactId=drools● version=1
Contenido no relevante para este tallerConvención Maven
● groupId=drools● artifactId=drools● version=1
Contenido indiferenteConvención maven
Sample.drl
Message().- La regla se activa si hay un objeto Message en la memoria de Drools
status ==.-Los objetos deben cumplir esta condiciónmymessage:.- Asignamos el campo message del objeto a una variable
temporal de DroolsDe igual forma, asignamos nuestro objeto Message a una variable temporal m.
Esto permite usar los objetos temporales en las consecuencias de la regla o en otras condiciones
Sample.drl
Consecuencias.- Codigo Javaupdate.- Función de Drools para volver a evaluar el objeto
en las reglasend.- Fin de declaración de la regla
Traducción a idioma humanoCuando:● Tengamos un objeto tipo Message en la
memoria● Con un status de tipo Hello● Copiar el mensaje en la variable
mymessage● Copiar el objeto en la variable m
Traducción a idioma humanoEntonces:● Mostrar el mensaje almacenado en
mymessage● Cambiar el texto del mensaje a "Goodbye
cruel world"● Cambiar el status del mensaje a Goodbye● Notificar a Drools que el objeto ha cambiado
Traducción a idioma humano• Por default, una regla sólo puede
activarse una vez para un mismo objeto en Drools.
• Con la instrucción modify, le decimos a Drools que vuelva a evaluar ese objeto
Archivos fuente● El proyecto sigue una
estructura de archivos Maven.● Drools carga los archivos de
reglas que estén en las rutas por defecto
● El archivo META-INF/kmodule.xml debe existir en la carpeta resources para que Drools detecte el proyecto
● El proyecto sigue una estructura de archivos Maven.
● Drools carga los archivos de reglas que estén en las rutas por defecto
● El archivo META-INF/kmodule.xml debe existir en la carpeta resources para que Drools detecte el proyecto
Objeto Message• Los objetos usados en
Drools deben ser clases Java POJOs (Simple Plain Java Object)
• No olvidar métodos set y get.
DroolsTest.java● Líneas 15-17: Cargar servicio y sesión de
reglas. ● Línea 20-23: Crear un objeto e insertarlo
en la memoria de reglas de Drools● Línea 24: Disparar las reglas.
DroolsTest.java• Las reglas verifican si algún objeto en la
memoria cumple las condiciones de alguna regla
• Si esto ocurre, ejecuta la regla indicada para el objeto
• Puede ser que una regla se active una vez, muchas veces o ninguna
¿Qué hicimos?Las reglas utilizadas son las siguientes:● CUANDO tengamos un mensaje de saludo,
ENTONCES imprimir un saludo y cambiarlo a mensaje de despedida con un texto de despedida
● CUANDO tengamos un mensaje de despedida, ENTONCES mostrar el texto de despedida
RecordatorioEl procedimiento de desarrollo es a la
inversa:● Primero se identifican las reglas.● Después se implementan, en este caso en
un archivo DRL.● Normalmente, las reglas ya existen en las
organizaciones.
Formato de las reglas en DroolsDrools utiliza un formato llamado DRL
(Drools Rule Language).Las reglas tienen la siguiente estructura
Formato de las reglas en Drools● Rule: Indica el inicio de una nueva regla.● When: Condiciones de la regla● Then: Consecuencias o acciones de la regla● End: Terminar declaración de la regla
● Las reglas deben incluir imports de las clases utilizadas.
CondicionesPara agregar condiciones adicionales sobre los atributos
del objeto, incluirlos dentro del paréntesis● Message( message == "hola")Notar que no usamos getMessage(), Drools puede usar el
nombre del campo si existe un método get.Si se tienen muchas condiciones, separarlas con comas
CondicionesBinding● Podemos "asignar" un objeto o atributo a una variable de
Drools● Nos permite reutilizar ese valor posteriormente● Se usa ":" para hacer el bind.
ConsecuenciasSe ejecutan con código en JavaFunciones auxiliares de Drools● modify● update● insert● etc...
Ejemplo 2: Politicos Honestos• Este ejemplo muestra que las reglas
pueden insertar nuevos Facts.• InsertLogical significa que si el Fact que
causó una inserción cambia su valor de verdad, se debe retirar el Fact que insertó.
Ejemplo 2: Politicos Honestos• Creamos un Proyecto Nuevo en Ecilpse
(Drools Project)• Sugerencia de uso:
Ejemplo 2: Politicos Honestos• Crear las clases y las reglas necesarias• Modificar el archivo kmodule.xml para
usar nuestras reglas
Ejemplo 2: Politicos Honestos• CUANDO haya políticos honestos.
– ENTONCES habrá esperanza• CUANDO haya esperanza
– ENTONCES celebremos la democracia• CUANDO haya un político honesto
– ENTONCES habrá una corporación lista para corromperlo
• CUANDO no haya esperanza– ENTONCES preocuparse por la democracia
Ejemplo 2: Politicos Honestos• exists: La regla se ejecuta una vez aunque
exista uno o muchos objetos que cumplen la regla
• insertLogical: Inserta un nuevo objeto, pero se elimina si la condicion de la regla llega a cambiar
Ejemplo 2: Politicos Honestos• Not: La regla se ejecuta si NO existe
ningún objeto del tipo indicado en la memoria de Drools
• modify: Permite modificar varios campos de un objeto a la vez
Ejemplo 2: Politicos Honestos• Consideraciones:
– En las condiciones de las reglas siempre se tiene que tomar en cuenta condiciones para diferenciar objetos, similar a cross products en SQL
Ejemplo 2: Politicos Honestos• kmodule.xml
– packages.- Nombre de las carpetas con reglas– ksession name.- Se usa para cargar desde Java
Ejemplo 3: Calcular FibonacciEl cálculo de Fibonacci expresado como
reglas es:● SI el número es 1, ENTONCES su Fibonacci es 1● SI el número es 2, ENTONCES su Fibonacci es 1● Si el número n es mayor a 1, ENTONCES su Fibonacci
es F(n) + F(n -1)Se necesitan tener todos los Fibonaccis anteriores para
calcular el Fibonacci de n
Ejemplo 3: Calcular FibonacciCálculo RecursivoLas reglas deben considerar si ya se calculó el Fibonacci
de un número.Si no se ha calculado aún, su Fibonacci es -1
Ejemplo 3: Calcular Fibonacci
Si el número es 1 o 2, y si aún no se calcula su Fib
Entonces, el Fib es 1.
Ejemplo 3: Calcular Fibonacci
• Si se tiene un número n al que aún no se calcula su Fib, y aún NO tenemos el Fib de 1
• Entonces, insertar el Fib de n-1 para su cálculo.
Ejemplo 3: Calcular Fibonacci• Si tenemos el Fib de s1 y s2 (s2 == s1 +1), y no
hemos calculado el de s3 ( s3 == s2 + 1)• Entonces, calcular el Fib de s3 usando Fib de s1
y s2
Ejemplo 3: Calcular FibonacciNotar que "enlazamos" los valores a s1, s2 y
s3 para reutilizarlos en la regla.¿Cómo se activarán las reglas al solicitar el
Fibonacci de un número n, que tal 10?
Ejemplo 3: Calcular FibonacciClase Fibonacci:● Sequence: Número al
que se le calcula Fib● Value: Valor de su FibInicializar value siempre en
-1 cuando aún no se calcula
No olvidar get y set
Clase Fibonacci:● Sequence: Número al
que se le calcula Fib● Value: Valor de su FibInicializar value siempre en
-1 cuando aún no se calcula
No olvidar get y set
Diferencias entre reglas y métodos● Los métodos deben llamarse directamente● Se deben enviar instancias específicas a
los métodos● Una llamada a un método implica una
ejecución
Diferencias entre reglas y métodos● Las reglas se ejecutan contra cualquier dato que
esté presente en la memoria de Drools● Las reglas nunca son llamadas directamente● No es necesario pasar un objeto específico a las
reglas● Dependiendo los objetos, una regla puede
activarse una vez, muchas veces o ninguna
Ejemplo 4: Calcular descuentos de compras
● Tenemos registros de pedidos de tacos:● Nombre del cliente● Monto de compra● Número de tacos pedidos● Información sobre si pidió bebida o no
● Calcular si su compra merece un descuento
Ejemplo 4: Calcular descuentos de compras
● Si la compra es de menos de 15 pesos, no aplica descuento
● Si la compra es de entre 15 y 15, aplica 10% de descuento
● Si la compra es de más de 25, aplica 15% de descuento
● Si compró más de 2 tacos e incluyó bebida, otorgar un 5% de descuento adicional
Ejemplo 4: Calcular descuentos de compras
● Con las siguientes compras:● John, 1 taco, 18 pesos, no bebida● Gabriel, 4 tacos, 40 pesos, no bebida● Carlos, 2 tacos, 25 pesos, bebida● Ana, 3 tacos, 30 pesos, bebida● Silvia, 1 taco, 14 pesos, no bebida
● ¿Qué descuentos aplicarían?
Facilitando las reglas● Las reglas con Drools siguen siendo
difíciles de entender● Se requiere aprender un nuevo lenguaje● ¿Y si tu jefe necesita modificar o crear las
reglas?
Conociendo al DSL● Otro nombre exótico.● Acrónimo para Domain Specific Language● Suficiente teoría por el momento
Conociendo al DSL● Gracias al DSL podemos pasar de reglas
en lenguaje natural a reglas Drools.● Se usa un archivo "intermediario" de
mapeo.
Conociendo al DSL● Las reglas se crean en un archivo dslr● "Expander" le indica a Drools el archivo DSL a
usar para el mapeo
Conociendo al DSL● El archivo Java para ejecutar el proyecto
se modifica muy poco● El proyecto de "Tacos" usando DSL
quedaría:
Tablas de decisión● Es un formato familiar para el personal de
negocio● Reglas que pueden expresarse como una
misma plantilla con distintos valores● Formato xls o csv● Pueden crearse y modificarse con Excel,
Openoffice, etc...
Ejemplo 5: Hello World con Tablas● Tablas soportadas: XLS, CSV● Crear proyecto Drools desde Eclipse● Agregar opciones de DecisionTables● Se pueden usar opciones de formateo
para facilitar la visualización
Ejemplo 5: Hello World con Tablas● RuleSet: Indica a Drools donde empezar a
analizar la tabla, nombre de paquete opcional
● Imports separados por comas● Notes, Opcional, comentarios
Ejemplo 5: Hello World con Tablas● RuleTable: Empezar a leer las reglas● Condition, Action: Especificar el tipo de
columna● Indicar objeto sobre el que actuará la
columna● Operación a realizar, con $param o $1, $2
se usan valores de los renglones
Tablas de decisión● Siguiente renglón, opcional, útil para
documentar● Siguiente renglón, empiezan los valores● Si una celda está vacía, no se considera
en la regla
Tablas de decisión● Cada renglón es una regla.● Cada columna es una condición o acción.● Útil cuando hay muchas reglas donde solo
cambian los valores de comparación● Internamente, Drools convierte cada una
al formato DRL
Ejemplo 6: Seguros● Se tienen un conjunto de reglas para
decidir que tipo de seguro es aplicable a un solicitante.
● Se consideran 4 factores● Edad del solicitante● Perfil de riesgo de su ubicación● Solicitudes previas● Tipo de seguro solicitado
Ejemplo 6: Seguros● Las reglas son:
● Si tiene entre 18 y 24 años, esta en perfil de bajo riesgo, a hecho una solicitud previa, y envia una solicitud de tipo comprehensiva
● ENTONCES la cuota base del seguro es de $450
● Si tiene entre 18 y 24 años, esta en perfil de riesgo medio, no ha hecho solicituded previas, y envia una solicitud de tipo fuego o robo
● ENTONCES la cuota base del seguro es de $200, porque los antecedentes no son relevantes
● Si tiene entre 18 y 24 años, esta en perfil de riesgo medio, no ha hecho solicituded previas, y envia una solicitud de tipo comprehensiva
● ENTONCES la cuota base del seguro es de $300
● Y asi con muchas reglas!!!
Ejemplo 6: Seguros● Dependiendo el caso, se establece la
cuota del seguro y una posible razón● Opcionalmente se dan descuentos por
buenos conductores
Lo que no se vió● Diferencia entre sesiones de Drools
(Stateless vs Stateful)● Funciones adicionales en las condiciones● Modificadores en las reglas● Diferencia entre "dialectos" mvel y java en
las reglas● Reglas en Excel con DSL
Lo que no se vió● Drools Workbench.- Aplicación web para
crear y administrar reglas● Base de Red Hat JBoss BRMS
Lo que no se vió● Drools Server.- Interfaz para ejecutar las
reglas de manera remota, a través de servicios REST y XML
Herramientas Similares● DecisionLogic:
Reglas en formato de tablas de decisión, ejecutables desde Python, C# o Javascript
Herramientas Similares● LogicGem:
Reglas en formato de tablas de decisión
● Generación de código a partir de las tablas
Herramientas Similares● IBM BRMS● Oracle Business Rules● Fico Blaze Advisor BRMS● Pegasystems Business Rules● Bosch Business Rules Management● Corticon Business Rules
Todas de pago
Otras herramientas Open Source de interés
● Apache Maven ● Apache Tomcat ● Eclipse + Drools Plugin ● Optaplanner ● Jackson ● XStream ● Jersey
Apuntes finales• Reglas de Negocio es un área de estudio
muy difundida y con mucho interés en la industria
Apuntes finales• Son útiles para separar la lógica de negocio
de los sistemas.• Permiten que las reglas sean manejadas por
los encargados de crearlas• Trabajar con herramientas como Drools
requiere cambiar un poco la forma de pensar respecto a las aplicaciones
Top Related