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