ILOG JRules 规则集应用与客户端的集成.docx

上传人:b****5 文档编号:7715926 上传时间:2023-01-26 格式:DOCX 页数:12 大小:198.30KB
下载 相关 举报
ILOG JRules 规则集应用与客户端的集成.docx_第1页
第1页 / 共12页
ILOG JRules 规则集应用与客户端的集成.docx_第2页
第2页 / 共12页
ILOG JRules 规则集应用与客户端的集成.docx_第3页
第3页 / 共12页
ILOG JRules 规则集应用与客户端的集成.docx_第4页
第4页 / 共12页
ILOG JRules 规则集应用与客户端的集成.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

ILOG JRules 规则集应用与客户端的集成.docx

《ILOG JRules 规则集应用与客户端的集成.docx》由会员分享,可在线阅读,更多相关《ILOG JRules 规则集应用与客户端的集成.docx(12页珍藏版)》请在冰豆网上搜索。

ILOG JRules 规则集应用与客户端的集成.docx

ILOGJRules规则集应用与客户端的集成

ILOGJRules规则集应用与客户端的集成

  2010年10月11日  来源:

ibm  作者:

王增光信天骄黄若波  收藏本文

重点讨论了规则应用程序中的执行对象模型(XOM)的Java设计方式以及此种方式给规则的编写和执行带来的好处,并在最后给出一种基于Web服务调用方式的部署在RuleExecutionServer环境下的规则集与客户机的集成方案和实现过程。

  本文首先介绍了所举实例中要应用的ILOGJRulesV7.0架构中的主要部分及特性。

其次,以设计和实现一个业务规则集应用的开发与集成场景举例,详述了业务规则应用的开发、部署和客户端对其调用的过程。

重点讨论了规则应用程序中的执行对象模型(XOM)的Java设计方式以及此种方式给规则的编写和执行带来的好处,并在最后给出一种基于Web服务调用方式的部署在RuleExecutionServer环境下的规则集与客户机的集成方案和实现过程。

  简介

  通常情况下,如果企业的业务策略在应用程序中实现的时候,随着业务的发展和策略的不断变化,这种实现方式就会变得越来越复杂、缺少灵活性而造成无法做出快速的反应。

而业务规则管理系统(BusinessRuleManagementSystem,BRMS)的出现,对于应用程序的开发者和业务用户来讲,则提供一种对业务策略的管理更加有效的解决方案。

应用业务规则管理系统,开发者和架构师可以在独立于应用逻辑之外去管理业务逻辑,允许业务用户独立于企业的IT部门去管理业务策略。

与此同时,像SOA这样的IT架构的出现,使业务逻辑可以在业务规则管理系统中封装成供应用程序和业务流程调用的规则服务。

IBMILOGJRules就是一个很好的允许业务人员和IT开发人员使用的业务规则管理系统,它可以提高业务发展,使业务策略自动化。

  在对规则集调用的过程中,根据XOM和设计需求,可以采用POJO、EJB、JMS、Web服务等调用方式。

本文结合场景实例提出了一种基于Web服务的调用实现方式,同时,在ILOGJRulesV7.0的使用指南文档中,也介绍了一种用JAX-WS2.1.1将规则集部署为决策服务的调用方式,如感兴趣,请参见指南Integratingintoanenterpriseapplication部分。

本文给出的方案中选用Axis创建调用规则集的Web服务,调用过程效率高、响应快,编程更加方便、灵活,且能满足SOA的架构要求。

本文应用ILOGJRules架构的主要部分及特性

  ILOGJRulesV7.0通过一组创新模块来创建、管理和部署业务规则,从而实现完善的性能。

  ILOGJRulesRuleStudio:

适用于规则应用程序的集成开发环境(IDE)。

RuleStudio直接针对IDE的Eclipse系列,其中包括EclipseIDE。

RuleStudio支持对ILOGJRulesRuleExecutionServer进行规则集调试和部署,还可以通过RuleTeamServer实现业务规则的编写者之间的协作。

  ILOGJRulesExecutionServer:

是一个稳定的与J2SE和J2EE兼容的可管理的规则执行环境,运行在Web服务器或应用程序服务器上。

它将规则引擎打包作为一个JavaConnectorArchitecture(J2C)资源适配器。

RuleExecutionServer包括一个Web管理控制台,可以对部署在上面的规则集进行有效的版本控制和管理。

RuleExecutionServer与RuleStudio和RuleTeamServer完全集成,可以同时支持开发人员和策略管理者的业务规则部署。

  具有下列特性:

  易用性好:

  在集成了Eclipse的环境中工作,通过自动更正和“智能规则”轻松快速地使用与自然语言一致的规则语言编写规则;

  使用静态规则分析检测冲突和冗余;

  规则流的创建可以进行可视化的组装和拆分,并满足所设计的粒度要求;

  可独立于应用逻辑对业务规则应用程序进行快速部署和调试;

  管理方便:

  通过基于权限的规则访问向业务人员提供控制权的同时,维护应用程序完整性;

  通过测试、共同调试和重构进行反复开发;

  使用单一界面和规则库管理代码和规则;

同时应对多个发布周期,在准备下一个产品发布的同时维护仍在进行的产品发布;

  可控性:

  通过受控的执行过程来报告和监控规则;

  查看有关所有规则变更和部署地完整历史记录;

  业务规则应用场景描述

  在保险或金融等行业解决方案中,如员工的薪水计算或员工的升迁降职处理,都会根据员工的各项指标和企业管理条例来进行相应的计算和处理,这个过程中就要涉及到大量的业务策略或规则。

本文将以员工薪水计算功能中的业务规则应用开发与集成场景为举例,不同的规则决定

  不同的薪水计算方式,但由于实际需求中,这些规则又是灵活多变的,因此,把薪水计算的规则提取出来并应用ILOGJRules使其在不影响应用程序代码性能的前提下进行独立地快速开发、调试、部署和管理,并以一种Web服务的调用方式对其与任意客户端进行集成,是一种非常好的解决方案

  执行对象模型(XOM)的设计

  执行对象模型是一种在规则被执行的过程中要基于的一种对象模型。

业务规则通过业务对象模型(BOM)中的词汇和术语来编写,之后被ILOGJRules编译成ILOGRuleLanguage(IRL)语言,在规则的运行状态中,规则引擎可以访问XOM中的属性和方法。

  在JRules中,执行模型的实现方式主要可分为二种,一种是JavaClasses,即JAVAXOM;另一种是XMLSchema,即DynamicClasses。

规则引擎访问XOM时依据XOM的实现方式而采用不同的访问方式。

例如,若采用JAVAXOM,则要将它打包到应用程序端中并随之一起部署,在运行的时候,应用程序的类加载器会使执行环境可以访问它。

在不同的情况下,可以根据实际需求来选择XOM的设计和实现方式,但Java类的实现方式相比之下,更加易用,因为它不仅含有属性,而且类中定义的方法会给业务规则的设计和编写过程带来很大的方便和灵活性。

因此,本文中设计XOM选择了Java类的实现方式,通过自动解析Java类,用它的方法和属性来创建业务对象模型(BusinessObjectModel)。

然后就可以通过业务对象模型中所包含的词汇术语来编写规则。

清单1为执行对象模型的部分代码,即设计为一个Java类,其中类Agent的设计在本例中代表员工信息。

该类也会定义为规则集的输入和输出参数,当它作为规则集的输入时,它的基本属性中包括了薪水计算规则用到的一些前提条件;在规则的执行过程中,它的一些属性会保存中间变量值;当计算规则执行结束后,它的一些属性值为代表薪水计算的各项结果并被保存,作为输出参数返回到客户端。

此类中的方法的灵活之处在于它可以用来计算一些中间变量值或实现一些较为复杂的计算过程等,以提供给业务规则执行时调用(与XSDSchema方式相比作用较明显)。

  清单1.设计执行对象模型部分代码示例

 Public class Agent {  

  // 以下属性为计算的前提条件变量(部分) 

  privateDate onboardDate;// 入司日期 

  privateString rank;// 职级 

  privatedoubleperformanceAmount;// 业绩额 

  privateBooleanworkState;// 是否在职 

  privateString[][] rankHistory;// 职位和时间历史记录 

  privateDate computationDate;// 计算薪水的日期 

 . . . . . .  

  // 以下为薪水计算规则执行过程中所需的中间变量(部分) 

  publicBooleanqualified =false;// 是否有授予某项奖金资格 

  publicintonboardYearNum = -1;// 入司年份 

  publicintonboardMonthNum = -1;// 入司月 

  publicintonboardDayNum = -1;// 入司日 

 . . . . . .  

  // 以下属性为保存计算结果变量 

  privatedoublestartupsSubsidy;// 创业津贴 

  privatedoublequarterAward;// 个人季度奖金 

  privatedouble totalAmount;// 薪水总计额度 

  *设计方法* 

  // 计算月平均业绩额 

  public double computeMonthlyAmount(){  

    . . . . . .  

 }  

 Public double getXXX(){ … }  

 Public double setXXX(){ … }  

 . . . . . .  

 } 

完成规则集开发、部署的其它主要步骤

  在本例中完成以上工作之后和对规则集的调用之前,还需要依次完成下列主要步骤:

  首先在RuleStudio中创建一个规则工程,在设计阶段导入JavaExcutionObjectModel,即XOM。

  然后通过工具解析导入的XOM自动创建业务对象模型(BusinessObjectModel),至此,我们可以看到用来编写业务规则的词汇和术语。

  在接下来的业务规则的编写过程中,就可以定义规则分类包,并应用ILOGJRules支持的三种自然语言、决策表或决策树的方式直观地对规则进行灵活快速地编写。

  定义规则集的输入和输出参数。

  在规则流(ruleflow)的设计过程中,一个规则集只能定义一个主规则流(mainflowtask属性为true),它包含规则集执行的入口和出口,但一个规则集可以支持多个子规则流(mainflowtask属性为false),每一个子规则流又是由执行起点和终点、一条或多条业务规则、判断分支等共同组成,而一个主规则流又可以根据业务规则需要由多个子规则流组装而成。

这样的规则流的设计粒度就可以达到我们所要求的粒度,可以对主规则流进行灵活的拆分和组装,非常灵活、方便快捷。

  在完成了上述的工作以后,就可以在RuleStudio工具中自动创建将规则集打包的规则应用工程RuleApp,并把它实时部署到RuleExecutionServer上,之后就可以通过规则路径去调用RuleApp中的Ruleset,同时,通过Web权限管理控制台就可以对其进行有效管理。

  至此,在本例中已成功完成了业务规则集的开发和部署,也可以在RuleStudio中进行调试。

  业务规则应用与客户端的集成实现

  基于Web服务调用方式的业务规则应用与客户端的集成模型

调用过程如图1所示:

  图1.客户端对ILOGJRules规则集调用集成模型

    查看原图(大图)

  在本文给出的调用模型中,需要先将规则应用部署在运行在Web服务器中规则执行环境RuleExecutionServer中。

调用的实现过程中,主要先采用POJO会话方式对规则集进行本地调用,再将本地调用规则集的Java类利用Axis发布成Web服务,最后在应用程序客户端创建调用此规则服务的代码,即成功实现了以Web服务方式调用规则应用的目的,从而实现与客户端的良好集成,这种调用方式效率很高。

由于先采用对规则集的本地调用,因此,需要将具有本地调用规则集功能的Web服务工程和规则执行环境RuleExecutionServer部署在相同的Web服务器上。

  在可管理的规则执行环境RuleExecutionServer中,规则引擎由ExecutionUnit(XU)来控制,而ExecutionUnit(XU)是一个资源适配器,它能够管理规则引擎,装载规则集,以及在应用程序和规则引擎之间传递数据。

XU处理规则集执行的低层细节,如池和多线程处理,并能提供对资源的访问和管理热部署。

应用服务器或应用程序客户机使用XU连接规则引擎。

  创建调用规则集应用的Web服务工程

  下面给出具有本地调用规则集功能的Web服务的工程目录结构,如图2所示:

  图2.调用规则集的WebService工程文件目录结构图

在本例中,创建本地调用规则集的Web服务工程并将其命名为IncomeService,从服务发布成功后的目录结构图中,可以清楚看到所需要和生成的各个主要文件。

下面对一些重要的文件和代码进行给出示例和说明。

  创建本地调用规则集的核心类

  本例中调用规则集的核心类是一个Java类,例中名为:

ComputeIncomeBean.java;它

  获得来自于客户调用服务时的输入参数,在成功调用并执行薪水计算规则集后,获得保存有计算结果的参数Agent,并将其作为服务的输出参数返回给客户端。

  清单2.本地调用规则集的核心类源代码示例

 public class ComputeIncomeBean { 

 public Agent computeAgentIncome(Agent agent){ 

 String executionError = null; 

 String rulesetVersion = Messages.getString("latest"); 

 IlrSessionFactory sessionFactory = null; 

 try { 

 // get a rulesession 

 if (sessionFactory == null) { 

  sessionFactory = new IlrJ2SESessionFactory(); 

 } 

 // Create a session request object 

 IlrSessionRequest sessionRequest = sessionFactory.createRequest(); 

 // rulesetPath="/ComputeSalaryApp/2.0/ComputeSalary" 

 String rulesetPath = Messages.getString("rulesetPath"); 

 if (!

rulesetVersion.equalsIgnoreCase(Messages.getString("latest"))) { 

  rulesetPath = rulesetPath + "/" + rulesetVersion; 

 } 

 sessionRequest.setRulesetPath(IlrPath.parsePath(rulesetPath)); 

 // Enable trace to retrieve info on executed rules 

 sessionRequest.setTraceEnabled(true); 

 sessionRequest.getTraceFilter().setInfoAllFilters(true); 

 // Set the input parameters for the execution of the rules 

 Map inputParameters = sessionRequest.getInputParameters(); 

 inputParameters.put("agent", agent);   

 IlrStatelessSession session = sessionFactory.createStatelessSession(); 

 // execute and get the response for this request 

 IlrSessionResponse response = session.execute(sessionRequest); 

 IlrExecutionTrace sessionTrace = response.getRulesetExecutionTrace(); 

 agent = (Agent) response.getOutputParameters().get("agent"); 

 } 

 return agent; 

 } 

 } 

使用context.xml配置数据源

  在META-INF的目录下,创建一个context.xml文件,在该文件中添加配置数据源信息。

Reloadable属性如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes目录的变化,自动装载新的应用程序,可以在不重起tomcat的情况下改变应用程序。

name表示指定的JNDI名称,必须为jdbc/resdatasource,type表示数据源类型,使用标准的javax.sql.DataSource。

  清单3.context.xml文件源代码

xml version='1.0' encoding='utf-8'?

> 

  

   

     prefix="IncomeService_log" 

     suffix=".txt" 

     timestamp="true"/>      

   

     global="jdbc/resdatasource" 

     type="javax.sql.DataSource"/> 

     

  将调用规则集的核心类发布成Web服务

  利用工具将类ComputeIncomeBean.java发布成WebServices,并自动生成Web服务描述文件ComputeIncomeBean.wsdl和Web服务部署描述文件deploy.wsdd。

发布Web服务操作如图3所示:

  图3.利用工具创建Web服务

   查看原图(大图)

  创建或修改服务器端配置文件server-config.wsdd

  该文件记录了axis已发布的Web服务的描述信息。

每当部署一个新的Web服务时,新服务的描述信息要加入到server-config.wsdd中。

将deploy.wsdd文件中标签中的内容(即发布的服务描述信息)拷贝添加到erver-config.wsdd文件中。

清单4展示了拷贝部分的重要代码。

  清单4.server-config.wsdd文件新增服务描述信息部分源代码示例

 

RPC" style="wrapped" use="literal"> 

 

//services"/> 

   

  

//services,http:

//agentbom"/> 

   

   

   

   

  

operNS="http:

//services" 

  xmlns:

retNS=http:

//services xmlns:

rtns="http:

//agentbom" name="computeAgentIncome" 

  qname="operNS:

computeAgentIncome" returnQName="retNS:

computeAgentIncomeReturn" 

   returnType="rtns:

Agent" soapAction=""> 

    

pns="http:

//services" xmlns:

tns="http:

//agentbom" 

         qname="pns:

agent" type="tns:

Agent"/> 

    

    

   … … 

   

ns="http:

//agentbom" qname="ns:

ExtensionProperty" 

    type="java:

agentbom.ExtensionProperty" 

    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" 

     deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" 

     encodingStyle=""/> 

   … … 

  

导入Web服务工程库要用到的重要JAR包

  同时,要将XOM的Java类导出,agentbom.jar文件包放到项目的lib库文件中,调用规则引擎的核心代码中要用到此类,并将其作为Web服务的参数。

同时还要把调用规则引擎时主要用到的jrules-res-execution.jar包也放入库中。

如图4所示

  图4.Web服务工

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1