<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 19, 文章 - 93, 評論 - 17, 引用 - 0
    數(shù)據(jù)加載中……

    (一): 什么是Rule

    ?

    ??????? 學習JBoss Rules有幾天了,因為這方面的中文資料較少,所以這幾天都在看官網(wǎng)上的manual。這是一份不錯的教程,我把我看的一些重要的東西翻譯整理了一下,希望可以對想學習JBoss Rules的同學們提供一點幫助。
    ?????? 在開始這份教程之前,我先簡要介紹一下JBoss Rules:
    ?????? JBoss Rules 的前身是Codehaus的一個開源項目叫Drools。最近被納入JBoss門下,更名為JBoss Rules,成為了JBoss應用服務器的規(guī)則引擎。
    ?????? Drools是為Java量身定制的基于Charles? Forgy的RETE算法的規(guī)則引擎的實現(xiàn)。具有了OO接口的RETE,使得商業(yè)規(guī)則有了更自然的表達。
    ?
    ?????? 既然JBoss Rules是一個商業(yè)規(guī)則引擎,那我們就要先知道到底什么是Rules,即規(guī)則。在JBoss Rules中,規(guī)則是如何被表示的

    Rules

    ??????一條規(guī)則是對商業(yè)知識的編碼。一條規(guī)則有 attributes ,一個 Left Hand Side LHS )和一個 Right Hand Side RHS )。 Drools 允許下列幾種 attributes salience agenda-group no-loop auto-focus duration activation-group

    rule?“ < name > ”????
    ????
    < attribute > ? < value > ????
    ????when????????
    ????????
    < LHS > ????
    ????then????????
    ????????
    < RHS >
    end

    ??????規(guī)則的
    LHS 由一個或多個條件( Conditions )組成。當所有的條件( Conditions )都滿足并為真時, RHS 將被執(zhí)行。 RHS 被稱為結(jié)果( Consequence )。 LHS RHS 類似于:
    if ?(? < LHS > ?)?{
    ????
    < RHS >
    }

    ??????規(guī)則可以通過 package 關鍵字同一個命名空間( namespace )相關聯(lián);其他的規(guī)則引擎可能稱此為規(guī)則集( Rule Set )。一個 package 聲明了 imports global 變量, functions rules


    package ?com.sample

    import ?java.util.List
    import ?com.sample.Cheese

    global?List?cheeses

    function?
    void ?exampleFunction(Cheese?cheese)?{
    ????System.out.println(?cheese?);
    }

    rule?“A?Cheesy?Rule”
    ????when
    ????????cheese?:?Cheese(?type?
    == ? " stilton " ?)
    ????then
    ????????exampleFunction(?cheese?);
    ????????cheeses.add(?cheese?);
    end

    ??????對新的數(shù)據(jù)和被修改的數(shù)據(jù)進行規(guī)則的匹配稱為模式匹配( Pattern Matching )。進行匹配的引擎稱為推理機( Inference Engine )。被訪問的規(guī)則稱為 ProductionMemory ,被推理機進行匹配的數(shù)據(jù)稱為 WorkingMemory Agenda 管理被匹配規(guī)則的執(zhí)行。推理機所采用的模式匹配算法有下列幾種: Linear RETE Treat Leaps

    ??????Drools 采用了 RETE Leaps 的實現(xiàn)。 Drools RETE 實現(xiàn)被稱為 ReteOO ,表示 Drools Rete 算法進行了加強和優(yōu)化的實現(xiàn)。



    ??????一條規(guī)則的 LHS Conditional Element 和域約束( Field Constraints )。下面的例子顯示了對一個 Cheese Fact 使用了字面域約束( Literal Field Constraint

    rule? " Cheddar?Cheese "
    ????when
    ????????Cheese(?type?
    == ? " cheddar " ?)
    ????then
    ????????System.out.println(?
    " cheddar " ?);
    end

    上面的這個例子類似于:

    public ? void ?cheddarCheese(Cheese?cheese)?{
    ????
    if ?(?cheese.getType().equals( " cheddar " )?{
    ????????System.out.println(?
    " cheddar " ?);
    ????}
    }
    <!--[if !vml]--> <!--[endif]-->

    ??????規(guī)則引擎實現(xiàn)了數(shù)據(jù)同邏輯的完全解耦。規(guī)則并不能被直接調(diào)用,因為它們不是方法或函數(shù),規(guī)則的激發(fā)是對 WorkingMemory 中數(shù)據(jù)變化的響應。結(jié)果( Consequence ,即 RHS )作為 LHS events 完全匹配的 Listener

    rules 被加入 Productioin Memory 后, rules 被規(guī)則引擎用 RETE 算法分解成一個圖:



    ??????當 Facts assert 進入 WorkingMemory 中后,規(guī)則引擎找到匹配的 ObjectTypeNode ,然后將此 Fact 傳播到下一個節(jié)點。 ObjectTypeNode 擁有一塊內(nèi)存來保存所有匹配的 facts 。在我們的例子中,下一個節(jié)點是一個域約束( Field Constraint ), type = = “cheddar” 。如果某個 Cheese 對象的類型不是“ cheddar ”,這個 fact 將不會被傳播到網(wǎng)絡的下一個節(jié)點。如果是“ cheddar ”類型,它將被記錄到 AlphaNode 的內(nèi)存中,并傳播到網(wǎng)絡的下一個節(jié)點。 AlphaNode 是古典 RETE 術(shù)語,它是一個單輸入 / 單輸出的節(jié)點。最后通過 AlphaNode fact 被傳播到 Terminal Node Terminal Node 是最終節(jié)點,到此我們說這條規(guī)則被完全匹配,并準備激發(fā)。

    ??????當一條規(guī)則被完全匹配,它并沒有立刻被激發(fā)(在 RETE 中是這樣,但在 Leaps 中它會立刻被激發(fā))。這條規(guī)則和與其匹配的 facts 將激活被放入 Agenda ,由 Agenda 來負責安排激發(fā) Activations (指的是 rule + the matched facts )。

    下面的圖很清楚的說明了 Drools 規(guī)則引擎的執(zhí)行過程:


    ???數(shù)據(jù)被 assert WorkingMemory 后,和 RuleBase 中的 rule 進行匹配(確切的說應該是 rule LHS ),如果匹配成功這條 rule 連同和它匹配的數(shù)據(jù)(此時就叫做 Activation )一起被放入 Agenda ,等待 Agenda 來負責安排激發(fā) Activation (其實就是執(zhí)行 rule RHS ),上圖中的菱形部分就是在 Agenda 中來執(zhí)行的, Agenda 就會根據(jù)沖突解決策略來安排 Activation 的執(zhí)行順序。

    posted on 2006-12-03 09:52 BPM 閱讀(677) 評論(0)  編輯  收藏 所屬分類: 規(guī)則引擎

    主站蜘蛛池模板: 国产一级高清视频免费看| 光棍天堂免费手机观看在线观看| 色视频色露露永久免费观看| 免费人成在线观看视频高潮| 最新亚洲春色Av无码专区| 亚洲AV永久无码区成人网站| 成年女人毛片免费播放人| 中文无码日韩欧免费视频| 国产精品亚洲专区在线观看| 久久久久亚洲精品美女| 亚洲乱码国产一区网址| 成人超污免费网站在线看| 99xxoo视频在线永久免费观看| 一个人看的免费观看日本视频www| 亚洲国产精品人久久电影| 亚洲AV第一页国产精品| 亚洲一区二区三区影院 | 亚洲国产一区二区三区在线观看 | 国产JIZZ中国JIZZ免费看| 亚洲jizzjizz少妇| 亚洲午夜成人精品无码色欲| 久久狠狠爱亚洲综合影院 | 可以免费观看的国产视频| a级片免费观看视频| 无码成A毛片免费| aⅴ免费在线观看| 日本19禁啪啪无遮挡免费动图| 色吊丝最新永久免费观看网站 | 亚洲GV天堂无码男同在线观看| 亚洲国产av高清无码| 亚洲国产成人手机在线观看| 色噜噜噜噜亚洲第一| 国产免费区在线观看十分钟| 鲁大师在线影院免费观看| 999国内精品永久免费视频| 免费在线观看黄色毛片| 精品久久香蕉国产线看观看亚洲| 久久精品国产亚洲AV麻豆~| 亚洲中文无码av永久| 一级毛片在线完整免费观看| **实干一级毛片aa免费|