天天看點

【java規則引擎】簡單規則的rete網絡示意圖

一個Fact通過Session添加到規則網絡中,如何進行規則比對的大緻過程如下

(1)通過根結點對象從EntryPointNode的Map集合中找到相應的EntryPointNode對象

(2)EntryPointNode對象有一個ObjectTypeNode的Map集合,把fact的class轉化成ClassObjectType,從該集合中找到ObjectTypeNode

(3)OjectTypeNode對象的sink屬性引用着這個fact事實的規則網絡

(4)從sink屬性中的連結清單中拿出一個alphaNode進行比對,遞歸周遊所有alphaNode的子節點(sink屬性),根據alphaNode中的條件對Fact資料進行比較。

  ==>(向下(子節點)是試圖完整比對一條規則),如果向下有不比對的,表示該規則不符合目前fact,退出遞歸,開始向右比對。

  ==>(向右(nextRightTupleSinkNode屬性)開始試圖比對另一條規則)。

  ===>向下(目前AlphaNode子節點代表的規則的所有條件模式)比對,如果所有的子節點alphaNode中隐藏的條件都符合,則完全比對一條規則,形成議程加入沖突集合,待比對完所有的規則,再根據規則的優先級執行比對上的規則的結果部分,更改Fact的資料。

  ===>向右(進行另一個規則的比對),如果所有的子節點alphaNode中隐藏的條件都符合,則完全比對一條規則,形成議程加入沖突集合,待比對完所有的規則,再根據規則的優先級執行比對上的規則的結果部分,更改Fact的資料。

【java規則引擎】簡單規則的rete網絡示意圖