使用规矩引擎
来源:互联网 发布:世纪矩阵交易员 编辑:程序博客网 时间:2024/06/11 09:22
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
- StatefulKnowledgeSession (有状态)
StatefulKnowledgeSession statefulSession = kbase.newStatefulKnowledgeSession();statefulSession.insert("宋杰修");//输入规则运行参数statefulSession.insert("Sjx");statefulSession.fireAllRules();statefulSession.dispose();
2. StatelessKnowledgeSession (无状态)
StatelessKnowledgeSession statelessSession = kbase.newStatelessKnowledgeSession();//输入规则运行参数,封装在listList 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不能
参考: http://benbenxiongyuan.iteye.com/blog/1121479
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变量
- 使用规矩引擎
- 规矩
- 要有规矩!!
- 不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller
- 不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller
- 没有规矩,没有方圆
- 面试时的“规矩”
- 酒桌上的规矩
- 酒桌上的规矩
- 酒桌上的规矩
- 酒桌上的规矩:
- 酒桌上的规矩
- 酒桌上的规矩
- 实习生的规矩
- 还是不懂规矩啊!
- 没有规矩不成方圆
- 酒桌上的规矩↓
- 酒桌上的规矩↓
- Java开发webservice的几种方式
- 2416开发板内存问题
- MySQLdb
- 百度地图安卓搜索服务开发
- 杭电 HDU 1072 Nightmare
- 使用规矩引擎
- SQL一些技术点
- 浅谈mock和stub
- 在javascript里 有关 indexOf 或者 startsWith 或者 endsWith 这样的方法
- poj1887--最长下降子序列(LIS && LDS)问题
- CronTrigger的未触发授命学习
- IDEA + Tomcat + Maven + Web工程打包部署
- c/c++ 面试题
- java list 交集 并集 差集 去重复并集