zoukankan      html  css  js  c++  java
  • 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

    核心流程:

    1. 循环资源文件,使用com.bstek.urule.builder.resource.Resource接口实现
    2. 如果规则是UL(规则文本文件),直接加载。
    3. 其他均为xml定义,使用ResourceProvider加载文件或数据库中的xml文件
    4. 循环调用resourceBuilders,解析xml到各类规则文件中
    5. 构建Rete树

    ResourceBuilder

    解析规则,从xml中解析为规则模型,接口有10个实现,分别对应页面可添加的10中规则、库文件。

    RuleSetResourceBuilder 为例解析解析过程

    ResouceBuilder通过Deserializer接口对parse接口完成适配。

    Parser

    Parse接口负责xml解析,接受dom4j输入,解析为规则或库文件实例

    解析过程,就是一个递归规程,根据xml文件的标记属性名称,装配规则对象实例。实现与Spring的XmlBeanFactory有相似也不同。

    总结

  • 相关阅读:
    iOS新手在引入第三方出现的几个小问题
    XMPP安装中遇到需要卸载openfire的步骤
    KVC
    SQLite错误码
    简单对象的本地化(以图片为例)
    使用MD5完成自定义Person对象的加密过程
    IOS--工作总结--post上传文件(以流的方式上传)
    IOS开发系列 --- 核心动画
    监听键盘 防止输入时覆盖掉textfiled
    比较选择的开始时间和结束时间的大小
  • 原文地址:https://www.cnblogs.com/jason0529/p/13591150.html
Copyright © 2011-2022 走看看