CkruleBRMS可以实现比较复杂的生命周期管理、测试、部署、审计等功能,是一个很理解的规则管理工具,不过有部分朋友的需求则是让他们自己的平台实现生命周期的管理。他们想用Ckrule编辑规则,然后将规则包上传到系统中,保存到特定的目录或数据库中,如果规则已经在运行中,那就刷新规则。这也是一个比较灵活的做法,各软件开发商根据自己的需要来管理规则。

    涉及到Ckrule调用的两个功能是
    1,规则包的读取
            即程序调用规则时,自动读到规则对象。而读取的逻辑是代码编写者自定义的,可以读取文件夹,也可以读取数据库。
    2,规则缓冲的刷新
            规则被加载一次之后,会被缓冲起来,以便下次读取时加快速度。当规则修改之后,需要调用RuleFacade的Refresh方法进行刷新,这样程序就会再加载一次规则。
    其他功能
    而把规则包从文件的形式变成数据库的二进制,或放在特定的文件夹中,就需要代码编写者自行处理了,但这不是什么困难的事情。
    调用的示意图如下:

    规则包的读取
    实现规则包的读取,要使用RuleFacade的高级接口,相关的文档已经发布在如下的网址
    实现的思路是把一个读取规则包的方法按接口的要求定义好,然后传给RuleFacade,而RuleFacade第一次加载规则包时,就使用传入的方法来进行,代码如下:
    ExtendAPI _ext = new ExtendAPI();
    _ext.AdminDataAccess = new AdminDataAccess();
    RuleFacade _inst = new RuleFacade();
    _inst.InitExtendAPI(_ext);
    上述代码中AdminDataAccess是一个IAdminDataAccess接口类型,该接口有GetPackage(string pkgName)方法,即传入包名称获取规则包。实现该接口,编写GetPackage方法时,可以从数据库读取数据,然后加载出来。
    规则缓冲的刷新
    使用RuleFacade中的Refresh方法,并传入规则包的名称,如new RuleFacade().Refresh("我的规则包"),注意规则包名称要与读取规则包名称中的pkgName相同,不然就不能刷新。
 
    完成了这两个方法后,管理规则的生命周期就显得比较简单了。


中文版 | 英文版 ©2014 Ckrule规则引擎 版权所有