ILOG JRules 和 WebSphere Process Server 集成概述2

图 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):

o    resAdministrators

o    resDeployers

o    resMonitors

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

o    resAdmin

o    resDeployer

o    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”));

以下文章点击率最高

Loading…

     

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

发表评论

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