ILOG JRules 和 WebSphere Process Server 集成概述

业务流程管理(Business Process Management,BPM)和业务规则管理系统(Business Rules Management System,BRMS)是当今企业中间件产品中的两个热门领域。随着客户需求的增加,BPM 和 BRMS 的集成越来越常见,这为客户提供业务流程敏捷性和可扩展性更高的解决方案。WebSphere Process Server V7.0 和 ILOG JRules V7.0.2 分别是 BPM 和 BRMS 的核心产品。本文首先简要介绍 Process Server 和 JRules,然后详细讨论如何通过集成 ILOG JRules 和 Process Server 实现敏捷的业务流程,包括安装和配置、不同的集成方法(比如 POJO、EJB、Web 服务和 JMS/MQ)以及在 Process Server 中使用 Common Event Infrastructure (CEI) 监视 JRules 服务。

本文概述 ILOG JRules 和 WebSphere Process Server 的集成。如果需要关于本文提到的集成点的详细指南,请参见 Integrate WebSphere ILOG JRules with WebSphere Process Server 白皮书。

 

概述

作为企业 IT 基础设施的关键部分,业务流程管理越来越重要了。在 BPM 产品套件平台上,可以建模、部署、执行和监视企业的业务流程,业务流程可以包含业务规则。例如,在银行的帐户验证过程中,评估客户资格或确定价格的业务策略很复杂,而且在快速发展的市场中常常会变动。把这些策略硬编码在过程中是不合适的,因为很难在运行时管理和维护业务规则。通过把业务规则和业务流程分隔开,单独地执行和管理它们,可以提高整个业务流程的敏捷性和可扩展性。图 1 说明了这种思想。

图 1. 把业务规则和业务流程分隔开

在 IBM 的 BPM 产品组合中,WebSphere Process Server 是业务流程执行平台,它为企业提供强大、可扩展且符合行业标准的业务流程基础设施。Process Server 基于 WebSphere Application Server 平台,提供 Enterprise Service Bus (ESB) 功能,可以支持企业的面向服务架构 (SOA)。WebSphere Integration Developer(后面简称为 Integration Developer)是业务流程开发和组装工具。在 Integration Developer 中开发的项目可以部署在 Process Server 中,然后直接执行。

尽管 Integration Developer 和 Process Server 已经嵌入了业务规则编辑器和业务规则引擎,但是只能使用它实现简单的规则或决策表,只能包含有限的业务用户交互。对于大多数用例,嵌入的规则引擎无法满足复杂的业务需求。因此,需要专用的强大的业务规则管理系统,它应该支持业务规则建模、执行和管理的整个生命周期,可以方便地与 BPM 产品集成。

ILOG JRules 是先进的业务规则管理系统,提供编写、部署和管理业务规则等业务功能。它支持高效地修改策略和快速部署策略,这正是敏捷的全面集成的企业所需要的。

ILOG JRules 提供一种建模、实现和部署业务规则的系统化方法。它支持以有秩序的高效的方式进行协作。它包含的工具针对不同用户的技能和知识优化过,因此策略经理、业务分析师和开发人员都可以获得所需的支持,可以尽可能发挥 BRMS 的价值。

图 2 说明 ILOG JRules 的架构。

图 2. ILOG JRules 架构

下面简要介绍 ILOG JRules 架构的每个部分。

ILOG Rule Studio:用于开发规则应用程序的基于 Eclipse 的开发环境。它允许合作编辑和调试 Java™ 代码和规则。特性包括:

Eclipse 集成

编辑规则时的自动纠正

代码生成向导

单一接口存储库

源代码控制集成

冲突和重复探测

简便的部署

ILOG Rule Team Server:这是一个 Web 环境,分布式业务团队可以通过它协作、创建、管理、验证和部署业务规则。

ILOG JRules Rule Execution Server 提供一个健壮的与 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 产品集成,从而为客户的业务流程场景提供策略和决策服务。图 3 给出一个从 Process Server 中的业务流程调用 JRules 服务的示例。

图 3. ILOG JRules 和 WebSphere Process Server 的集成示例

本文主要讨论 ILOG JRules 和 Process Server 的集成,包括安装和配置、不同的集成方法(比如使用 POJO、EJB、Web 服务和 JMS/MQ)以及在 Process Server 中使用 CEI 监视 JRules 服务。

 

集成 ILOG JRules 和 WebSphere Process Server

因为 Process Server 基于 WebSphere Application Server 平台,而 ILOG JRules 与 J2EE 兼容,所以 ILOG JRules 运行时组件和 Process Server 的集成是标准的 J2EE 应用程序集成过程。图 4 显示部署到 J2EE 环境中之后 JRules Execution Server 的核心组件。

图 4. J2EE 环境中 JRules Execution Server 的核心组件

JRules 使用一个数据库存储和管理规则集和规则应用程序。数据源和持久化提供一个访问 JRules 使用的数据库的 JDBC 解决方案。

Execution Unit (XU) 是针对 Java EE Connector Architecture (JCA 1.5) 的资源适配器。XU 处理规则集执行的低层细节,提供对资源的访问。XU 可以独立于管理模型运行。XU 让管理模型可以访问配置和运行时数据,在应用服务器和规则引擎之间实现 JCA 契约。应用服务器或应用程序客户机使用 XU 连接规则引擎。

执行组件授权 XU 执行规则集。Rule Execution Server 执行组件让我们能够通过编写代码与 Rule Execution Server 模型交互,而不需要依赖于内部实现。

客户机模块需要嵌入 Rule Execution Server 执行组件(jrules-res-session-<appserver>.jar),使用它引用 XU。

图 5 显示 JRules 与 Process Server 集成的架构。

图 5. JRules 与 WebSphere Process Server 集成的架构

在 Process Server 中集成 JRules 运行时需要完成以下步骤:

在 Process Server 中为 JRules 数据源/持久化配置数据源。数据源的 JNDI 名称必须是 jdbc/resdatasource,见图 6。否则,JRules 无法正确地连接它的数据库。

图 6. 在 WebSphere Process Server 中为 JRules 创建数据源

把 XU RAR 部署到 Process Server。XU 是 JRules 提供的资源适配器。可以在 JRulesInstallDir\executionserver\applicationservers\WebSphere7\jrules-res-xu-WAS7.rar 找到它。XU J2C 连接工厂的 JNDI 名称必须是 eis/XUConnectionFactory。其他 JRules 组件可能通过引用这个默认的 JNDI 名称访问 XU(图 7)。

图 7. 在 WebSphere Process Server 中把 XU 部署为资源适配器

把执行管理 EAR 部署到 Process Server(图 8)。执行管理 EAR 是一个与 J2EE 兼容的 JRules 管理应用程序,它提供一个管理控制台,可以对部署到 Rule Execution Server 中的所有规则应用程序进行部署、导航、配置和管理。可以在 JRulesInstallDir\executionserver\applicationservers\WebSphere7\ jrules-res-management-WAS7.ear 找到执行管理 EAR。

图 8. 把执行管理 EAR 部署到 WebSphere Process Server

配置 JRules 运行时的安全设置。JRules Execution Server 定义几个安全角色以限制对它的 MBean 的访问。WebSphere Application Server 提供安全基础设施和机制以保护敏感的 JEE 资源和管理资源。为了保护对 JRules 的访问,需要为 Process Server 启用全局安全性(图 9)。

图 9. 为 WebSphere Process Server 启用全局安全性

还需要为 JRules 定义三个用户组(图 10):

resAdministrators

resDeployers

resMonitors

然后,需要定义每个用户组的成员(图 11):

resAdmin

resDeployer

resMonitor

图 10. 在 WebSphere Process Server 中为 JRules 定义用户组

图 11. 在 WebSphere Process Server 中为 JRules 定义用户

要想访问 Rule Execution Server 模型的 MBean,应用程序必须有适当的安全凭证。因此,需要把 Execution Server 定义的安全角色映射到正确的用户组(图 12)。

图 12. 映射 JRules Execution Server 的安全角色

现在,JRules 运行时的基本组件已经集成在 Process Server 中了。可以使用它们开发规则应用程序并部署到 Process Server 上运行的 JRules 中。业务流程可以通过多种绑定作为决策服务节点调用规则集。

 

在业务流程中调用业务规则

图 13 给出 JRules 定义的调用模型。

图 13. JRules 调用模型

根据 XOM(在规则应用程序中定义的执行对象模型),客户机可以通过多种方法调用 Rule Execution Server 中部署的规则集,比如 POJO、EJB(远程或本地)、JMS 等等。同时,JRules 还提供一个透明的决策服务,让客户机可以使用 SOAP/HTTP 通过 Web 服务访问规则集。在本文中,JRules 的客户机是 Process Server 中部署的业务流程。因此,不同的调用方法与 Process Server 中不同的 SCA 组件对应。表 1 总结不同的 JRules 调用方法。

表 1. WebSphere Process Server 调用 JRules 的方法

调用方法 SCA 组件 本地还是远程
POJO SCA POJO 只能是本地的
EJB SCA POJO 本地和远程
JMS MQ JMS 绑定导入 本地和远程
Web 服务 Web 服务绑定导入 本地和远程

下面几节详细讨论每种调用方法。

使用 POJO 会话调用规则服务

SCA POJO 调用的效率很高,因为它不需要对输入和响应参数进行序列化和解序列化。但是,它的限制是只支持本地调用。这意味着 JRules Execution Server 必须在与 Process Server 相同的 JVM(发出调用的业务流程所在的 JVM)中运行。图 14 显示使用 SCA POJO 组件调用规则集的模型。

图 14. 使用 SCA POJO 调用 JRules

在这个模型中,SCA POJO 组件调用 jrules-bres-session-WAS7.jar 提供的 API,这会调用 XU 以访问规则集并把结果返回给 SCA POJO 组件。清单 1 显示的 Java 片段使用 POJO 会话调用 JRules。

清单 1. 使用 SCA POJO 调用 JRules 的示例

Map inputParameters = new HashMap();

String strAMERICASPricing = serialize(AMERICASPricingSdo,

“http://AMERICAS_Pricing”, “AMERICAS_Pricing”);

inputParameters.put(“AMERICASPricing”, strAMERICASPricing);

//Get the session factory for a Java rulesession invocation

IlrSessionFactory sessionFactory = new IlrPOJOSessionFactory();

IlrSessionRequest request = sessionFactory.createRequest();

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

request.getInputParameters().putAll(inputParameters);

//create a stateless rule session

IlrStatelessSession ruleSession = sessionFactory.createStatelessSession();

IlrSessionResponse result = ruleSession.execute(request);

Map outputParameters = result.getOutputParameters();

String strOutAMERICASPricing = (String) outputParameters.get

(“AMERICASPricing”);

DataObject response = createResponse(“http://com”,

“AMERICAS_Pricing_RuleProjectExecutionResult”);

response.set(“AMERICASPricing”, deserialize

(strOutAMERICASPricing,”AMERICAS_Pricing”));

JRules 在 Integration Developer 中提供一个 Decision Service Wizard,可以用它自动地生成 SCA POJO 组件(图 15)。

图 15. 在 WebSphere Integration Developer 中使用 Decision Wizard 生成 SCA POJO

使用 EJB 会话调用规则

可以通过 EJB 调用本地或远程地访问 ILOG JRules 中部署的规则服务。图 16 显示使用 EJB 绑定调用规则集的模型。

图 16. 使用 EJB 调用 JRules

图 16 显示客户机应用程序使用规则会话(IlrStatelessRuleSession 或 IlrStatefulRuleSession)调用规则集。在规则会话中,将调用 IlrStatelessRuleSessionEJB 或 IlrStatefulRuleSessionEJB。IlrStatelessRuleSessionEJB 和 IlrStatefulRuleSessionEJB 可以驻留在与客户机不同的 JVM 中。IlrStatelessRuleSessionEJB 或 IlrStatefulRuleSessionEJB 进而本地地调用在 XU 上运行的规则集。在 ILOG JRules 中,IlrStatelessRuleSession、IlrStatefulRuleSession、IlrStatelessRuleSessionEJB 和 IlrStatefulRuleSessionEJB 都打包在 jrules-res-session-WAS7.jar 中。客户机是 Process Server 中调用规则服务的场景。服务器是 ILOG JRules Execution Server 所在的应用服务器。

清单 2 所示的 Java 代码使用 EJB 会话调用规则服务。

清单 2. 使用 EJB 调用 JRules 的示例

//Sets IN and INOUT parameters.

Map inputParameters = new HashMap();

String strCreditpricing = serialize(creditpricingSdo,”http://creditpricing”,

“CreditPricing”);

inputParameters.put(“creditpricing”, strCreditpricing);

Properties properties = new Properties();

properties.put(JAVA_NAMING_FACTORY_INITIAL, INITIAL_CONTEXT_FACTORY);

properties.put(JAVA_NAMING_PROVIDER_URL, ENGINE_URL);

IlrSessionRequest request = new IlrSessionRequest(rulesetPath);

request.getExecutionSettings().getInputParameters().setParameters

(inputParameters);

//Get the provider for a Remote EJB

IlrRuleSessionProvider rsProvider = new IlrRuleSessionProviderFactory.Builder(

properties).setJNDINameOfRuleSessionStateless(JNDI_NAME).build();

//create a stateless rule session

IlrStatelessRuleSession ruleSession = rsProvider.createStatelessRuleSession();

IlrSessionResponse result = ruleSession.executeRules(request);

ilog.rules.bres.session.IlrSessionParameters outputParameters = result

.getExecutionResult().getOutputParameters();

String strOutCreditpricing = (String) outputParameters.getObjectValue

(“creditpricing”);

DataObject response = createResponse(“http://com”, “PricingrulesExecutionResult”);

response.set(“creditpricing”, deserialize(strOutCreditpricing,”CreditPricing”));

JRules 在 Integration Developer 中提供一个 Decision Service Wizard,可以用它自动地生成调用此代码的 SCA POJO 组件和 EJB(图 17)。

图 17. 在 WebSphere Integration Developer 中使用 Decision Wizard 生成 SCA POJO

使用 Web 服务调用规则

在 Process Server 中,可以通过 Web 服务访问规则服务。ILOG JRules 使用透明决策服务为规则集提供 Web 服务访问。JRules 提供两种透明决策服务:

驻留的透明决策服务:这实际上是一个部署为 Web 服务器的规则集。它安装在与 Rule Execution Server 相同的应用服务器上,然后与 Rule Execution Server 集成。

监视的透明决策服务:这个服务是由 Rule Studio 生成的,驻留在与 Rule Execution Server 相同的应用服务器上,但是不与它集成。这个决策服务独立于 Rule Execution Server,但是通过访问它执行规则。

对于监视的透明决策服务,支持的应用服务器只有 JBoss 和 Tomcat。因此,在与 Process Server 集成时,只能使用驻留的透明决策服务。图 18 说明如何使用驻留的透明决策服务访问 JRules 服务。

图 18. 使用 Web 服务调用 JRules

要想使用 Web 服务访问规则集,应该把驻留的透明决策服务 (jrules-res-htds-WAS7.ear) 部署到 Rule Execution Server 所在的 Process Server。这可以是与进行调用的业务流程相同的主机,也可以是不同的主机。

图 19. 把透明决策服务部署到 WebSphere Process Server

要想使用 Web 服务调用规则集,首先需要从 Rule Execution Server 控制台导出目标规则应用程序的 WSDL(图 20)。

图 20. 从 Rule Execution Server 控制台导出 WSDL

然后,在 Integration Developer 中,把这个 WSDL 文件导入要调用规则服务的 SCA 模块,指定 WSDL 文件中定义的用于 Web 服务绑定导入的接口。

使用 JMS 调用规则

业务流程可以使用 Java Message Service (JMS) 消息标准异步地调用在 JRules 上运行的规则集。图 21 显示使用 JMS 调用规则集的模型。

图 21. 使用 JMS 调用 JRules 服务

图 21 显示客户机应用程序使用 JMS 消息标准调用 JRules 服务。它把 JMS 消息发送到一个消息目的地,在那里由消息驱动的规则 bean (MDB) 监听到达的消息。这个 MDB(即 JRules MDB)是一个作为消息监听器的企业 bean。在这个 bean 中,IlrRuleExecutionBean 是队列 MDB,IlrRuleExecutionTopicEJB 是主题 MDB(清单 3)。可以使用应用服务器资源分配由消息驱动的规则 bean 的目的地。

清单 3. ILOG JRules 中的队列和主题 MDB

<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 容器调用 MDB IlrRuleExecutionBean 或 IlrRuleExecutionTopicEJB 的 onMessage 方法。IlrRuleExecutionBean 或 IlrRuleExecutionTopicEJB 可以驻留在客户机应用程序本地,也可以驻留在远程。MDB 进而调用 XU 中运行的规则集。对规则引擎的实际调用委托给一个简单的规则会话。

在规则引擎处理完成之后,MDB 负责发送响应消息(如果有的话)。它把结果发送到由 JMSReplyTo 消息头指定的 JMS 响应目的地。

在 JRules 中,用于 WebSphere Application Server 的 MDB IlrRuleExecutionBean 和 IlrRuleExecutionTopicEJB 实现类打包在 jrules-res-mdb-WAS7.jar 中。

在使用 JMS 调用规则集时,需要把 jrules-res-mdb-WAS7.jar 打包在一个假的 EAR 文件中,把它部署到 XU 所在的 Process Server。在 JRules MDB 端,需要定义以下资源:

配置以下 MQ 连接工厂:

JNDI 名称为 jms/BRESQueueConnectionFactory 的队列连接工厂。

JNDI 名称为 jms/BRESTopicConnectionFactory 的主题连接工厂。

配置以下队列或主题定义:

为 JRules MDB 创建用于接收消息的队列定义。我们使用 JNDI 名称 jms/BRESQueueIn。

为 JRules MDB 创建用于响应消息的队列定义。我们使用 JNDI 名称 jms/BRESQueueOut。

如果需要使用主题,需要定义相应的主题定义。

配置消息监听器端口或激活设置,从而在 jms/BRESQueueIn 队列中有消息时激活 JRules MDB。

在客户端,可以使用导入和 JMS 绑定把 JMS 消息发送到 JRules MDB,或从 JRules MDB 接收 JMS 消息。JRules MDB 期望 JMS 对象消息的有效载荷是一个 java.util.Map,而 Process Server 中的客户机 SCA 应用程序需要一个业务对象。需要创建一个定制的 JMS 数据绑定,它把 java.util.Map 映射到 Process Server 中的业务对象表示。清单 4 说明如何使用定制的数据绑定在业务对象和 java.util.HashMap 之间建立映射。

清单 4. 在 JMS 导入中使用定制的数据绑定调用 JRules 的示例

public class CustomerApplicationDataBinding implements JMSDataBinding {

public int getMessageType() {

return JMSDataBinding.OBJECT_MESSAGE;

}

public void write(Message message) throws JMSException {

try {

ObjectMessage requestMessage = (ObjectMessage) message;

//Get the data object

DataObject customerApplicationSdo = getDataObject();

// Create the java.util.HashMap

HashMap inputParameters = new HashMap();

// CustApplicationObj is the custom object defined in the

parameters of rule application

// convertSDOToCustApplicationObj converts the incoming SDO to

CustApplicationObj

CustApplicationObj customerApplicationObj

=convertSDOToCustApplicationObj(customerApplicationSdo);

inputParameters.put(“CustomerApplicationObj”, customerApplicationObj);

// Set the payload of the JMS Object Message

requestMessage.setObject(inputParameters);

String rulesetPath = “/” + RULEAPP_NAME + “/” + RULESET_NAME_EMEARULE;

//Set the JMS message header properties.

requestMessage.setStringProperty(“ILOG_rules_bres_mdb_rulesetPath”,

rulesetPath);

requestMessage.setStringProperty(“ILOG_rules_bres_mdb_status”, “request”);

} catch (DataBindingException e) {

throw new JMSException(e.getLocalizedMessage());

}

}

public void read(Message message) throws JMSException {

//Get the payload of the JMS Object message

ObjectMessage responseMessage = (ObjectMessage) message;

HashMap parameters = (HashMap) responseMessage.getObject();

CustApplicationObj outCustomerApplicationObj =

(CustApplicationObj) parameters.get(“CustomerApplicationObj”));

// convertCustApplicationObjToSDO converts the rule application parameter to SDO

DataObject dobject = convertCustApplicationObjToSDO(outCustomerApplicationObj);

try {

// Set the data object

setDataObject(dobject);

} catch (DataBindingException e) {

throw new JMSException(e.getLocalizedMessage());

}

}

}

 

在 WebSphere Process Server 中监视 JRules 服务

在 Process Server 中,可以监视基于 CEI 的业务流程。所有启用的 Common Base Event (CBE) 事件都发送到 CEI 服务器并存储以供监视使用。可以使用 Process Server 附带的 CBE 浏览器检查在业务流程运行时生成的事件。还可以使用 WebSphere Business Monitor 监视指定的度量数据,比如业务流程的指标和 KPI。

ILOG JRules 中的规则服务也可以把 CBE 事件发送给 CEI 框架,这提供与 Process Server 一致的监视机制。这些 CBE 事件可以提供详细、综合的 JRules 服务审计跟踪。

JRules 提供发送 CEI 事件的 API。为了简化,JRules 提供用于与 Process Server 集成的 ILOG JRules CEI Event Source 组件。它包含的 CEIEventBOM 模块定义 CEI 事件 BOM 并封装发送 CEI 事件的 API。规则项目可以引用 CEIEventBOM 模块并定义一个 ilog.connector.ibm.runtime.EventContainer 类型的变量,从而把 CEI 事件发送给 Process Server。示例见图 22 和图 23。

图 22. 引用 CEIEventBOM 模块以发送 CEI 事件

图 23. 定义 EventContainer 类型的变量以发送 CEI 事件

然后,可以在需要发送 CEI 事件的地方添加代码,见图 24。

图 24. 添加代码以发送 CEI 事件

调用规则集之后,可以使用 CBE 浏览器检查事件(图 25)。在这里可以看到规则调用的审计跟踪,这提供触发的规则和执行的规则流等有用的信息。

图 25. 使用 CBE 浏览器浏览规则生成的事件

 

结束语

本文概述了如何集成 ILOG JRules 和 WebSphere Process Server。讨论了如何使用不同的方法从业务流程调用规则服务,包括 POJO、EJB、Web 服务和 JMS/MQ。最后,讨论了在 WebSphere Process Server 中如何通过 CEI 监视 JRules 服务。

以下文章点击率最高

Loading…


发表评论

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