Integración de Drools con Spring Framework y Spring Boot

Configuración básica de Drools con Spring

Para itnegrar Drools en proyectos Spring, sigue estos pasos:

1. Configuración de dependencias Maven

<dependencies>
  <dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-compiler</artifactId>
    <version>7.10.0.Final</version>
  </dependency>
  <dependency>
    <groupId>org.kie</groupId>
    <artifactId>kie-spring</artifactId>
    <version>${drools.version}</version>
    <exclusions>
      <exclusion><groupId>org.springframework</groupId><artifactId>*</artifactId></exclusion>
    </exclusions>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.5.RELEASE</version>
  </dependency>
</dependencies>

2. Definición de reglas

package reglasbasicas

rule "saludo_inicial"
  when
    eval(true)
  then
    System.out.println("Regla activada");
end

3. Configuración Spring XML

<kie:kmodule id="core">
  <kie:kbase name="baseReglas" packages="reglas">
    <kie:ksession name="sesionReglas"/>
  </kie:kbase>
</kie:kmodule>
<bean class="org.kie.spring.annotations.KModuleAnnotationPostProcessor"/>

4. Uso en pruebas unitarias

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:config.xml")
public class PruebasDrools {

  @KBase("baseReglas")
  private KieBase motorReglas;
  
  @Test
  public void ejecutarReglas() {
    KieSession sesion = motorReglas.newKieSession();
    sesion.fireAllRules();
    sesion.dispose();
  }
}

Integración en aplicaciones web Spring MVC

Configuración web.xml

<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:web-config.xml</param-value>
  </init-param>
</servlet>

Servicio de reglas

@Service
public class ServicioReglas {
  
  @KBase("baseReglas")
  private KieBase nucleoReglas;
  
  public void ejecutar() {
    KieSession sesion = nucleoReglas.newKieSession();
    sesion.fireAllRules();
    sesion.dispose();
  }
}

Integración con Spring Boot

Configuración automática

@Configuration
public class ConfiguracionDrools {
  
  private static final String RUTA_REGLA = "reglas/";
  
  @Bean
  public KieFileSystem sistemaArchivos() throws IOException {
    KieFileSystem fs = KieServices.Factory.get().newKieFileSystem();
    Resource[] recursos = new PathMatchingResourcePatternResolver()
      .getResources("classpath*:" + RUTA_REGLA + "*.*");
    
    for (Resource recurso : recursos) {
      fs.write(ResourceFactory.newClassPathResource(RUTA_REGLA + recurso.getFilename()));
    }
    return fs;
  }
  
  @Bean
  public KieBase baseReglas() throws IOException {
    return contenedor().getKieBase();
  }
}

Controlador REST

@RestController
@RequestMapping("/api")
public class ControladorReglas {

  @Autowired
  private ServicioReglas servicio;
  
  @GetMapping("/ejecutar")
  public String ejecutarReglas() {
    servicio.ejecutar();
    return "Reglas procesadas";
  }
}

Archivo application.yml

server:
  port: 8080
spring:
  application:
    name: drools-app

Etiquetas: Drools Spring Framework Spring Boot Kie Reglas de negocio

Publicado el 7-30 00:08