日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Urule开源版系列4——Core包核心接口之规则解析过程

發布時間:2023/12/13 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 Urule开源版系列4——Core包核心接口之规则解析过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Urule運行規則文件,是如何進行的,通過一個請求doTest來探一下

com.bstek.urule.console.servlet.respackage.PackageServletHandler.doTest()方法執行測試規則,接受3個參數: data-測試數據;files- 規則文件名稱及版本;flowId- 規則中包含流程有效,流程id。

public void doTest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    ...
    KnowledgeBase knowledgeBase=(KnowledgeBase)httpSessionKnowledgeCache.get(req, KB_KEY);
    if(knowledgeBase==null){
        knowledgeBase=buildKnowledgeBase(req);
    }
    KnowledgePackage knowledgePackage=knowledgeBase.getKnowledgePackage();
    KnowledgeSession session=KnowledgeSessionFactory.newKnowledgeSession(knowledgePackage);
    ...
}

KnowledgeBase 類似Drools中的概念,是一個知識庫集合,包含規則、流程、參數變量定義等。規則調用的統一對外facade。

這里重點看buildKnowledgeBase方法
AbstractBuilder

2 PackageServletHandler.buildKnowledgeBase

buildKnowledgeBase 的邏輯分為3段:1. 解析req中規則文件名稱及版本;2. 解析規則;3. 緩存。

進一步看: KnowledgeBase knowledgeBase=knowledgeBuilder.buildKnowledgeBase(resourceBase); 這一行

3 KnowledgeBuilder.buildKnowledgeBase

核心流程:

循環資源文件,使用com.bstek.urule.builder.resource.Resource接口實現
如果規則是UL(規則文本文件),直接加載。
其他均為xml定義,使用ResourceProvider加載文件或數據庫中的xml文件
循環調用resourceBuilders,解析xml到各類規則文件中
構建Rete樹

ResourceBuilder

解析規則,從xml中解析為規則模型,接口有10個實現,分別對應頁面可添加的10中規則、庫文件。

RuleSetResourceBuilder 為例解析解析過程

ResouceBuilder通過Deserializer接口對parse接口完成適配。

Parser

Parse接口負責xml解析,接受dom4j輸入,解析為規則或庫文件實例

解析過程,就是一個遞歸規程,根據xml文件的標記屬性名稱,裝配規則對象實例。實現與Spring的XmlBeanFactory有相似也不同。

總結

總結

以上是生活随笔為你收集整理的Urule开源版系列4——Core包核心接口之规则解析过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。