搭建Drools开发环境

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/51001037 篇幅中使用的Drools版本为6.
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/51001037

篇幅中使用的Drools版本为6.3.0.Final,和5.x版本的API有较大区别,请留意

开发工具的设置

开发工具为Intellij IDEA,网上逛了很久都没有发现一个使用IDEA开发drools的说明
只找到了一个IDEA的设置文件,导入该文件后新建.drl文件的话会有drools规则语法的智能提示
下载地址

开发流程

maven

IDEA可以直接创建drools类型的项目,但是无法和maven很好的集成,建议直接新建maven项目用来开发,pom文件需要添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-api</artifactId>
        <version>6.3.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-core</artifactId>
        <version>6.3.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>6.3.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-decisiontables</artifactId>
        <version>6.3.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-templates</artifactId>
        <version>6.3.0.Final</version>
    </dependency>
</dependencies>

项目结构规范

drools项目的规则文件和kmodule.xml必须在main->resources文件夹中创建,其中kmodule.xml需要位于main->resources->META-INF目录下
否则运行的时候会出现无法找到资源文件,抛出空指针的异常
resources目录中,规则文件可以按照分类放在不同的目录中,其所在的目录就是kmodule.xml文件中引用的包名,如

main
=resources
==META-INF
===kmodule.xml
==rules1
===rule.drl
==rules2
===rule.drl

那么在kmodule.xml文件中的定义应该如下:

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
    <kbase name="rules" packages="rules1">
        <ksession name="ksession-rules"/>
    </kbase>
    <kbase name="dtables" packages="dtables">
        <ksession name="ksession-dtables"/>
    </kbase>
</kmodule>

kbase中的packages就是resources文件夹下对应的规则所在的目录,kmodule.xml中具体的内容会在之后的实践中解释

规则文件编写

有关drools规则文件的语法说明请参考:
Drools5规则引擎开发教程

这是一篇很详细的教程,为drools5.x的版本,其中代码部分的API在6.x中已经不兼容,但是规则文件的编写说明是通用的,可以参考借鉴

下面给出一个简单的规则文件示例:

package info.xiaohei.www.rules

//导入自定义的实体类
import info.xiaohei.www.Message

//规则名
rule "Hello World"
    //条件语句
    when
        //当该实体的status属性为HELLO的时候,将该实体赋值给m,实体的message属性赋值给printMsg
        m : Message( status == Message.HELLO, printMsg : message )
    //满足条件之后要做的事情
    then
        //系统输出和重新设置实体属性
        System.out.println( printMsg );
        m.setMessage( "Goodbye~" );
        m.setStatus( Message.GOODBYE );
        //更新实体,会重新触发规则
        update( m );
end

//第二个规则
rule "GoodBye"
    when
        Message( status == Message.GOODBYE, printMsg : message )
    then
        System.out.println( printMsg );
end

实体类的定义如下:

package info.xiaohei.www;

public class Message {
    public static final int HELLO = 0;
    public static final int GOODBYE = 1;

    private String message;

    private int status;

    public String getMessage() {
        return this.message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public int getStatus() {
        return this.status;
    }

    public void setStatus(int status) {
        this.status = status;
    }
}

Java API

6.x版本中引入了一个Kie的概念,会在之后的实践中详细介绍,以下为示例代码

public static void main(String[] args){
    //从工厂中获得KieServices实例
    KieServices kieServices = KieServices.Factory.get();
    //从KieServices中获得KieContainer实例,其会加载kmodule.xml文件并load规则文件
    KieContainer kieContainer = kieServices.getKieClasspathContainer();
    //建立KieSession到规则文件的通信管道
    KieSession kSession = kieContainer.newKieSession("ksession=rules");
    Message message = new Message();
    message.setMessage("Hello World");
    message.setStatus(Message.HELLO);
    //将实体类插入执行规则
    kSession.insert(message);
    kSession.fireAllRules();
}

作者:@小黑

相关文章
|
前端开发 JavaScript 网络安全
Web网页端即时通讯源码/IM聊天源码RainbowChat-Web
RainbowChat-Web是一套基于MobileIMSDK-Web的网页端IM系统。不同于市面上某些开源练手或淘宝售卖的demo级代码,RainbowChat-Web的产品级代码演化自真正运营过的商业产品,其所依赖的通信层核心SDK已在数年内经过大量客户及其辐射的最终用户的使用和验证。RainbowChat-Web同时也是移动端IM应用RainbowChat的姊妹产品。
459 0
|
消息中间件 人工智能 API
100行代码讲透MCP原理
本文通过100行代码看到MCP的核心原理并不复杂,但它的设计巧妙深入理解使我们能够超越简单的SDK使用,创建更强大、更灵活的AI应用集成方案。
2414 62
100行代码讲透MCP原理
|
敏捷开发 人工智能 监控
任务反馈闭环管理:打造高效执行力的17个关键环节全解析
任务反馈闭环管理是一种确保任务从布置到完成全过程信息透明的管理方法,其核心是通过"计划-执行-反馈-改进"的完整循环,解决传统管理中常见的"任务黑洞"问题。这种机制强调责任明确、流程标准化、反馈及时和持续优化,能够显著提升执行力、团队协同效率和组织的敏捷性。关键环节包括SMART目标设定、标准化执行流程、量化反馈机制和PDCA持续改进。有效的闭环管理需要制度设计、工具支持和流程优化的协同配合,并通过五大KPI(任务完成率、反馈及时率等)进行量化评估。实施闭环管理虽面临员工适应、流程复杂等挑战,但数字化转型和智能化工具的应用正推动其向更高效的方向发展。闭环管理不仅是提升效率的工具,更是促进组织持
1113 0
|
JavaScript 前端开发 应用服务中间件
菜鸟之路Day24一一前端工程化(一)
本文详细介绍了从零开始搭建Vue前端项目并部署到Nginx服务器的全流程。首先,通过配置Node.js和vue-cli环境,为项目创建打好基础。接着,利用vue-cli快速生成Vue项目,可通过命令行或图形化界面完成配置,如添加路由功能等。文章还解析了Vue项目的结构,重点讲解组件的概念及实现方式,并通过编写登录页面组件演示开发过程。最后,展示了如何修改端口、启动项目以及组件挂载的原理,帮助读者深入理解Vue工程化开发的核心思想。
489 4
菜鸟之路Day24一一前端工程化(一)
|
Java Android开发
IDEA设置项目编码格式【修改为GBK 或 UTF-8】
这篇文章介绍了在IntelliJ IDEA中如何设置项目编码格式,包括将项目编码修改为GBK或UTF-8的详细步骤和图解。
24738 12
IDEA设置项目编码格式【修改为GBK 或 UTF-8】
|
域名解析 缓存 网络协议
公司网站打开错误怎么回事
公司网站打开错误怎么回事
|
NoSQL 测试技术 Redis
第一次面试总结 - 迈瑞医疗 - 软件测试
本文是作者对迈瑞医疗软件测试岗位的第一次面试总结,面试结果非常好,但面试过程中没有提问太多技术性问题,主要围绕个人介绍、互相了解、个人规划和项目亮点进行,因此作者认为这次面经的学习意义不大。作者还提到了实习岗位的待遇和工作内容,以及对不同阶段求职者的建议。
811 2
idea 2020.2及2020.3版本的安装和激活
idea 2020.2及2020.3版本的安装和激活
11351 13
|
存储 Oracle 关系型数据库
【数据库】解决 oracle: ORA-01653: unable to extend table *.LINEORDER by 1024 in tablespace SYSTEM
【数据库】解决 oracle: ORA-01653: unable to extend table *.LINEORDER by 1024 in tablespace SYSTEM
1154 0
【数据库】解决 oracle: ORA-01653: unable to extend table *.LINEORDER by 1024 in tablespace SYSTEM