JBoss_DroolsJBoss_rules介绍

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

议程JBossDrools介绍HelloDroolsDroolsRuleLanguageDomainSpecificLanguageFlowDroolsGuvnorDrools简介Drools是Redhat公司JBoss业务逻辑智能模块。Drools是处理规则的专家系统。客户端包含业务规则的业务逻辑组件业务规则调用传统业务逻辑编写方式客户端业务逻辑组件调用引入规则引擎后业务逻辑组件的编写方式调用规则引擎业务规则引入规则引擎之前引入规则引擎之后4RuleEngine的优势声明式编程RuleEngine允许你说“做什么”,而不是“怎样去做”Rule系统能解决非常困难的难题逻辑和数据分离快捷和灵活Knowledge集中化工具集成良好的解释机制易于理解的Rule例子If(“Joe”.equal(people.getName())){if(“Male”.equal(people.getSex())){System.out.priltln(“Thisisaman,nameisJoe.”);}}ruleGoodByewhenPeople(name=”Joe”,sex=”Male”)thenSystem.out.println((“Thisisaman,nameisJoe.”);endJava语言表示,如果有一个人的名字是“Joe”,而且是个男性,就会输出他的名字跟性别。产生背景系统庞大,业务复杂;业务规则经常改变;24小时服务;业务统一管理;降低系统维护升级成本。知识背景生产式规则引擎Rete算法产生式规则引擎许多产品规则系统的大脑实际上就是一个推理引擎,用于匹配facts和rules当匹配被找到,ruleactions被fireActions经常会改变facts的状态,或者在应用上执行一些“外部”actionRETE网络节点简单的RETE网络JoinNode更复杂的网络AgendaDrools是如何工作的?RuleRuleRuleRuleRuleFactFactFactFactFactWorkingMemory3.AssertFactsRuleBaseFactFactFactFactFactRuleRuleRuleRuleRule2.Create5.FireAllRules(5)activation-consequence1.ParseDRLActivationRuleFactActivationRuleFactFact议程JBossDrools介绍HelloDroolsDroolsRuleLanguageDomainSpecificLanguageFlowDroolsGuvnor配置开发环境到JbossDrools官网的下载频道下载一下资料:DroolsBinaries(Required)DroolsEclipseWorkbench(Required)DocumentationJavadocsSourceCode……配置开发环境解压DroolsBinaries,到路径{Drools_Home}。解压DroolsEclipseWorkbench,把features和plugins放到{Eclipse_Home}\dropins文件夹下。打开Eclipse,到WindowPreferenceDroolsInstallDroolsRuntimes,给Eclipse指定Drools的安装路径{Drools_Home}。新建HelloDrools项目打开Eclipse新建项目窗口,FileNewOther…选择DroolsDroolsProject,打开新建Drools项目窗口。输入项目名称,点Next进入下一页面。勾上第1、2项,生成一个HelloWorld的例子。点Finish完成。执行结果Debug规则文件议程JBossDrools介绍HelloDroolsDroolsRuleLanguageDomainSpecificLanguageFlowDroolsGuvnor规则文件种类DRL–DroolsRulesLanguage高级别的表达式语言(适合高级用户)XML–Drools2.xFormatXML结构化规则DSL–DomainSpecificLanguage领域语义规则模板支持自然语言DecisionTables(决策表)对业务分析人员非常有用Excel,ImpressorCSV自定义UI界面挑选关键元素适合最终用户操作DRLimportcom.sample.Stock;ruleIdentifyHotBuysno-looptruesalience10whenstock:Stock(indexName==DJIA,currentPrice=100.0,technicalScore=10.1,fundamentals=62.5,attractiveness=87.2)thenlog(BUY:+stock);stock.setFlag(true);stock.setAction(BUY);modify(stock);endpackagecom.sample;publicclassStock{enumAction{BUY,HOLD,SELL};publicStringgetIndexName();publicBigDecimalgetCurrentPrice();publicvoidsetCurrentPrice(BigDecimalp);…publicvoidsetFlag(booleanflag);publicvoidsetAction(Stock.Actionaction);}FactStock.javaRuleStockPicker.drl术语:RuleConditionConsequenceFactXMLDSL–DomainSpecificLanguagesrulePlatinumPriority#wedon'twanttomakethehighrollerswait!whenThereisaPlatinumcustomerwithaticketstatusofNewthenEscalatetheticketendruleEscalatewhenThereisacustomerticketwithstatusofEscalatethenSendescalationemailendDecisionTables解析ExcelXLS和CSV(OpenOffice)一个DRL范例剖析DRL文件Package不必匹配目录结构ExpanderDsl文件列表ImportsFact类型/领域对象的列表Facts被插入workingmemory(通过insertAPI)Globals被命名的“变量”值能在workingmemory中设置(通过setGlobalAPI)大多用于返回结果,或者作为引用数据在LHS中使用要注意(应该为常量结果,且是幂等的)Functions即一段语义代码(java)能够在LHS中的eval或者predicate谓词表达式中使用,或者在RHS中。Rules30Globals是一个命名变量可传递常量或者工具(服务)可作为结果返回,尤其是返回集合结果的途径当Global变量是数字、字符或字符串类型时,在规则中是不能被改变的。不应该当做facts的替换使用RHS中的修改不会影响到LHS中的conditions如果在LHS中使用,必须在facts插入前设置函数(Functions)可在规则LHS或者RHS中添加各种逻辑对字段的控制或者转换,小计算公式特别有用剖析Rule33剖析Rule一个rule由conditions,和actions组成。当所有的conditions匹配,rule可能“fire”Conditions即LHS(lefthandside)Actions即RHS(righthandside或者consequence)Rule操纵应用程序中的fact(数据)Facts(事实)POJOs(PlainOldJavaObjects)插入workingmemory.Hibernateand/orEJB3整合POJOs和DatabaseCommunication修改POJO’s状态/属性变化被告知rulesengine或者使用propertychangelistenerLong-livedworkingmemory持久的statefulsessionbeanShort-livedworkingmemory插入,计算,处理statelesssessionbeanpublicclassStock{privateStringsymbol;privateStringindexName;privatefloatcurrentPrice;publicStringgetSymbol(){returnthis.symbol;}publicvoidsetSymbol(Stringsymbol){this.symbol=symbol;}publicStringgetIndexName(){returnthis.indexName;}publicvoidsetIndexName(StringindexName){this.indexName=indexName;}publicfloatgetCurrentPrice(){returnthis.currentPrice;}publicvoidsetCurrentPrice(floatcurrentPrice){this.currentPrice=currentPrice;}Conditions/LHSRule的LHS由模式(Patterns)和条件元素(ConditionalElements—CE)组成Patterns被用来指示出fact的字段约束每个约束必须为true才能让RHS的actionsfire模式(Patterns)没有字段约束的PatternPerson()有文本字段约束的PatternPerson(name==“bob”)字段绑定的PatternPerson($name:name==“bob”)变量名称可以是任何合法的java变量,$是可选的,可由于区分字段和变量Fact绑定的Pattern$bob:Person(name==“bob”)变量约束的PatternPerson(name==$name)条件元素(ConditionalElements)应用在Pattern上and对于顶级(非嵌套)patterns是隐式成立的可以显式and使用关键字’and’(不推荐使用&&)or列能被显式or使用关键字’or’(不推荐使用||)重要:’or’内部会为LHS中的每个逻辑分支生成一个rule,如果逻辑分支之间不互斥,rule可能会被多次fire条件元素的例子其他的条件元素(ConditionalElements)ExistsNotAccumulateCollectFromForallConsequence/RHS即一段代码JavaMVEL典型actions:插入新的fact修改已经存在的fact撤销fact为fact的字段赋值为global赋值进行GC警告:使用java的时候。不要使用if/else,for/whileloops或者其他类似的java逻辑Consequence/RHS特有关键字update(fact)insert(newfact())retract(fact)访问KnowledgeHelper——drools.XXXgetRule比如:System.out.println(dr

1 / 61
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功