`
jefferson
  • 浏览: 279709 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

规则引擎以及blaze 规则库的集成初探之二——JSR94 的规则引擎API和实现

阅读更多

上面说到,目前在市场上留下多种规则引擎的产品,同样有多种的规则引擎语言,存在兼容性的问题。因此,我们必须提供一个统一的,标准的接口,来实现规则引擎的具体实现与业务应用系统之间的解耦,就像JDBC能够适应多种数据库一样,JSR 94也就顺势而生。当然,由于在语言级的标准路还很长,因此JSR 94只是在java中接口级别的标准。它的出现可以避免在更换实现产品时,必须重写应用程序逻辑和API调用的噩梦。JSR 94的官方网站为:http://jcp.org/en/procedures/jcp2

SR94 的规则引擎API介绍

我们先来看看包内主要的类,如图jsr94.bmp。

我们可以看到,包主要有javax.rules.admin和javax.rules两个目录,前一个目录,顾名思义,就是规则管理API(the rules administration API),后者是其他用途的API,我们称之为运行时API(the Runtime client API)。

规则管理API,我们从上图可以看到主要包括以下几个类:
RuleExecutionSetProvider类:
里面主要重载三个方法createRuleExecutionSet,从名称中可以看出,这个方法负责创建规则执行集。

LocalRuleExecutionSetProvider类:
与之对应的是 RuleExecutionSetProvider类,一个是远程的,一个是本地的(Local)。

规则执行集可以从如XML streams, input streams等来源中创建。在J2EE环境中,Java规则引擎的管理活动是应用服务器的一部分。因此一般规则库跟服务器不在同一台机器上,RuleExecutionSetProvider类可以从远程的经过汇集和系列化的数据来源中获取。

但一般情况而言,使用远程规则引擎或远程规则数据来源的情况并不多见,RuleExecutionSetProvider创建规则执行集会耗费较大的网络开销,所以一般使用的都是LocalRuleExecutionSetProvider类。


RuleAdministrator类:
四个方法:

java 代码
  1. deregisterRuleExecutionSet(String, Map)   
  2. registerRuleExecutionSet(String, RuleExecutionSet, Map)   
  3. getRuleExecutionSetProvider(Map)   
  4. getLocalRuleExecutionSetProvider(Map)   

前面两个方法是注册执行集的,第一个参数是URI,作为唯一标识。后面两个是获取远程和本地的RuleExecutionSetProvider。

javax.rules.admin.Rule类

RuleExecutionSet类
这个类就是封装了规则执行集,实例由RuleExecutionSetProvider的createRuleExecutionSet方法创建。


运行时API中比较常用的类有:
RuleServiceProviderManager类:这个类负责注册RuleServiceProvider和获取注册的RuleServiceProvider。分别见方法registerRuleServiceProvider(String, Class)/registerRuleServiceProvider(String, Class, ClassLoader)和getRuleServiceProvider(String)
注册和获取的方法,第一个参数都是RuleServiceProvider的唯一标识。


RuleServiceProvider类:主要的两个方法getRuleAdministrator()和getRuleRuntime(),负责获取RuleRuntime和RuleRuntime的实例。

RuleRuntime类:提供一个createRuleSession(String, Map, int)方法创建rule执行会话。第一个参数就是上面注册RuleServiceProvider和RuleExecutionSet时候的uri,唯一标识。拥有一个唯一标识的RuleServiceProvider和RuleExecutionSet,可以创建多个rule session。第三个参数是一个整数,它用于标示创建有状态的还是无状态的session。

StatefulRuleSession类和StatelessRuleSession类,这两个类都继承了RuleSession类,规则执行会话主要维护规则的执行调用。无状态会话的工作方式就像一个无状态会话bean.客户可以发送单个输入对象或一列对象来获得输出对象.当客户需要一个与规则引擎间的专用会话时,有状态会话就很有用.输入的对象通过addObject() 方法可以加入到会话当中.同一个会话当中可以加入多个对象.对话中已有对象可以通过使用updateObject()方法得到更新.只要客户与规则引擎间的会话依然存在,会话中的对象就不会丢失。

RuleExecutionSetMetadata类:接口提供给客户让其查找规则执行集的元数据(metadata).元数据通过规则会话接口(RuleSession Interface)提供给用户。

总之,规则管理API主要提供装载规则以及与规则对应的动作(执行集 execution sets)以及实例化规则引擎以及对执行集进行维护。规则可以从外部资源中装载,比如说URI,Input streams, XML streams和readers等等。同时,规则引擎API提供了这样一个机制,就是访问RuleServiceProvider和RuleExecutionSet的实例,两者都必须先在服务器上注册,然后才能根据注册中使用的uri来获取。这样,有助于对客户访问运行规则进行控制管理,它通过在执行集上定义许可权使得未经授权的用户无法访问受控规则。而运行时API是提供了一个对规则执行集访问的机制,类似于JDBC的访问方法。类RuleServiceProvider提供了对具体规则引擎实现的运行时和管理API的访问,将其规则引擎实现提供给客户,并获得RuleServiceProvider唯一标识规则引擎的URI.

我们且看,一个规则实现的注册,然后到客户访问和执行规则的步骤。

第一步:先实例化ruleServiceProvider,这个ruleServiceProvider,就是提供具体的规则引擎实现,不同的规则引擎提供商有不同的provider。它的格式标准用法一般是例如:com.mycompany.myrulesengine.rules.RuleServiceProvider,我使用blaze,因此代码片断如下:

java 代码
  1. Class ruleServiceProviderClass = Class.forName("com.blazesoft.server.deploy.javax.rules.base.NdRuleServiceProvider");   

第二步:注册ruleServiceProvider。上面说到,使用RuleServiceProviderManager,如下:

java 代码
  1. RuleServiceProviderManager.registerRuleServiceProvider(uri,ruleServiceProviderClass);   

第三步:获取刚才注册的ruleServiceProvider实例(上面说过,要使用ruleServiceProvider的实例,必须先注册)

java 代码
  1. RuleServiceProvider ruleServiceProvider = RuleServiceProviderManager.getRuleServiceProvider(uri);  

 

第四步:获取RuleAdministrator的实例,因为注册和管理规则执行集,都是在RuleAdministrator中进行的。

java 代码
  1. RuleAdministrator ruleAdministrator = ruleServiceProvider.getRuleAdministrator();   

第五步:在Administrator实例中获取rule execution set provider

java 代码
  1. HashMap properties = new HashMap();   
  2.     properties.put("name""My Rules");   
  3.     properties.put("description""A trivial rulebase");   
  4.     FileReader reader = new FileReader("rules.xml");   
  5. RuleExecutionSetProvider ruleExecutionSetProvider ruleAdministrator.getRuleExecutionSetProvider(properties);   

第六步:通过rule execution set provider的实例创建RuleExecutionSet

java 代码
  1. RuleExecutionSet res = resp.createRuleExecutionSet(reader, properties);   

第七步:注册RuleExecutionSet。

java 代码
  1. admin.registerRuleExecutionSet(uri, ruleSet, properties);   

下面是创建会话,然后执行规则集。
第八步:获取RuleRuntime 的实例,然后根据RuleRuntime 的实例创建执行会话。

java 代码
  1. RuleRuntime runtime = rsp.getRuleRuntime();   
  2. StatelessRuleSession session = (StatelessRuleSession)runtime.createRuleSession(uri, properties,RuleRuntime.STATELESS_SESSION_TYPE);   

最后:执行规则集,释放会话资源。

java 代码
  1. LinkedList list = new LinkedList();   
  2. list.add(oneObject);   
  3. list.add(anotherObject);   
  4. session.executeRules();   
  5.  List results = session.getObjects();   
  6. session.release();   

SR94 的规则引擎API的使用实例(继续中...)

  • 大小: 452.9 KB
分享到:
评论

相关推荐

    springboot ice规则引擎

    Easy Rules,Drools,Aviator表达式求值引擎,Rule Book、Oracle Rules SDK、Blaze (fico)、IBM Decision Manager,DTRules,DSL规则引擎 规则引擎由三部分 事实(Fact):已知对象,比如以上刷卡的行为,即成事实...

    Java RuleJava Rule.docx

    JSR-94提供了将规则引擎集成到Java SE或Java EE应用程序中的API,但并未规定业务规则的描述语言。它的目标是确保在不依赖特定规则引擎供应商的情况下,实现规则引擎的集成。 文档中还提到了一些已知的规则引擎实现...

    blaze-api:Blaze应用程序监视器的后端API

    Blaze API 利用了Node.js的非阻塞I/O和事件驱动特性,实现了高效、轻量级的数据处理。Node.js的模块化结构使得代码组织和重用变得更加容易,提高了项目的可维护性。 ### 2. 数据库连接:Postgres Postgres,全称...

    前端开源库-meteor-blaze

    Blaze 的响应式更新机制是通过 Tracker 库实现的。Tracker 监控数据源的变化,并在变化发生时自动重新计算模板。这种机制使得开发者无需手动管理视图的更新,只需关注数据模型即可。 ### 模板组件化 Blaze 支持...

    前端开源库-meteor-blaze-tools

    Blaze是Meteor自带的模板引擎,它允许开发者创建动态、响应式的用户界面,与数据模型紧密关联,实现数据驱动的视图更新。 二、 Meteor Blaze Tools的功能特性 1. **模板编译与优化**:Blaze Tools提供了一套完善的...

    【UnityAI引擎插件】Blaze AI Engine 轻松实现高效的人工智能

    Blaze AI Engine 是一款专为 Unity 开发者设计的 AI 引擎插件,旨在简化和增强游戏中的 AI 行为和决策系统。它提供了一套强大而灵活的工具,用于创建复杂的敌人行为、NPC(非玩家角色)交互、路径寻路以及各种智能...

    Blaze implement handbook

    标题“Blaze implement handbook”表明本文档是一本关于Blaze实现的手册,Blaze在IT行业特别是与FICO(信用评分和信用管理软件的领先提供商)相关,通常指的是FICO Blaze Advisor决策管理系统。FICO Blaze Advisor是...

    blaze

    blaze

    Java和Flex通过Blaze 通信

    在"UseBlaze"这个项目中,可能包含了实现Java和Flex通过BlazeDS通信的源代码、配置文件以及相关的教程文档。通过深入研究这些文件,开发者可以学习到如何设置BlazeDS服务、在Java中创建业务逻辑、在Flex中创建服务...

    Blaze AI Engine 1.9.8 unitypackage最新

    Blaze AI 是一款快速、高度可定制的强大通用敌人 AI 引擎,价格实惠!如果您想在游戏中加入任何类型的敌方 NPC,Blaze 将构建您选择的任何模型,并为您的游戏打造智能、逼真和具有挑战性的模型。它可以通过单击按钮...

    flex与java交互 blaze+cairngorm框架实现用户登录

    标题中的"flex与java交互 blaze+cairngorm框架实现用户登录"是指使用BlazeDS作为数据交换的桥梁,Cairngorm作为前端的架构指导,来实现一个用户登录功能。下面将详细讲解这两个技术以及如何在MySQL数据库中处理登录...

    flex的Blaze

    在Web开发领域,Flex以其强大的图形用户界面(GUI)组件库和ActionScript编程语言而闻名,而Blaze则为Flex提供了更为高效和优化的运行环境。 Blaze.war文件是一个Web应用程序归档(WAR)文件,它是Java Web应用程序...

    Blaze Decision

    决策引擎是指通过计算机程序设计来实现决策支持的系统,它能够根据输入的数据,通过预定的逻辑规则,自动作出决策。 描述中提到的“编写决策策略”说明该系统支持用户自定义规则和逻辑,以形成决策模型。而“策略...

    blaze:Meteor Blaze是一个功能强大的库,用于创建实时更新的用户界面

    相反,熟悉的模板指令(例如{{#if}}和{{#each}}与“透明React性”和数据库游标集成在一起,以便DOM自动更新。Blaze有两个主要部分: 模板编译器,可将模板文件编译为针对Blaze运行时库运行JavaScript代码。 此外,...

    Blaze AdvisorTM 业务规则管理系统.pdf

    一个针对金融银行业务规则引擎的规则管理系统,银行的业务确实比较重,比较多,设计比较复杂,需要一套很好的业务规则进行管理。

    通用风控决策引擎设计-度小满

    - **解决方案**:通过自建流程平台和规则平台,实现了全自研的可视化和自助式操作,大大加快了策略迭代的速度。 - **效果**:从最初的不到10次/月提升到了700+次/月,迭代周期从周级别缩短至小时级别。 2. **提升...

    TI Blaze EVM design scheme

    TI OMAP4470 Blaze 开发板是一款高度集成的评估与开发平台,主要面向移动计算、消费电子和工业应用等领域。该开发板采用OMAP4470处理器,具备高性能、低功耗等特点。原理图中详细列出了各个功能模块及其连接方式,...

    cpp-Blaze一个超快的Elasticsearch数据导出器

    1. **高性能**:由于采用C++编程,Blaze能够利用底层硬件的优势,实现快速的数据读取和处理。它优化了I/O操作和内存管理,从而在导出大量数据时保持高速。 2. **并行处理**:Blaze支持多线程和分布式处理,能够充分...

    ios Blaze VideoCell

    下面将详细介绍Blaze VideoCell的主要特性和实现原理。 1. **Blaze库**: Blaze是一个快速、可定制的表格视图库,它扩展了UITableView的功能,使得开发者可以更方便地创建复杂的表格布局。Blaze VideoCell就是基于此...

Global site tag (gtag.js) - Google Analytics