通过异步消息整合 ILOG JRules 和 WebSphere Process Server1

简介

决策服务现在正成为当前现实生活业务处理方案的重要需求。虽然 WebSphere Integration Developer (WID) 和 WebSphere Process Server (WPS) 已经嵌入了一个业务规则引擎,但用户只能用其来实现简单的规则或者有限的业务用户交互决策表。在大多数使用案例中,嵌入的规则引擎不能满足复杂的业务需求。因此,一个更专业、更强大的业务规则管理系统是必需的,这个管理系统需要能支持生活全领域的业务规则编写、测试、部署、执行和管理,并且能很容易地和 IBM WebSphere Business Process Management (BPM) 产品整合。ILOG JRules,作为一个市场领先的 Business Rule Management System (BRMS),是件完美的产品,能够为您提供编写、部署和管理业务规则的能力,并有效支持策略改变和快速策略部署 —— 一个敏捷的、全球整合的企业所需的属性。

本文提供了通过异步消息实现 ILOG JRules 和 WPS 整合的解决方案。从用户的角度来看这是非常重要的,因为它是当前业务系统的流行模式,还可能是整合遗留的 EIS 系统和 BRMS 系统的唯一方法。ILOG JRules 的异步消息架构,所需消息资源、服务器端配置和客户端开发实现将会在本文详细描述,向您显示如何通过异步消息来整合 ILOG JRules 和 WPS。所述的所有步骤都能在 ILOG JRules v6.7.3、WebSphere Process Server v6.2 和 WebSphere MQ v6.0 上进行验证。

异步消息

异步消息不同于同步通信方式,并不是进行即时通信。从请求者的角度来看,异步消息就意味着一个进程或者线程将一个信息发送到目的地,并不期待收到响应。从用户角度来看,异步消息就意味着接收一个消息,并不立刻响应消息的发送者。发送者可以根据特性,比如保证发送,来确保消息到达。

图 1 显示了如何使用 JMS 队列或者主题来设置输入消息。为了异步地收到消息,会使用消息监听器,消息驱动 bean。它对消息将会到达的 JMS 请求目的地进行监听,然后将它们传送到目标应用中。

图 1. 使用 JMS 队列或者主题设置输入消息

图 2 显示了如何使用 JMS 队列或者主题获取输出消息。在目标应用处理后,如果有响应消息,消息驱动 bean 负责发送响应消息。它会将结果发布到 JMS 响应目的地。

图 2. 使用 JMS 队列或者主题获取输出参数

JMS API 给消息系统实现选择。因为 API 提供一个 Publish-Subscribe 模型和一个点对点模型,ILOG JRules 实现这两个标准。能使用这两种模型将会帮助您找到问题的正确解决方案。

重要的是,如果异步消息是您的案例的正确解决方案 —— 什么是真正的同步或者异步并不是很明显的。

ILOG JRules 的异步消息架构

消息驱动规则 beans 是由 ILOG JRules 提供的、用于异步处理消息的企业 beans。图 3 显示了 ILOG JRules 的异步消息架构。

图 3. ILOG JRules 异步消息架构

客户应用程序使用 JMS (Java Message Service) 的消息标准来调用 JRules 服务。它把 JMS 消息发送到一个消息目的地,这个目的地的消息驱动规则 bean 正在监听已到达的消息。消息驱动 bean,或者 JRules MDB 是一个像消息监听器一样运作的企业 bean。在 bean 中,IlrRuleExecutionBean 是队列 MDB ,而 IlrRuleExecutionTopicEJB 是主题 MDB。您可以使用应用程序服务器资源来分配消息驱动规则 bean 的目的地。

清单 1. ILOG JRules 中的队列和主题 MDBs

 

<message-driven>

<ejb-name>IlrRuleExecutionEJB</ejb-name>

<ejb-class>ILOG.rules.bres.mdb.ejb.IlrRuleExecutionBean</ejb-class>

</message-driven>

 

<message-driven>

<ejb-name>IlrRuleExecutionTopicEJB</ejb-name>

<ejb-class>ILOG.rules.bres.mdb.ejb.IlrRuleExecutionBean</ejb-class>

</message-driven>

 

JMS 消息到达时,EJB 容器调用消息驱动规则 bean IlrRuleExecutionBean 或者 IlrRuleExecutionTopicEJBonMessage 方法。IlrRuleExecutionBean 或者 IlrRuleExecutionTopicEJB 可以从客户应用程序驻留在本地或者远程。反过来,消息驱动规则 bean 调用运行在 Execution Unit (XU) 的规则集。规则引擎的真正调用会被分配到一个简单的规则会话中。

规则引擎处理后,如果有响应消息,消息驱动规则 bean 就负责发送响应消息。它会将结果发布到 JMSReplyTo 头文件指定的 JMS 响应目的地。

在 ILOG JRules 中,用于 WebSphere Application Server (WAS) v6.0 的消息驱动规则 bean IlrRuleExecutionBeanIlrRuleExecutionTopicEJB 的实现类被打包在 <JRules_Installation_Directory>/executionserver/applicationservers/websphere6/jrules-bres-mdb-WAS6.jar。

整合 ILOG JRules 和 WPS 时,客户应用程序是运行在调用规则服务的 WPS 上的方案,服务器是 ILOG JRules execution server (RES) 所在的应用程序服务器。我们假设,RES 安装在 WAS 或者以 WAS 为基础的服务器上,例如,WPS、WESB (WebSphere Enterprise Service Bus)、WDPE (WebSphere Dynamic Process Edition),等等。

消息格式

接收到的 JMS 消息必须符合 ILOG JRules 要求的格式,这样才能被 JRules MDB 适当地使用。客户端应用程序应该相应地将 JMS 请求信息的格式转换。应该遵守以下格式:

1. 为了对调用参数化,消息头文件必须包括 ILOG_rules_bres_mdb_rulesetPathILOG_rules_bres_mdb_status JMS 属性。

表 1. 正在接收中消息的 JMS 属性

JMS 属性名称

类型

描述

强制性

ilog_rules_bres_mdb_rulesetPath

String

包含要执行的规则集路径

强制

ilog_rules_bres_mdb_status

String

必须设置为 “request”

强制

ilog_rules_bres_mdb_enableInterceptor

Boolean

设置为 true 将启用一个规则集执行拦截器。如果这个属性留空,它的值认为是 false

可选

ilog_rules_bres_mdb_userData

String

包含将传递到这个简单规则会话的 userData

可选

ilog_rules_bres_mdb_mainTask

String

包含将被执行的主任务的名称

可选

ilog_rules_bres_mdb_bom_access

Boolean

设置为 true 将启用 BOM 类型上的输入参数的表达式

可选

2. 已发送的消息体是在一个在 javax.jms.ObjectMessage 中的 java.util.Map

表 2. java.jms.ObjectMessage 中的消息体

Message Body (java.util.Map)

参数名称(String)

参数值(Serializable)

ilog_rules_bres_mdb_filters

关联到一个 java.util.Properties 对象并包含确定执行跟踪水平的过滤器

ILOG JRules 实现异步消息的两个标准:Publish-Subscribe 模型和点对点模型。本文说明如何使用点对点消息模型来整合 ILOG JRules 和 WPS。

点对点消息的资源需求

本小节介绍定义消息资源的过程,这个消息资源可以用于客户应用程序和 JRules MDB 中。WAS 和 IBM WebSphere MQ 中两者的默认消息提供者可以用作 JMS 消息提供者。这里提供的资源名只是例子,您可以按需要进行修改。

默认消息提供者的资源

WAS 的默认消息提供者被用作 JMS 消息提供者时,您需要在 WAS 管理控制台创建 WebSphere JMS 资源。您必须在节点范围内,默认消息提供者下创建这些资源。

1. 在服务集成总线上,分别创建请求队列目的地和响应消息:REQUESTQRESPONSEQ

图 4. 创建队列目的地

2. 在 JRules MDB 创建接收请求消息的 WebSphere JMS 队列:有 JNDI jms/BRESQueueInBRESQueueIn,JNDI jms/BRESQueueIn 使用 REQUESTQ 目的地。

图 5. 创建一个 JMS 队列

3. 创建一个发送响应消息的 WebSphere JMS 队列:有 JNDI jms/BRESQueueOutBRESQueueOut,JNDI jms/BRESQueueOut 使用 RESPONSEQ 目的地。

4. 创建一个用于连接 WPS 和默认消息提供者的 WebSphere JMS 队列连接工厂:有 JNDI jms/BRESQueueConnectionFactoryBRESQueueConnectionFactory,JNDI jms/BRESQueueConnectionFactory 连接队列目的地所在的服务集成总线。

图 6. 创建一个 JMS 队列连接工厂

以下文章点击率最高

Loading…

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注