使用规矩引擎

http://liureying.blog.163.com/blog/static/615135201111172188559/

介绍:在代码中使用Drools规则引擎来进行规则运算。

思路:1)初始规则引擎环境 。 2)输入进行规则运行参数和获取返回运算结果

1)初始规则引擎环境
        //KnowledgeBuilder的作用就是用来在业务代码当中收集已经编写好的规则
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
//ResourceFactory 的对象加载规则文件,通过该对象可以实现从 Classpath、URL、File、ByteArray、Reader 或诸如 XLS 
的二进制文件加载 。
        kbuilder.add(ResourceFactory.newClassPathResource("com/demo/fun/rulefunction.drl"),ResourceType.DRL);
       // 产生规则包的集合
        Collection<KnowledgePackage> kpackage = kbuilder.getKnowledgePackages();
        //knowledgeBuilder的hasErrors()方法来检测已添加进去的规则当中有没有错误
  / /KnowledgeBase 是 Drools 提供的用来收集应用当中知识(knowledge)定义的知识库对象
        KnowledgeBase kbase=KnowledgeBaseFactory.newKnowledgeBase();
        //规则包的集合添加到KnowledgeBase 
        kbase.addKnowledgePackages(kpackage);

2)输入进行规则运行参数和获取返回运算结果

      提供了两个对象与规则引擎进行交互:StatefulKnowledgeSession和StatelessKnowledgeSession
  1. StatefulKnowledgeSession (有状态)
StatefulKnowledgeSession statefulSession = kbase.newStatefulKnowledgeSession();
statefulSession.insert("宋杰修");//输入规则运行参数
statefulSession.insert("Sjx");
statefulSession.fireAllRules();
statefulSession.dispose();
     2. StatelessKnowledgeSession (无状态)
StatelessKnowledgeSession statelessSession = kbase.newStatelessKnowledgeSession();
//输入规则运行参数,封装在list
List list = new ArrayList();
list.add("宋杰修");
list.add("Sjx");
statelessSession.execute(list);

note:
1.输入参数必须要跟规则文件内的规则变量一样类型。
2.规则文件有多个规则有相同类型参数。 参数 输入所有 相同类型规则,作为这些规则的参数
3.输入多个相同类型参数,规则引擎对每个参数都执行一遍规则运算

StatefulKnowledgeSession与StatelessKnowledgeSession区别:

StatefulKnowledgeSession要fireAllRules()方法触发所有的规则执行,最后还需要调用 dispose()法以释放相关内存资源。
StatelessKnowledgeSession在execute(参数时)自动触发所有的规则执行和释放相关内存资源

StatefulKnowledgeSession用insert方法接受业务数据,
StatelessKnowledgeSession用execute方法接受业务数据,
一次传多个参数只能封装到List.接受该list

StatefulKnowledgeSession它可以与规则引擎建立一个持续的交互通道,
在推理计算的过程当中可能会多次触发同一数据集。
除了insert()方法接受参数,还可以update(),和retract()对业务数据处理
而StatelessKnowledgeSession不能


Drools查询WorkingMemory 当中查找 Fact 的方法实现

QueryResults queryResults = statefulSession.getQueryResults(" testQuery", new Object[] { new Integer(30) });
for (QueryResultsRow qr : queryResults) {
Applicant app = (Applicant) qr.get("app");
// 打印查询结果
System.out.println("customer name :" + app.getName());
}

note:
规则文件 Query部分必须有 testQuery查询

Drools记录规则当中产生的数据及状态的变化数据,通过在 StatefulKnowledgeSession 当中设置 global 对象来实现

statefulSession.insert(new Integer("5"));
statefulSession.setGlobal("myGlobalList", new ArrayList());
statefulSession.setGlobal("app", new Applicant("kk", 10));
statefulSession.fireAllRules();
List list = (List) statefulSession.getGlobal("myGlobalList");
Applicant app = (Applicant) statefulSession.getGlobal("app");
System.out.println(list.size());
System.out.println(app.getAge());
statefulSession.dispose();

note:
规则文件 Global  部分必须有 myGlobalList  myGlobalList变量

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值