DROOL确实是相当庞大的一个项目,对于初学者来说如何快速上手使用,着实还是一个比较困难的事情。这里提供了源码中的例子,使得你可以快速地在五分钟内上手实战。

String drl1 = "global java.util.List list\n" +"rule R1 when\n" +"  $s : String()\n" +"  $i : Integer( this == $s.length() )\n" +"  $j : Integer( this == $i * 2 )\n" +"then\n" +"  list.add( $j );\n" +"end\n";
String drl2 = "global java.util.List list\n" +"rule R2 when\n" +"  $s : String()\n" +"  $i : Integer( this == $s.length() )\n" +"  $j : Integer( this == $i * 3 )\n" +"then\n" +"  list.add( $j );\n" +"end\n";
//创建内部规则库(很有意思:这明明就是知识库)
InternalKnowledgeBase kbase = (InternalKnowledgeBase)getKnowledgeBase( );
//添加文本串的规则 R1
kbase.addPackages(loadKnowledgePackagesFromString( drl1 ));
//创建会话
KieSession ksession = createKnowledgeSession(kbase);
//向引擎添加一个全局的list,注意看规则中的第一行描述-global java.util.List list
List<Integer> list = new ArrayList<Integer>();
ksession.setGlobal("list", list);
//添加四条事实数据
ksession.insert("test");
ksession.insert(4);
ksession.insert(8);
ksession.insert(12);
//好了,可以点火了——出发规则引擎
ksession.fireAllRules();
//于是我们便得到了保存在list中的结果
assertEquals(8, (int)list.get(0));
list.clear();
//添加一条新规则
kbase.addPackages(loadKnowledgePackagesFromString(drl2));
//删除原有的老规则
kbase.removeRule("defaultpkg", "R1");
//再次点火
ksession.fireAllRules();
//结果便来了
assertEquals(12, (int)list.get(0));

快速解读:上边演示了如何添加、删除字符串规则和基本的过程。有人不禁要问事实数据可以动态删除或修改么?没有问题的,看这个例子:

//添加事实数据
FactHandle handler = ksession.insert(12);
//变更事实数据
ksession.update(handler, 13);
//删除事实数据
ksession.delete(handler);

嗯,似乎差不多了。还差点什么,下边这三个关键的函数。

KieBase getKnowledgeBase() {KieBaseConfiguration kBaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();return getKnowledgeBase(kBaseConfig);
}    KieBase getKnowledgeBase(KieBaseConfiguration kBaseConfig) {KieBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kBaseConfig);try {kbase = SerializationHelper.serializeObject(kbase, ((InternalKnowledgeBase) kbase).getRootClassLoader());} catch (Exception e) {throw new RuntimeException(e);}return kbase;
}
public Collection<KiePackage> loadKnowledgePackagesFromString(String... content) {return loadKnowledgePackagesFromString(null, content);
}public Collection<KiePackage> loadKnowledgePackagesFromString(KnowledgeBuilderConfiguration kbuilderConf, String... content) {if (kbuilderConf == null) {kbuilderConf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();}KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(kbuilderConf);for (String r : content) {kbuilder.add(ResourceFactory.newByteArrayResource(r.getBytes()),ResourceType.DRL);}if (kbuilder.hasErrors()) {fail(kbuilder.getErrors().toString());}Collection<KiePackage> knowledgePackages = kbuilder.getKnowledgePackages();return knowledgePackages;
}
KieSession createKnowledgeSession(KieBase kbase) {return kbase.newKieSession();
}

嗯,这次差不多了,可以移植去使用了。(完)

DROOL 5分钟上手Case相关推荐

  1. access 提供程序无法确定object 值_Python | 加一行注释,让你的程序提速10+倍!numba库十分钟上手指南...

    如果你在使用Python进行高性能计算,Numba提供的加速效果可以比肩原生的C/C++程序,只需要在函数上添加一行@jit的装饰.它支持CPU和GPU,是数据科学家必不可少的编程利器. 之前的文章 ...

  2. 自动调试自动编译五分钟上手

    Browsersync能让浏览器实时.快速响应您的文件更改(html.js.css.sass.less等)并自动刷新页面.更重要的是 Browsersync可以同时在PC.平板.手机等设备下进项调试. ...

  3. AirtestIDE 教程 — 5分钟上手自动化测试

    AirtestIDE 教程 - 5分钟上手自动化测试::http://airtest.netease.com/tutorial/Tutorial.html AirtestIDE 官方文档:http:/ ...

  4. vuex commit 模块_一分钟上手Vuex

    Vuex介绍 Vuex是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官 ...

  5. 零基础 5 分钟上手,程序员喜提 AIoT 新利器!

    作者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 近几年来,物联网发展迅速,2017 年,物联网设备数量首次超过全球人口.据预测,到 2025 年,物联网设备将超过 215 亿. 可与日 ...

  6. 教你三分钟上手阿里云OOS上传操作

    教你三分钟上手阿里云OOS上传操作 1.注册登录 如果小伙伴需要进行使用阿里云oss操作,第一步我们得注册/登录阿里云 https://www.aliyun.com/,小编建议大家尽量使用支付宝登录, ...

  7. 1-5分钟上手自动化测试——Airtest+Poco快速上手

    1 | 5分钟上手自动化测试--Airtest+Poco快速上手 1.1 前言 本文档将演示如何使用Airtest Project专用的编辑器AirtestIDE,编写Airtest+Poco自动化脚 ...

  8. 15分钟上手vue3.0(小结)

    这篇文章主要介绍了15分钟上手vue3.0,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值 Vue 3 还没有正式发布,但是 Alpha 版本已经发布了. 虽然官方还不推荐 ...

  9. AirtestIDE 教程 : 5分钟上手自动化测试

    都跟简单,只要认真钻研. AirtestIDE 教程 - 5分钟上手自动化测试::http://airtest.netease.com/tutorial/Tutorial.html AirtestID ...

  10. 小猪的Python学习之旅 —— 10.三分钟上手Requests库

    小猪的Python学习之旅 -- 10.三分钟上手Requests库 标签:Python 一句话概括本文: 本节讲解Requests库的常见使用,以及一个实战项目: 扒取某一篇微信文章里所有的图片,视 ...

最新文章

  1. 谷歌被指骗取人脸数据:部分获取方法可疑
  2. 微软免费AI作文打分软件升级:雅思考研四六级都能用,还能查单词给替换
  3. 道县谋定农业创新-李加映:中国农民丰收节交易会产业化
  4. 职场升职加薪不二法则,德到领袖偷偷告诉你
  5. hdu1754(树状数组求最值问题)
  6. Datawhale-零基础入门NLP-新闻文本分类Task04
  7. LintCode MySQL 1921. 从不充值的玩家(where not in)
  8. php怎么分割页面,将一个页面分成多个html文件(静态html分割页面)
  9. 哈工大大数据实验_大数据创新实验室丨警大智慧警务学院人才培养打造新引擎...
  10. 那些云中的负载均衡器——Azure、AWS和NetScaler
  11. java并发2--进阶
  12. Android Multimedia框架总结(十三)CodeC部分之OpenMAX框架初识及接口与适配层实现
  13. Spring MVC深入讲解
  14. 算法与数据结构 第2章 排序基础 上
  15. 【Atomikos】分布式事务简单示例
  16. Windows10更新错误显示0x8000ffff,易升更新0xc1900107
  17. 论黑客必知DOS命令技术大拳!
  18. ML:可解释性之SHAP值的公式推导(基于原论文利用树类模型的Tree SHAP公式推导)之详细攻略
  19. 炼数成金CUDA视频教程——第三课1——学习笔记
  20. Lenovo 10w 平板评测

热门文章

  1. 使用虚拟机win7安装_STEP7 V5.6
  2. 低代码大势所趋,RDP报表3.0应运而生
  3. 蓝桥杯Java组常用算法与技巧
  4. coin3d碰撞检测的实现
  5. Java毕业设计-电影影评管理系统
  6. pandas: pd.concat([df1,df3],axis默认=0纵向拼接),concat常用于纵向拼接,默认outer join
  7. 欺骗的艺术----(2)
  8. vb2010 连接mysql,VB连接数据库方式汇总
  9. php 正态分布数据描述,啥?你的数据不呈正态分布,文章发不了:stata一键搞定...
  10. 数值计算方法matlab课后答案,《现代的数值计算方法matlab版》习题解答.pdf