标签:速度 final java 嵌入 get 直接 使用率 阅读 国内
java开源的规则引擎有:Drools、Easy Rules、Mandarax、IBM ILOG。使用最为广泛并且开源的是Drools。
声明式编程
规则可以很容易地解决困难的问题,并得到解决方案的验证。与代码不同,规则以较不复杂的语言编写; 业务分析师可以轻松阅读和验证一套规则。
逻辑和数据分离
数据位于“域对象”中,业务逻辑位于“规则”中。根据项目的种类,这种分离是非常有利的。
速度和可扩展性
写入Drools的Rete OO算法已经是一个成熟的算法。在Drools的帮助下,您的应用程序变得非常可扩展。如果频繁更改请求,可以添加新规则,而无需修改现有规则。
知识集中化
通过使用规则,您创建一个可执行的知识库(知识库)。这是商业政策的一个真理点。理想情况下,规则是可读的,它们也可以用作文档。
Drools 是一个基于Charles Forgy’s的RETE算法的,易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。 业务分析师人员或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。
Drools 是用Java语言编写的开放源码规则引擎,使用Rete算法对所编写的规则求值。Drools允许使用声明方式表达业务逻辑。可以使用非XML的本地语言编写规则,从而便于学习和理解。并且,还可以将Java代码直接嵌入到规则文件中,这令Drools的学习更加吸引人。
Drools优点:
Drools相关概念:
Drools通过 事实、规则和模式相互组合来完成工作,drools在开源规则引擎中使用率最广,但是在国内企业使用偏少,保险、支付行业使用稍多。
drools有专门的规则语法drl,就是专门描述具体业务的规则是如何执行的:
package com.zhaozhi.spider.service.drools; rule "Drools Introduction" when $droolsIntro : DroolsIntroduction( topic == "Drools" ) then System.out.println($droolsIntro.introduceYourself()); end
xml配置:
<?xml version="1.0" encoding="UTF-8"?> <kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule"> <kbase name="rules" packages="rules"> <ksession name="ksession-rules"/> </kbase> </kmodule>
相关类与测试:
public class DroolsIntroduction { private String topic; public DroolsIntroduction(String topic) { this.topic = topic; } public String getTopic() { return topic; } public String introduceYourself() { return "Drools 6.2.0.Final"; } } public class DroolsRules { public static void fireAllRules(List<Object> rules){ try { KieServices ks = KieServices.Factory.get(); KieContainer kContainer = ks.getKieClasspathContainer(); KieSession kSession = kContainer.newKieSession("ksession-rules"); for(Object rule:rules){ if(rule!=null){ kSession.insert(rule); } } kSession.fireAllRules(); } catch (Throwable t) { t.printStackTrace(); } } } public class DroolsTest { @Before public void setUp() throws IOException { } @Test public void test(){ List<Object> rules = Lists.newArrayList(); rules.add(new DroolsIntroduction("hello")); rules.add(new DroolsIntroduction("Drools")); DroolsRules.fireAllRules(rules); } }
标签:速度 final java 嵌入 get 直接 使用率 阅读 国内
原文地址:http://www.cnblogs.com/yzf666/p/7717259.html