本文将简要介绍 HTDS,讨论构建一个 HTDS 客户端和使用 IBM ODM V8.5 中新增的 ">RESTful 接口的方法。本文将
重点介绍使用 HTDS 的潜在问题和难点,这些问题和难点主要与控制它的服务接口相关,本文还会介绍一些解决这些问题的实用方法。
Hosted Transparent Decision Service (HTDS) 是一个部署到应用服务器上的预定义的应用程序,它使得规则集可以自动公开为 Web 服务。此外,它还支持使用 JMX MBean 协议访问决策服务元数据和运行时统计数据。它是 IBM ODM Decision Server 中的一个标准执行组件,位于以下目录中的一个企业归档文件 (EAR) 中:<InstallDir>/executionserver/applicationservers/<app- server>/jrules-res-htds-<app_server>.ear。HTDS 集成了本地 ODM Rule Execution Server,必须与 eXecution Unit (XU) 位于相同的应用服务器中。
为什么使用 HTDS?
使用 HTDS,只要将规则集部署到 Rule Execution Server,就可以将它作为 Web 服务调用。无需额外的编码或部署,就可以将规则集公开为 Web 服务。这有助于将规则与远程规则客户端相集成,节省大量的开发时间和工作。
规则服务 WSDL
HTDS 将规则集公开为 Web 服务或规则服务,除了构建规则集之外,无需开发人员编码。这意味着开发人员无需为该 Web 服务构造一个 Web 服务描述语言 (WSDL) 文件。那么如何生成规则服务 WSDL?非常简单,WSDL 由 HTDS 生成。
在 ODM 中,无需输入和输出规则集参数来指定一个规则集的签名。不用奇怪,这些输入和输出参数是 HTDS 用于生成 WSDL 的元素。一个规则集的 WSDL 可以通过 Rule Execution Server 控制台来检索。WSDL 文件也可以通过以下网址进行访问:http://<HOST>:<PORT>/DecisionService/ws /<RULESETPATH>?wsdl,其中 <HOST>:<PORT> 表示应用服务器实例的位置,<RULESETPATH> 是通过串联 RuleApp 名称/版本和规则集名称/版本而形成的规则集标识符,例如:/miniloanruleapp/1.0/miniloanrules/1.0。
一 个规则集的输入和输出参数是执行对象模型 (XOM) 的一部分。XOM 可以定义为 Java 类或 XML 模式定义 (XSD)。在 ODM V7.5 以前,只有 XSD XOM 和基本 Java 原语类型可用于 HTDS。但是,此限制已不再适用,Java XOM 可用于 HTDS。使用一个 Java XOM 会得到更好的性能,还支持将行为和方法附加到对象上,因此是首选的方法。必须将 Java XOM 部署到 Rule Execution Server 上,然后才能将它用于 HTDS。
使用一个 Java 客户端调用 HTDS
XOM 中定义的类由 HTDS 解析来生成 WSDL。使用 Java XOM(以及在更加受限制的情况下使用 XSD XOM),在某些情况下 HTDS 生成的默认 WSDL 要么不够,要么在从 Java 客户端调用时具有某些问题。本节将介绍一种简单的业务场景,以便重点介绍与从服务使用者调用 HTDS 相关的潜在难题和问题。具体来讲,我们的重点是 Java 客户端与一个使用 Java XOM 的 HTDS 规则集的集成。
场景描述
考 虑一个简单的规则应用程序,它基于一系列业务策略确定哪些客户帐户可以升级。本文不会深入介绍业务策略,而是重点介绍客户端与规则服务的集成。规则服务的 签名由规则集参数确定。在此场景中,我们使用请求/响应模式来识别传入规则服务和从规则服务返回的数据。这里使用的领域模型非常简单,只是为了强调与 HTDS 集成的潜在问题。简单地讲,如 图 1 中的 UML 类图中所示,请求包含一个具有一组帐户的客户,而响应包含一组可升级的帐户。
图 1. 该场景的领域模型
此模型被实现为 Java 类,这些类构成规则集的 XOM。
HTDS Web 服务
分析 WSDL
之 前已经提到过,在将规则集部署到 Rule Execution Server 之后,HTDS 就可以生成它的 WSDL。这个 WSDL 包含组成我们的 XOM 的领域类的所有 XSD 版本。此外,HTDS 使用规则集名称和规则集参数名称来生成一些特定于 HDTS 的元素:
元素由 HTDS 依据规则集参数名称而定义。 与规则集名称对应的 XML 包装器元素由 HTDS 创建。具体来讲,我们创建了 <rulesetName>Request 和 <rulesetName>Response。 默认的命名空间使用了 RuleApp 和规则集名称:http://www.ibm.com/rules/decisionservice/<RuleApp name>/<ruleset name>
使用一个规则服务客户端测试
现在已部署了规则服务,我们可以生成一个客户端来调用它。这可以使用 IDE 中的向导或使用调用 wsimport 的命令行脚本来完成。对于本文,我们将使用 Rational Software Architect V8.5。Rational Software Architect 提供了一个简单的 Web Service Client 向导 (图 2) 来生成一个 JAX-WS Web 服务客户端,可以通过提示指定 WSDL 的位置来启动该客户端。
图 2. Rational Software Architect 中的 Web Service Client 向导
成 功执行该向导后,将会生成两个项目:DetermineUpgradeableAccountsClient 和 DetermineUpgradeableAccountsClient EAR。EAR 项目可用于导出企业归档文件 (.ear),或直接将它部署到 Rational Software Architect 中配置的 WebSphere Application Server。在将企业归档文件部署到服务器之后,可以使用 Rational Software Architect 所提供的一种测试方法对其进行测试,比如 Test with Generic Service Client,如 图 3 中所示。使用此测试客户端,您首先要编辑一个请求,然后调用该服务,最后查看响应。
图 3. 使用生成的客户端测试 HTDS