5 Drools 规则引擎集成

283 阅读3分钟

5.0 概述

本章内容主要介绍了如何将Drools规则引擎集成到不同的应用系统中,包括:Java应用、Spring应用、Drools Workbench等。在本章中,作者将详细介绍每一个集成步骤,并给出代码演示。读者可以通过这些演示,了解如何快速、高效地集成Drools规则引擎。

5.1 集成 Java 应用

Drools 规则引擎可以很容易地集成到Java应用中,只需要导入Drools的相关Jar包并通过代码进行设置即可。下面是一个简单的Java应用的集成示例:

Jar包引入

要集成Drools到Java应用程序中,需要引入以下Drools的jar包,这些jar包可以通过Maven或Gradle等依赖管理工具进行安装和引入:

    • drools-core:包含Drools规则引擎的核心功能
    • drools-compiler:用于编译DRL规则文件
    • drools-decisiontables:支持从Excel或CSV文件中加载规则
    • mvel2:Drools所需的脚本语言

开发步骤

集成 Java 应用是指在 Java 应用中使用 Drools 规则引擎。在 Java 应用中使用 Drools 规则引擎的步骤如下:

    1. 准备规则:创建规则文件并定义规则。
    2. 构建 Kie 容器:使用 KieServices 接口创建 Kie 容器。
    3. 获取 KieBase:使用 KieServices.newKieClasspathContainer() 方法获取 KieBase。
    4. 创建 KieSession:使用 KieBase.newKieSession() 方法创建 KieSession。
    5. 插入数据:使用 KieSession.insert() 方法插入数据。
    6. 执行规则:使用 KieSession.fireAllRules() 方法执行规则。
    7. 关闭 KieSession:使用 KieSession.dispose() 方法关闭 KieSession。

测试

import org.drools.core.impl.InternalKnowledgeBase;
import org.drools.core.impl.KnowledgeBaseFactory;
import org.drools.core.io.impl.ClassPathResource;
import org.kie.api.io.Resource;
import org.kie.api.runtime.KieSession;

public class DroolsIntegration {
    public static void main(String[] args) {
        // 创建Drools KnowledgeBase
        InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
        // 加载规则文件
        Resource resource = new ClassPathResource("rules/sample.drl");
        kbase.addKnowledgePackages(kbase.getKnowledgeBuilder(resource).getKnowledgePackages());
        // 创建KieSession
        KieSession ksession = kbase.newKieSession();
        // 触发规则
        ksession.fireAllRules();
        // 关闭KieSession
        ksession.dispose();
    }
}

5.2 集成 Spring

将Drools与Spring集成可以帮助我们更好地管理规则引擎的生命周期,使用Spring容器管理Drools可以减少代码量,提高开发效率。

引入Drools相关依赖

在项目的pom.xml文件中引入如下依赖:

<dependency>
  <groupId>org.drools</groupId>
  <artifactId>drools-core</artifactId>
  <version>7.10.0.Final</version>
</dependency>
<dependency>
  <groupId>org.drools</groupId>
  <artifactId>drools-compiler</artifactId>
  <version>7.10.0.Final</version>
</dependency>

创建Spring配置文件

在Spring配置文件中,我们需要配置Drools的KieBase和KieSession Bean。

<bean id="kieBase" class="org.kie.internal.utils.KieHelper">
  <property name="resources" value="classpath:rules/test.drl"/>
</bean>

<bean id="kieSession" class="org.kie.api.runtime.KieContainer">
  <constructor-arg ref="kieBase"/>
</bean>

使用KieSession

最后,我们可以在应用程序中通过Autowired注解注入KieSession并使用它。

@Autowired
private KieSession kieSession;

public void testRule() {
  // 插入事实数据
  kieSession.insert(factData);
  // 执行规则
  kieSession.fireAllRules();
}

通过以上步骤,我们就完成了Drools与Spring的集成,并可以在应用程序中方便地使用Drools规则引擎。

5.3 集成 Drools Workbench

Drools Workbench是Drools的一个web-based工具,用于设计和管理Drools规则。集成Drools Workbench到Java应用程序需要几个步骤:

步骤1:创建一个Drools工程

    • 运行Drools Workbench,点击“New Project”。
    • 在“Create a new project”窗口中,输入项目名称,选择项目类型为“Drools Project”,并点击“Create”。
    • 创建一个包,用于存储规则。

步骤2:编写规则

    • 在刚创建的包中,点击“New”,选择“Rule Asset”。
    • 在打开的编辑器中,编写规则,并使用DRL语法。
    • 可以使用图形界面来创建规则,然后在后台生成DRL语法。

步骤3:编译规则

    • 编写完规则后,点击“Build & Deploy”,编译规则。
    • 如果编译成功,则可以在“Build Results”中查看编译结果。

步骤4:集成规则到Java应用中

    • 在Java应用中,需要引入Drools的相关Jar包。
    • 可以使用Maven,Gradle或其他构建工具来管理Jar包。
    • 可以使用KieServices和KieContainer类来加载规则。
    • 可以使用KieSession类来执行规则。

在 Java 应用程序中,我们需要通过 Drools 的 KieServices API 获取项目内的规则。下面是获取规则的代码示例:

KieServices ks = KieServices.Factory.get();
KieContainer kc = ks.getKieClasspathContainer();
KieSession kSession = kc.newKieSession("ksession-rules");
Person person = new Person("John", 30);
kSession.insert(person);
kSession.fireAllRules();
kSession.dispose();

通过集成 Drools Workbench,我们可以在 Java 应用程序中使用 Drools 规则引擎,并方便地管理规则。