一個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的資料。