图 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 定义的调用模型。
根据 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 服务绑定导入 |
本地和远程 |
下面几节详细讨论每种调用方法。
SCA POJO 调用的效率很高,因为它不需要对输入和响应参数进行序列化和解序列化。但是,它的限制是只支持本地调用。这意味着 JRules Execution Server 必须在与 Process Server 相同的 JVM(发出调用的业务流程所在的 JVM)中运行。图 14 显示使用 SCA POJO 组件调用规则集的模型。
在这个模型中,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…