Demo Apache Drools con Scala y Templates

Introducción

Apache Drools es un software usado para gestionar reglas de negocio de cualquier tipo. Al ser un framework muy extenso, limitamos este artículo a aplicar directamente con Scala un caso de uso simple, dejando así de lado las explicaciones teóricas que pueden encontrarse en la documentación oficial.

Reglas de Negocio con Drools

Al definir reglas en Drools, hay que hacerlo a partir de un lenguaje específico denominado Drools Rule Language o también conocido como DRL. Dicho código tiene que estar en un fichero con extensión .drl. Va más allá de este artículo explicar el funcionamiento de dicho lenguaje.

Básicamente, hay tres formas de generar las reglas:

  • Programar regla por regla usando el lenguaje DRL.
  • Usar hojas de cálculo con un formato muy concreto que Drools, de forma interna, lo convierte al lenguaje DRL.
  • Usar templates que permiten mediante la definición de un fichero .drl, generar multitud de reglas. Las reglas que se le pasan a los templates pueden provenir principalmente de dos fuentes:
    • Base de datos.
    • Hojas de cálculo.
Figura 1. Ejemplo de definición de reglas donde se establece que el paciente paga los honorarios según su edad.
Figura 2. Ejemplo de cómo las reglas se afectan entre sí.

Demo Apache Drools

En este artículo se ha desarrollado una aplicación, cuyo código es público y se puede encontrar aquí, en la que se usa un template suponiendo una lectura de una base de datos donde se encuentran definidas las reglas.

El repositorio se ha hecho con el objetivo de familiarizarse con Apache Drools, por lo que no contiene todas las implementaciones necesarias para un entorno productivo. Sin embargo, sí que tiene tests desarrollados y funcionales que permiten familiarizarse con el aplicativo. Para ejecutar los tests se puede usar la herramienta SBT ejecutando el comando sbt test.

En el repositorio se aplican los siguientes pasos en el orden mencionado para fijar precios por día a pista de tenis:

  1. Se leen las reglas, que contienen la siguiente información:
    • Name: nombre de la regla.
    • DemandLowerBound: demanda mínima.
    • DemandLowerBound: demanda máxima.
    • DateLowerBound: fecha mínima.
    • DateUpperBound: fecha máxima.
    • PriceChange: variación de precio que se aplica en caso de que la regla aplique.
  1. Se pasan las reglas al template localizado en src/main/resources/template.drl, para que sean convertidas por Apache Drools en el lenguaje DRL.
  1. Se leen los hechos (facts), que corresponden a:
    • La fecha.
    • Nivel de demanda para dicha fecha.
  1. Se proporcionan los hechos a la sesión de Drools, la cual resolverá qué reglas aplican dados los hechos proporcionados.
  1. Se aplicará el incremento o decremento de precios pertinente dada la resolución de reglas.
  1. Se actualizan los precios.

En la demo se han usado los conceptos más básicos de Apache Drools para priorizar la claridad del mensaje transmitido. Por este motivo, han quedado fuera de la demo el uso de conceptos como salience y activation groups entre muchos otros, los cuales incrementan drásticamente la capacidad de resolución de problemas relacionados con reglas de negocio.

Conclusión

Apache Drools permite centralizar la lógica de negocio, que normalmente está distribuida por la empresa, haciendo posible su codificación a través de reglas para que sean gestionadas por los expertos de negocio.

En este post hemos hecho una introducción a los aspectos clave de Apache Drools. No obstante, al tratarse de un software muy extenso, ofrece un gran número de posibilidades y funcionalidades. 

Si este artículo te ha parecido interesante, te animamos a visitar la categoría Software para ver otros posts similares a este y a compartirlo en redes. ¡Hasta pronto!
Daniel Bestard
Daniel Bestard
Artículos: 14