当前位置:文档之家› 规则引擎解决方案调研报告-V1.0

规则引擎解决方案调研报告-V1.0

中国XXXXXXXX系统 for J2EE 规则引擎解决方案调研报告Version 1.0目录1.规则引擎41.1概述42.应用方案的一般实现52.1建立规则集72.2部署规则集72.3规则服务接口-JSR94 72.4对规则的计算72.5规则的过滤82.6使用计算结果83.现有的商业解决方案83.1ILOG新产品ILOGJRules83.2操作人员已经显示提单列表错误!未定义书签。

4.其它解决方案104.1提单和报检单完成对碰105.评估11规则引擎解决方案调研报告1. 规则引擎规则引擎是解决可变的商业规则的问题的1.1 概述规则引擎(Rules Engine)的运作机制是在内存中向对象应用一套规则。

首先内存使用来自调用对象的输入,例如用户档案请求会话。

这样,在任何规则实际激活之前,在内存中就已经有了一份用户档案的内容。

规则只能在一个上下文环境中执行,上下文环境把规则集和内存关联起来。

该环境提供了到Rules Engine的接口,Rules Engine控制着应用程序的规则部分与内存之间的关系。

内存由生产规则(production rules)负责操作,生产规则包含在规则集里。

,依照规则的左半边(left-hand sides,LHS)针对内存中的对象进行计算。

如果内存中的对象与LHS中描述的模式匹配,就会触发规则的右半边(right-hand side,RHS)指定的操作。

此外某些操作可能会在内存中加入新的对象。

例如,规则 Classifier 对用户年龄进行测试,如果 USER.age > 45,就在内存中加入一个新的Classification 对象。

生产系统的运行,要执行以下操作:1.匹配: 估计规则的LHS,判断哪个规则与当前内存中的内容匹配。

2.冲突解决:选择一个LHS匹配的规则。

如果没有规则匹配,就停止解释。

3.操作: 执行选中规则RHS中指定的动作。

4.返回第1步。

规则会一直在内存中执行,直到冲突解决集变为0时才停止(也就是没有规则能激活了)。

在Rules Engine停止之后,规则管理器组件会返回一个对象列表,列表中包含内存中仍然存在的对象。

一个可能的场景就是,还剩下一个类型为“Classification”或“ContentQuery”的对象。

Rules Manager接着对剩下的对象进行迭代,用可选的对象过滤器过滤它们。

过滤器可以有选择地忽略某些对象或者对某些对象进行变换。

1.2 规则引擎分类值得注意的是,存在不同类型的规则引擎,在决定如何应用一种工具之前理解这种工具的用途是极其重要的。

当您跨业务规则领域进行调查研究时,您将注意到这些工具可以分为以下几类:•简单业务规则(simple business rule)——通过一张简化的、直观的词汇表来表达并且是在应用程序或业务流程的可变性情况下调用的一种业务规则。

这种规则引擎的一个很好的例子就是 ilog、Blaze 和 IBM 的 BRBeans。

•人工智能规则(artificial intelligence rule)——管理 AI 和数据挖掘(Data Mining)产品中算法行为的规则。

这种类型的规则引擎的一个例子就是DB2® Intelligent Miner™ 产品。

•事件相关规则(event correlation rule)——在事件相关性中用到的规则,用于将一套各自独立的事件聚合成一种聚合的(aggregated)有意义的形态。

这种类型的规则的一个很好的例子就是Tivoli® Event Console 系统管理产品。

•数据为中心的规则(data-centric rule)——这些是约束对数据的检索和更新的规则。

这些约束控制着如何转换数据以及谁可以访问数据,并通过加强语法、语义和上下文保留了数据的完整性。

这种规则引擎的一个很好的例子就是 Versata。

•转换和验证规则(transformation & validation rules)——这些是应用集成或信息集成场景中定义对数据的修改的规则。

这些规则定义数据是如何修改、净化或验证的。

提供了这种规则的产品包括 WebSphere Business Integration 和 DB2 Warehouse Manager。

2. 应用方案的一般实现要使用规则服务(Rules Service),有几个步骤。

首先,必须预先建立规则,然后把规则部署到一个正在运行的规则服务器实例中。

接着,规则被计算,而计算结果在返回用户之前,有可能先被过滤。

最后,用户在应用程序代码里利用经过规则处理的结果。

一般的应用环境:J2EE应用环境:2.1 建立规则集规则集是符合特定模式的规则文件或者规则库。

2.2 部署规则集每个应用程序都与自己的数据实例相关联,这些数据的可以存储于文件,或者数据库系统。

这些数据,都能通过数据同步机制进行部署。

作为最佳实践,大型的规则应用系统采用数据库存储规则。

规则服务使用数据同步机制(Data Sync)来把规则集部署到运行服务器。

也就是说,用户只需把规则集保存在规则库,规则集就会自动被部署。

如果规则库里已经存在相同的规则集,那么数据同步机制会自动检查规则集的变化,规则服务数据库会自动刷新规则集的实例。

这意味着我们可以在服务器运行的时候调整规则,或者对解析错误进行调试。

修改规则集之后,无需重新启动服务器。

2.3 规则服务接口-JSR94规则引擎的调用接口可以参照JSR942.4 对规则的计算对规则集进行计算,可以考虑通过以下步骤:•规则引擎初始化,建立“内存”。

•规则控件指明要使用哪个规则集,并且还可以进一步指定要对哪个规则进行计算(默认是全部规则都计算),以及是否过滤计算结果。

所有这些参数都可以通过Rules控件进行配置,并传递给规则引擎,用于对规则进行计算。

•开发人员建立对象,并把对象加入“内存”。

示例对象可能是用户的档案、Request对象等。

这些参数会作为变量传递给规则控件的evaluate() 方法•通过RulesExecutorControl调用规则引擎。

•规则引擎根据输入的规则集和输入的对象创建工作区•规则引擎反复触发,根据输入对象的状态和规则条件执行规则。

•当规则引擎遇到没有规则可以触发的时候,计算结果和所有的原始输入对象一起存在于内存里。

•由于输入对象也是结果的一部分,因此可以根据一个类对结果进行过滤。

2.5 规则的过滤假如现在已经有了一个规则,就像前面例子里的简单规则一样。

应用程序的目标是输入用户的档案,检查用户的某些属性,根据这些属性来触发一些规则,如果规则的计算结果为真,则初始化一个新的Integer对象。

然后在页面流(page flow)里,可以使用Integer值进行决策。

在规则引擎已经触发完所有规则并完成所有预定工作结束之后,会返回一个 Iterator对象,它描述了仍然保留在内存里的所有对象。

可能没有必要关注内存里有哪些对象,例如用户档案、Request对象等,真正想从结果中得到的,可能只是Integer对象。

所以我们需要对结果进行过滤。

对象过滤器是一个参数,可以在计算规则时传递给规则。

如果使用规则控件,参数在控件的属性里指定。

如果直接使用控制管理器,参数在 evaluate() 方法的参数中指定。

2.6 使用计算结果现在,假设你已经建立了上面的简单规则,用RulesExecutorControl计算了规则,而且还过滤了计算结果。

那么,就可以在程序中直接使用该结果了。

3. 现有的商业解决方案3.1 ILOG公司的新产品ILOGJRulesILOG JRules(商业规则工具) 提供一个软件组件,用户可以用规则来描述他的商业逻辑, 并且可以正确运行这些规则。

ILOG JRules利用五个功能组件来构建整套业务管理系统。

一是规则开发环境,用于完整的开发、调试、发布和管理商务规则系统的图形环境;二是商务规则库,存放规则及其相关数据,它是商务规则管理的基石,能根据工业标准被扩展;三是商务规则的管理,能够实现规则查询、规则历史读取、规则版本控制、规则读写权限设置以及规则状态管理;四是商务规则语言,让用户使用习惯的商务语言预定义商务规则;五是规则编辑器,它具有直观友好图形界面,非技术人员可以通过非常简单的操作等方式创建或修改商务规则。

案例:Resource at3.2 JESSJess是1995年由美国Sandia国家实验室分布式系统计算组成员Ernest J.Friedman-Hill用Java实现的一个经过扩充的CLIPS版本。

它以CLIPS的设计原理为基础进行编写,除继承了CLIPS的优点外,还具有许多自己独特的特征,如支持正向和逆向推理,可以在系统运行环境下直接调用Java的类库等,这些特点将专家系统的开发过程同功能强大的Java语言结合起来,使采用Jess语言开发的专家系统具有良好的移植性、嵌入性,可以方便地应用到网络上的不同机器中。

另外,Java多线程机制使Jess可以与其他应用程序并发执行,同步机制保证了对共享数据的正确操作,通过使用不同的线程完成特定的行为,就可以很容易地实现网络上的实时交互行为。

目前,Jess 被广泛用于学术、工业、商业等领域,是一个有着广阔发展前景的专家系统开发平台。

•Jess的基本组成和知识表示同大多数专家系统工具一样,Jess的核心也是由事实库、规则库、推理机三大部分组成,并采用产生式规则作为基本的知识表达模式。

在Jess中,事实包括简单事实和对象事实。

简单事实就是一个描述事物的断言,而对象事实除此之外还封装了方法,可以接受外界信息改变自身的特征。

这一概念本身并不是Jess首次提出的,ART-IM、CLIPS都支持这一概念。

但Jess表达对象事实的方法确实别具一格:它用Java而非系统本身的语言来定义对象。

在CLIPS 6.0中,对象事实通过系统本身的语句defclass和make-instance来定义,但在Jess中,类的定义由Java语言书写,编译通过后即可动态地加入系统中。

用Java虚拟机编译通过后,通过defclass命令将该类加入系统,它就可以执行类似于CLIPS中对类的各种操作,如生成它的一个实例、调用它的方法等。

由此可见,Jess可以方便地调用Java中的类库,使用Java中的各种数据结构和方法,从而具备其他系统不可比拟的优良的嵌入能力。

Jess通过模式匹配语言对事实进行操作。

在Jess中,模式匹配操作符的类型有很多,从可以同任意事实进行匹配的单一操作符到只能同满足特定约束值的事实进行匹配的复杂操作符。

特别要指出的是,Jess中有“unique”条件元素,它告诉系统同该模式匹配的事实是惟一的。

相关主题