《基于java的规则引擎》由会员分享,可在线阅读,更多相关《基于java的规则引擎(17页珍藏版)》请在金锄头文库上搜索。
1、基于 Java 的规则引擎目 录1.简介.3 1.1业务规则.3 1.2规则引擎产生背景.3 2.规则引擎.4 2.1业务规则.4 2.2规则引擎.4 2.3规则引擎的使用方式 4 2.4规则引擎架构与推理 5 2.5规则引擎的算法.6 3.Java 规则引擎.7 3.1Java 规则引擎商业产品.7 3.2规则引擎产品特点分析 8 3.2.1IBM WebSphere ILOG JRules8 3.2.2Redhat JBoss Dools.11 3.2.3JESS114.Java 规则引擎 API(JSR94)13 4.1简介.13 4.2简介 Java 规则引擎 API 体系结构13 3
2、.2.4规则管理 API13 3.2.5运行时 API14 4.3Java 规则引擎 API 安全问题.15 4.4异常与日志.15 4.5JSR94 小结16 5规则语言.171.简介简介1.1业务规则业务规则一个业务规则包含一组条件和在此条件下执行的操作 它们表示业务规则应用程序的一段业务逻辑。 业务规则通常应该由业务分析人员和策略管理者开发和修改, 但有些复杂的业务规则也可以由技术人员使用面向对象的技术语言或脚本来定制。业务规则的理论基础是: 设置一个或多个条件, 当满足这些条件时会触发一个或多个操作。1.2规则引擎产生背景规则引擎产生背景复杂企业级项目的开发以及其中随外部条件不断变化的
3、业务规则(business logic) ,迫切需要分离商业决策者的商业决策逻辑和应用开发者的技术决策, 并把这些商业决策放在中心数据库或其他统一的地方,让它们能在运行时(即商务时间)可以动态地管理和修改从而提供软件系统的柔性和适应性。规则引擎正是应用于上述动态环境中的一种解决方法。企业管理者对企业级 IT 系统的开发有着如下的要求:1.为提高效率,管理流程必须自动化,即使现代商业规则异常复杂;2.市场要求业务规则经常变化,IT 系统必须依据业务规则的变化快速、低成本的更新;3.为了快速、低成本的更新,业务人员应能直接管理 IT 系统中的规则,不需要程序开发人员参与。而项目开发人员则碰到了以下
4、问题:4程序=算法+数据结构,有些复杂的商业规则很难推导出算法和抽象出数据模型;5软件工程要求从需求-设计-编码,然而业务规则常常在需求阶段可能还没有明确,在设计和编码后还在变化,业务规则往往嵌在系统各处代码中;6对程序员来说,系统已经维护、更新困难,更不可能让业务人员来管理。基于规则的专家系统的出现给开发人员以解决问题的契机。规则引擎由基于规则的专家系统中的推理引擎发展而来。2.规则引擎规则引擎2.1业务规则业务规则一个业务规则包含一组条件和在此条件下执行的操作, 它们表示业务规则应用程序的一段业务逻辑。 业务规则通常应该由业务分析人员和策略管理者开发和修改, 但有些复杂的业务规则也可以由技
5、术人员使用面向对象的技术语言或脚本来定制。业务规则的理论基础是:设置一个或多个条件,当满足这些条件时会触发一个或多个操作。2.2规则引擎规则引擎什么是规则引擎?规则引擎是如何执行规则的?这可以称之为“什么”与“如何”的问题。 到底规则引擎是什么还是目前业界一个比较有争议的问题, 在 JSR-94 种也几乎没有定义。可以这样认为充分定义和解决了“如何”的问题, “什么”问题本质上也迎刃而解。也许这又是一种“先有蛋还是先有鸡”哲学争论。今后标准规则语言的定义和推出及相关标准的制定应该可以给这样的问题和争论划上一个句号。 本文中, 暂且这样述说什么是规则引擎:规则引擎由推理引擎发展而来, 是一种嵌入
6、在应用程序中的组件, 实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据规则做出业务决策。2.3规则引擎的使用方式规则引擎的使用方式由于规则引擎是软件组件, 所以只有开发人员才能够通过程序接口的方式来使用和控制它,规则引擎的程序接口至少包含以下几种 API:加载和卸载规则集的 API;数据操作的 API;引擎执行的 API。开发人员在程序中使用规则引擎基本遵循以下 5 个典型的步骤:创建规则引擎对象;向引擎中加载规则集或更换规则集;向引擎提交需要被规则集处理的数据对象集合;命令引擎执行;导出引擎执行结果,从引擎中撤出处理过的数据。使
7、用了规则引擎之后,许多涉及业务逻辑的程序代码基本被这五个典型步骤所取代。一个开放的业务规则引擎应该可以“嵌入”在应用程序的任何位置,不同位置的规则引擎可以使用不同的规则集,用于处理不同的数据对象。此外,对使用引擎的数量没有限制。2.4规则引擎架构与推理规则引擎架构与推理规则引擎的架构如下图所示:规则引擎的推理步骤如下:a.将初始数据(fact)输入至工作内存(Working Memory) 。b.使用 Pattern Matcher 将规则库 (Rules repository) 中的规则 (rule) 和数据 (fact)比较。c.如果执行规则存在冲突(conflict) ,即同时激活了多个
8、规则,将冲突的规则放入冲突集合。d.解决冲突,将激活的规则按顺序放入 Agenda。e.执行 Agenda 中的规则。重复步骤 b 至 e,直到执行完毕 Agenda 中的所有规则。任何一个规则引擎都需要很好地解决规则的推理机制和规则条件匹配的效率问题。当引擎执行时, 会根据规则执行队列中的优先顺序逐条执行规则执行实例, 由于规则的执行部分可能会改变工作区的数据对象, 从而会使队列中的某些规则执行实例因为条件改变而失效,必须从队列中撤销,也可能会激活原来不满足条件的规则,生成新的规则执行实例进入队列。 于是就产生了一种 “动态” 的规则执行链, 形成规则的推理机制。 这种规则的“链式”反应完全
9、是由工作区中的数据驱动的。规则条件匹配的效率决定了引擎的性能, 引擎需要迅速测试工作区中的数据对象, 从加载的规则集中发现符合条件的规则,生成规则执行实例。1982 年美国卡耐基梅隆大学的Charles L. Forgy 发明了一种叫 Rete 的算法,很好地解决了这方面的问题。目前世界顶尖的商用业务规则引擎产品基本上都使用 Rete 算法。2.5规则引擎的算法规则引擎的算法大部分规则引擎产品的算法,基本上都来自于 Dr. Charles Forgy 在 1979 年提出的RETE 算法及其变体,Rete 算法是目前效率最高的一个 Forward-Chaining 推理算法,Drools 项目
10、是 Rete 算法的一个面向对象的 Java 实现,Rete 算法其核心思想是将分离的匹配项根据内容动态构造匹配树,以达到显著降低计算量的效果。详情请见 CIS587:The RETE Algorithm,The Rete Algorithm,RETE 演算法, 专家系统原理与编程中第 11 章等。3.Java 规则引擎规则引擎目前主流的规则引擎组件多是基于 Java 和 C+程序语言环境, 已经有多种 Java 规则引擎商业产品与开源项目的实现,其中有的已经支持 JSR94,有的正朝这个方向做出努力,列出如下:3.1Java 规则引擎商业产品规则引擎商业产品Java 规则引擎商业产品主要有(
11、Jess 不是开源项目,它可以免费用于学术研究,但用于商业用途则要收费) :组织组织/厂商厂商名称名称主页主页说明说明JSR 兼容性兼容性ILOGJRuleshttp:/ IBM 收购JRules 4.6DroolsDroolshttp:/www.jboss.org/drools.html已 被RedhatJBoss 收购,转向商业化, 仍有社区版本基 于 JSR94 和Rete 算法Sandia LabsJESShttp:/herzberg.ca.sandia.gov/jess/JESS 6.1 p6JLisaJLisbhttp:/ AdvisorBlazeAdvisorhttp:/ 行业的
12、解决方案供应商,转向 BPM 领域3.2规则引擎产品特点分析规则引擎产品特点分析这里对目前市场上几个比较重要的基于 Java 的商业规则引擎产品进行特点分析。3.2.1 IBM WebSphere ILOG JRules作为企业 IT 基础设施的关键部分,业务流程管理越来越重要了。在 BPM 产品套件平台上,可以建模、部署、执行和监视企业的业务流程,业务流程可以包含业务规则。例如,在银行的账户验证过程中, 评估客户资格或确定价格的业务策略很复杂, 而且在快速发展的市场中常常会变动。 把这些策略硬编码在过程中是不合适的, 因为很难在运行时管理和维护业务规则。通过把业务规则和业务流程分隔开,单独地
13、执行和管理它们,可以提高整个业务流程的敏捷性和扩展性。ILOG 的 JRules 在融入到 IBM 的 WebSphere 套件体系后, 在架构层面和技术层面充分体现了这种业务流程与业务规则分离的思想,如下图所示:ILOG JRules 是先进的业务规则管理系统(Business Rule Management System,BRMS) ,提供编写、部署和管理业务规则等业务功能,支持高效地修改策略和快速部署策略。ILOG JRules 提供一种建模、实现和部署业务规则的系统化方法。它支持以有秩序的高效的方式进行协作。它包含的工具针对不同用户的技能和知识优化过,因此策略经理、业务分析师和开发人员
14、都可以获得所需的支持,可以尽可能发挥 BRMS 的价值。下图是 JRules 的架构:下面简要介绍 ILOG JRules 架构的每个部分:ILOG Rule Studio:用于开发规则应用程序的基于 Eclipse 的开发环境。它允许合作编辑和调试 Java代码和规则。特性包括:Eclipse 集成编辑规则时的自动纠正代码生成向导单一接口存储库源代码控制集成冲突和重复探测简便的部署ILOG Rule Team Server:这是一个 Web 环境,分布式业务团队可以通过它协作、创建、管理、验证和部署业务规则。ILOG JRules Rule Execution Server 提供一个健壮的与
15、 J2SE 和 J2EE 兼容的执行环境,用于部署和执行业务规则。Rule Execution Server 包含对业务规则进行同步、异步和基于 Web 服务的调用的组件,还包含一个 Web 管理控制台。它与 ILOG JRules Rule Studio 和 Rule Team Server 完全集成,支持开发人员和业务用户部署业务规则。ILOG JRules 是 IBM WebSphere 系列产品之一,可以与 Process Server 和Integration Developer 等其他 WebSphere 产品集成。ILOG JRules 让业务用户可以快速地创建和修改规则以满足经常变化的业务需求,不需要 IT 人员协助。它还有助于在整个企业内确保业务规则的可见性、 可跟踪性和质量, 让业务经理可以更快、更好地做出决策。由于这些原因,ILOG JRules 很适合与 IBM BPM 产品集成,从而为客户的业务流程场景提供策略和决策服务。下图给出一个从 Process Server 中的业务流程调用 JRules 服务的示例。说明了JRules 如何与 WebSphere