2024年-JBossDrools教程學(xué)習(xí)課件_第1頁
2024年-JBossDrools教程學(xué)習(xí)課件_第2頁
2024年-JBossDrools教程學(xué)習(xí)課件_第3頁
2024年-JBossDrools教程學(xué)習(xí)課件_第4頁
2024年-JBossDrools教程學(xué)習(xí)課件_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

JBossDrools劉俊豪1

議程JBossDrools介紹HelloDroolsDroolsRuleLanguageDomainSpecificLanguageFlowDroolsGuvnor22024/5/5Drools簡介Drools是Redhat公司JBoss業(yè)務(wù)邏輯智能模塊。/drools/Drools是處理規(guī)則的專家系統(tǒng)。32024/5/5

RuleEngine的優(yōu)勢聲明式編程RuleEngine允許你說“做什么”,而不是“怎樣去做”Rule系統(tǒng)能解決非常困難的難題邏輯和數(shù)據(jù)分離快捷和靈活Knowledge集中化工具集成良好的解釋機(jī)制易于理解的Rule42024/5/5例子If(“Joe”.equal(people.getName())){

if(“Male”.equal(people.getSex())){System.out.priltln(“Thisisaman,nameisJoe.”);}}rule

"GoodBye"

whenPeople(name=”Joe”,sex=”Male”)thenSystem.out.println((“Thisisaman,nameisJoe.”);endJava語言表示,如果有一個人的名字是“Joe”,而且是個男性,就會輸出他的名字跟性別。52024/5/5產(chǎn)生背景系統(tǒng)龐大,業(yè)務(wù)復(fù)雜;業(yè)務(wù)規(guī)則經(jīng)常改變;24小時服務(wù);業(yè)務(wù)統(tǒng)一管理;降低系統(tǒng)維護(hù)升級成本。62024/5/5知識背景生產(chǎn)式規(guī)則引擎Rete算法72024/5/5產(chǎn)生式規(guī)則引擎許多產(chǎn)品規(guī)則系統(tǒng)的大腦實際上就是一個推理引擎,用于匹配facts和rules當(dāng)匹配被找到,ruleactions被fireActions經(jīng)常會改變facts的狀態(tài),或者在應(yīng)用上執(zhí)行一些“外部”action82024/5/5RETE網(wǎng)絡(luò)節(jié)點92024/5/5簡單的RETE網(wǎng)絡(luò)102024/5/5JoinNode112024/5/5更復(fù)雜的網(wǎng)絡(luò)122024/5/5132024/5/5AgendaDrools是如何工作的?RuleRuleRuleRuleRuleFactFactFactFactFactWorkingMemory3.AssertFactsRuleBaseFactFactFactFactFactRuleRuleRuleRuleRule2.Create5.FireAllRules(5)activation

->consequence1.ParseDRLActivationRuleFactActivationRuleFactFact142024/5/5議程JBossDrools介紹HelloDroolsDroolsRuleLanguageDomainSpecificLanguageFlowDroolsGuvnor152024/5/5配置開發(fā)環(huán)境到JbossDrools官網(wǎng)的下載頻道下載一下資料:DroolsBinaries(Required)DroolsEclipseWorkbench(Required)DocumentationJavadocsSourceCode……162024/5/5配置開發(fā)環(huán)境解壓DroolsBinaries,到路徑{Drools_Home}。解壓DroolsEclipseWorkbench,把features和plugins放到{Eclipse_Home}\dropins文件夾下。打開Eclipse,到Window>>Preference>>Drools>>InstallDroolsRuntimes,給Eclipse指定Drools的安裝路徑{Drools_Home}。172024/5/5新建HelloDrools項目打開Eclipse新建項目窗口,F(xiàn)ile>>New>>Other…選擇Drools>>DroolsProject,打開新建Drools項目窗口。輸入項目名稱,點Next進(jìn)入下一頁面。勾上第1、2項,生成一個HelloWorld的例子。點Finish完成。182024/5/5192024/5/5執(zhí)行結(jié)果202024/5/5Debug規(guī)則文件212024/5/5議程JBossDrools介紹HelloDroolsDroolsRuleLanguageDomainSpecificLanguageFlowDroolsGuvnor222024/5/5規(guī)則文件種類DRL–DroolsRulesLanguage高級別的表達(dá)式語言(適合高級用戶)XML–Drools2.xFormatXML結(jié)構(gòu)化規(guī)則DSL–DomainSpecificLanguage領(lǐng)域語義規(guī)則模板支持自然語言DecisionTables(決策表)對業(yè)務(wù)分析人員非常有用Excel,ImpressorCSV自定義UI界面挑選關(guān)鍵元素適合最終用戶操作232024/5/5DRLimportcom.sample.Stock;rule"IdentifyHotBuys"no-looptruesalience10 when stock:Stock( indexName=="DJIA", currentPrice<=100.0, technicalScore>=10.1, fundamentals>=62.5, attractiveness>=87.2) then log("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術(shù)語:RuleConditionConsequenceFact242024/5/5XML252024/5/5DSL–DomainSpecificLanguagesrule"PlatinumPriority" #wedon'twanttomakethehighrollerswait! when Thereisa"Platinum"customerwithaticketstatusof"New" then Escalatetheticketend

rule"Escalate" when Thereisacustomerticketwithstatusof"Escalate" then Sendescalationemailend262024/5/5DecisionTables解析ExcelXLS和CSV(OpenOffice)272024/5/5一個DRL范例282024/5/5剖析DRL文件Package不必匹配目錄結(jié)構(gòu)ExpanderDsl文件列表ImportsFact類型/領(lǐng)域?qū)ο蟮牧斜鞦acts被插入workingmemory(通過insertAPI)Globals被命名的“變量”值能在workingmemory中設(shè)置(通過setGlobalAPI)大多用于返回結(jié)果,或者作為引用數(shù)據(jù)在LHS中使用要注意(應(yīng)該為常量結(jié)果,且是冪等的)Functions即一段語義代碼(java)能夠在LHS中的eval或者predicate謂詞表達(dá)式中使用,或者在RHS中。Rules292024/5/5

Globals是一個命名變量可傳遞常量或者工具(服務(wù))可作為結(jié)果返回,尤其是返回集合結(jié)果的途徑當(dāng)Global變量是數(shù)字、字符或字符串類型時,在規(guī)則中是不能被改變的。不應(yīng)該當(dāng)做facts的替換使用RHS中的修改不會影響到LHS中的conditions如果在LHS中使用,必須在facts插入前設(shè)置302024/5/5函數(shù)(Functions)可在規(guī)則LHS或者RHS中添加各種邏輯對字段的控制或者轉(zhuǎn)換,小計算公式特別有用312024/5/5剖析Rule322024/5/5

剖析Rule一個rule由conditions,和actions組成。當(dāng)所有的conditions匹配,rule可能“fire”Conditions即LHS(lefthandside)Actions即RHS(righthandside或者consequence)Rule操縱應(yīng)用程序中的fact(數(shù)據(jù))332024/5/5Facts(事實)POJOs(PlainOldJavaObjects)插入workingmemory.Hibernateand/orEJB3整合POJOs和DatabaseCommunication修改POJO’s狀態(tài)/屬性變化被告知rulesengine或者使用propertychangelistenerLong-livedworkingmemory持久的statefulsessionbeanShort-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; }342024/5/5Conditions/LHSRule的LHS由模式(Patterns)和條件元素(ConditionalElements—CE)組成Patterns被用來指示出fact的字段約束每個約束必須為true才能讓RHS的actionsfire352024/5/5模式(Patterns)沒有字段約束的PatternPerson()有文本字段約束的PatternPerson(name==“bob”)字段綁定的PatternPerson($name:name==“bob”)變量名稱可以是任何合法的java變量,$是可選的,可由于區(qū)分字段和變量Fact綁定的Pattern$bob:Person(name==“bob”)變量約束的PatternPerson(name==$name)362024/5/5條件元素(ConditionalElements)應(yīng)用在Pattern上and對于頂級(非嵌套)patterns是隱式成立的可以顯式and使用關(guān)鍵字’and’(不推薦使用&&)or列能被顯式or使用關(guān)鍵字’or’(不推薦使用||)重要:’or’內(nèi)部會為LHS中的每個邏輯分支生成一個rule,如果邏輯分支之間不互斥,rule可能會被多次fire372024/5/5條件元素的例子382024/5/5其他的條件元素(ConditionalElements)ExistsNotAccumulateCollectFromForall392024/5/5Consequence/RHS即一段代碼JavaMVEL典型actions:插入新的fact修改已經(jīng)存在的fact撤銷fact為fact的字段賦值為global賦值進(jìn)行GC警告:使用java的時候。不要使用if/else,for/whileloops或者其他類似的java邏輯402024/5/5Consequence/RHS特有關(guān)鍵字update(fact)insert(newfact())retract(fact)訪問KnowledgeHelper——drools.XXXgetRule比如:System.out.println(drools.getRule().getName());將打印出正在執(zhí)行rule的名稱halt——停止rule的firings,把控制權(quán)交給應(yīng)用setFocus——針對agendagroups412024/5/5執(zhí)行時控制——Rule屬性SalienceAgendaGroupsActivationGroupsNoLoopRuleFlow422024/5/5議程JBossDrools介紹HelloDroolsDroolsRuleLanguageDomainSpecificLanguageFlowDroolsGuvnor432024/5/5DomainSpecificLanguage

領(lǐng)域特定語言自然語言與規(guī)則代碼翻譯器。適合非技術(shù)人員使用(業(yè)務(wù)分析員)。規(guī)則更加容易理解只要告訴規(guī)則做什么就好,不許關(guān)注怎么做。442024/5/5議程JBossDrools介紹HelloDroolsDroolsRuleLanguageDomainSpecificLanguageFlowDroolsGuvnor452024/5/5RuleflowDrools已經(jīng)提供了定義執(zhí)行順序的功能,比如salience,activationgroups等等當(dāng)處理大量rule集的時候,管理規(guī)則的執(zhí)行順序可能會變得復(fù)雜Ruleflow允許使用圖形化的流程圖來指定rule集的順序允許你指定rule集順序或者并行執(zhí)行要使用ruleflow,你需要:使用rule屬性來給每個rule指定一個所屬的ruleflowgroup定義一個ruleflow圖來描述這些ruleflowgroups在執(zhí)行中的順序46

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論