扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
引言
面向服务的体系结构 (SOA) 允许服务客户端以一致、灵活的方式调用服务提供程序。WebSphere Process Server(以下称为 Process Server)集成平台使用 WebSphere Application Server(以下称为 Application Server)来利用 Java™ 2 Enterprise Edition (J2EE) 基础结构以解决复杂的集成难题。Process Server 和 WebSphere Integration Developer(以下称为 Integration Developer)一起开发提供了一组全面的功能,用于设计、实现和部署集成解决方案。
在本文中,我们将探讨 Process Server 环境中的 Web 服务绑定。我们将介绍承载于 Process Server 的 Web 服务如何以 SOAP/HTTP 和 SOAP/JMS 的方式公开。还将介绍如何通过在远程非 Process Server 环境中安装的客户端应用程序来调用这些 Process Server 应用程序。
首先,我们将介绍由 Process Server 用来促进使客户端与服务之间的通信的运行时,以使您对其有基本的了解。接下来,我们将简单讨论如何使用业务对象以便在 Process Server 内表示数据。最后,我们将对一个简单订单处理用例进行分析,并说明如何使用 SOAP/HTTP 和 SOAP/JMS Web 服务绑定来公开应用程序组件。
在所列举的示例中,我们将使用下列非 Process Server 客户端环境开发应用程序并配置远程 Web 服务客户端的服务器:
完成本文后,您应该基本了解 Process Server、服务组件体系结构编程模型、从非 Process Server 环境中调用 Process Server 应用程序组件(使用 Web 服务绑定)所需要执行的操作。
|
服务组件体系结构
服务组件体系结构 (SCA) 是用于在 Process Server 中提供 SOA 功能的运行时。SCA 运行时提供了一个抽象层,从而使集成开发人员免于处理底层基础结构细节。在此部分中,我们将描述 SCA 的一些基本概念,这对于理解在我们的示例中使用的 SCA 客户端编程模型非常必要。有关 SCA 的详细信息,请参见 Business Process Management Version 6.0 Information Center。
服务模块的导入和导出
在 SCA 中,服务模块 表示 SCA 服务的部署单元。服务模块是自包含的逻辑单元,可充当独立的集成解决方案或作为复杂集成解决方案的一部分。一个或多个服务组件可以组合在一个服务模块内,使用引用将服务组件链接到其他服务组件或服务导入。导出针对外部客户端的调用而公开由服务模块提供的服务。服务绑定将提供有关服务导入和导出的详细信息。图 1 概要显示了组件级的导入和导出绑定。
图 1. 带有导入和导出绑定的组件
服务组件体系结构的绑定
服务绑定用于导入和导出,以隔离客户端调用服务所需要的基础结构细节。现在,您已经能够在服务模块内组装 SCA 组件,同时使用所需的业务逻辑来满足集成要求。然而,绑定专门用于将基础结构细节与集成逻辑分离开来。SCA 提供了许多绑定选项:
Web 服务导出绑定将对外部客户端公开。Web 服务导入绑定调用其他模块中或 Process Server 外的其他环境中的外部 Web 服务。
本文的示例完全集中于 Web 服务绑定。
业务对象
SOA 基础结构的最后一部分是业务对象。既然您对 SCA 以及如何查找和调用服务有一定的了解,您就需要了解调用中使用的数据是如何表示的。Process Server 将针对此目的使用业务对象。业务对象是服务数据对象 (SDO) 规范(由 IBM 和 BEA Systems 发布)的实现,以提供数据和数据访问的简化视图。
|
订单处理用例
既然您理解我们的集成场景的构造块(sCA 和业务对象),就让我们更详细地介绍我们的用例的要求。为了针对我们的讨论和示例提供参考框架,这些构件将基于简单订单处理用例。订单处理服务承载于 Process Server。要提交订单的客户端会向该远程服务发出请求,如图 2 所示。
图 2. 客户端调用 Process Server 组件
为了保持一致性,各种服务器配置上的所有客户端都将调用相同的 Process Server 订单处理模块。
订单由包含许多简单类型属性和一个订单行式项目数组的业务对象表示,如图 3 所示。
图 3. 订单处理业务对象
我们混合了各种常见类型以演示各种可能的数据类型。请记住,这并不是唯一的数据类型列表,但您可以使用该示例并扩展该示例以满足您特定的需求。
订单处理服务提供了以下两项 Web 服务描述语言 (WSDL) 操作以提交订单:
图 4. 订单处理的 WSDL 操作
示例订单模块包含 OrderProcessing Java 组件。Java 组件在调用单向操作时打印入站订单的值。
************ Order Processing (OneWay) service invoked from client ********* <?xml version="1.0" encoding="UTF-8"?> <order:Order xsi:type="order:Order" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:order="http://OrderProcessing"> <orderId>orderId</orderId> <customerId>customerId</customerId> <orderDate>2002-01-01Z</orderDate> <orderStatus>submitted</orderStatus> <totalPrice>124.0</totalPrice> <orderLineItems> <orderId>orderId</orderId> <itemId>ItemId</itemId> <quantity>100</quantity> <orderDate>2002-01-01Z</orderDate> <orderLineStatus>submited</orderLineStatus> <price>24.0</price> </orderLineItems> <orderLineItems> <orderId>orderId</orderId> <itemId>itemId</itemId> <quantity>22</quantity> <orderDate>2002-01-01Z</orderDate> <orderLineStatus>backorder</orderLineStatus> <price>100.0</price> </orderLineItems> </order:Order> |
在调用请求-响应操作时,Java 组件将更新订单和订单行式项目业务对象上的 orderId
和 orderStatus
属性,打印产生的业务对象,并将结果返回到客户端。
************ Order Processing (RequestResponse) service invoked from client ********* ************ retrieve the order line array ********* ************ 0 ********* ************ 1 ********* ************ returning order to client ********* <?xml version="1.0" encoding="UTF-8"?> <order:Order xsi:type="order:Order" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:order="http://OrderProcessing"> <orderId>123-abc</orderId> <customerId>customerId</customerId> <orderDate>2002-01-01Z</orderDate> <orderStatus>submitted</orderStatus> <totalPrice>124.0</totalPrice> <orderLineItems> <orderId>orderId</orderId> <itemId>ItemId</itemId> <quantity>100</quantity> <orderDate>2002-01-01Z</orderDate> <orderLineStatus>submitted</orderLineStatus> <price>24.0</price> </orderLineItems> <orderLineItems> <orderId>orderId</orderId> <itemId>itemId</itemId> <quantity>22</quantity> <orderDate>2002-01-01Z</orderDate> <orderLineStatus>submitted</orderLineStatus> <price>100.0</price> </orderLineItems> </order:Order> |
图 5 显示了 Integration Developer Assembly Editor 中的订单处理服务。
图 5. 订单处理组装关系图
在此场景中,您实际上具有两个 SCA 模块:一个非 Process Server 客户端模块和一个承载于 Process Server 的服务模块。
|
安装并运行 Web 服务示例
现在您已经可以安装并运行订单处理示例。您必须已经安装并启动了 Process Server。
基本步骤有:
图 6. 订单处理 Web 服务导出
当在 Integration Developer 中创建 Web 服务导出绑定时,将会在 Process Server 环境内创建一个 .export 文件和一个导出 .wsdl 文件。该导出 .wsdl 将导入在绑定到导出的组件中定义的接口 WSDL。然后,该接口 WSDL 将导入任何相关的 XSD,用于在 WSDL 类型内定义数据类型。导出 .wsdl 将向 Web 服务客户端公开,并且必须与任何其他相关的 WSDL 和 XSD 一起包括在客户端应用程序内。
您可以将该客户端应用程序部署到支持调用远程 Web 服务的任何服务器中。然而,您必须将服务器应用程序中的某些构件包括在客户端内。您可以在包含 Web 服务应用程序的同一 Process Server 实例上安装客户端。然而,由于 Web 服务在远程调用环境中更实用,因此,该客户端安装在实际环境中并不是很实用。大多数情况下,调用远程订单处理 Web 服务的客户端会安装在与 Web 服务不同的环境中。我们将使用安装在 Application Server 5.1.2 和 6.0.2 上的远程客户端来测试此配置。
该客户端包将包含以下文件:
在 Process Server 上安装订单处理服务
通过以下方式将 OrderProcessApp.EAR 部署到 Process Server:使用 WebSphere Integrated Test Environment,或者导出为 EAR 并通过管理控制台进行安装。如果使用管理控制台进行安装,则启动该应用程序。该应用程序现在已经可以接受 Web 服务调用了。
使用 Application Server V6.0.2 来构建和测试 SOAP/JMS 客户端
如果将 SOAP/JMS 与远程 Web 服务客户端一起使用,则必须使用管理控制台在 Application Server 6.0.2 上进行以下一些额外配置:
现在,您需要使用 Application Server V6.0.2 来构建客户端应用程序。一旦构建了该应用程序,就将该应用程序部署到 Integration Developer 中基于 Application Server 6.0.2 的集成测试环境中。
addresslocation
属性以使用远程 Web 服务应用程序的实际主机名。缺省情况下,该名称是 localhost,因为导出 .wsdl 最初是在生成 Web 服务导出绑定时在 Process Server 应用程序内创建的。当该文件移动到远程客户端应用程序时,将需要更改主机名以反映 Web 服务的真实位置。
OrderProcessingExport_processOrderHttp_Service.wsdl
作为 Web 服务,然后单击 Next。 此外,用于生成 JSP 代码的工具无法处理数组。对于订单处理应用程序,这意味着所生成的用于测试 Java 代理的 JSP 表单将不具有 OrderLineItems 的输入字段。您将需要自定义 JSP 代码以处理 OrderLineItems。
该问题仅涉及 JSP 代码生成的情况,并不涉及从导出 WSDL 中生成的 Java 代理代码。也就是说,Java 代理代码的确包含用于处理业务对象数组的方法。因此,该问题仅存在于 JSP 测试客户端。由于该 JSP 代码用于测试并且不太可能用于生产环境中,因此,该问题的影响不大。
使用 Application Server V5.1.2 来构建和测试 SOAP/HTTP 客户端
使用 Application Server V5.1.2 来构建客户端应用程序。一旦构建了该应用程序,就将该应用程序部署到 WebSphere Studio Application Developer(以下称为 Application Developer)中的 Test Environment 服务器:
OrderProcessingExport_processOrderHttp_Service.wsdl
作为 Web 服务。
该工具无法处理 OrderLineItem 数组。这意味着所生成的用于测试 Java 代理的 JSP 表单将不具有 OrderLineItems 的输入字段。您可以手动编辑 JSP 以处理数组;然而,并不需要针对该示例进行编辑。单击 OK。该向导在启动服务器并发布应用程序之后才会关闭。
这些错误中的大部分都是由于该工具无法将业务对象 xsd 文件复制到 WEB-INF 文件夹而导致的。将 Order.xsd 和 OrderLineItem.xsd 复制到 WEB-INF/wsdl 文件夹中并重新构建项目,以便消除这些错误中的大部分错误,如图 20 所示:
在重新构建项目之后,下列错误可能仍然存在:
使用 Application Server V6.0.2 来构建和测试 SOAP/JMS 客户端
在 Application Server V6.0.2 中创建 SOAP/JMS 客户端的方法与创建 SOAP/HTTP 客户端非常类似。正如前面所提到的,您必须配置 Process Server 以支持 SOAP/JMS。您还必须完成下列用于配置客户端的步骤:
iiop://gbeers.rchland.ibm.com:2809/
类似。请注意,jndiProviderURL 属性以“&”分隔。
<soap:address location="jms:/queue?destination=jms/OrderProcExport& connectionFactory=jms/OrderProcExportQCF& targetService=OrderProcExport_processOrderJMSPort& jndiProviderURL=iiop://gbeers:2809/"/> |
OrderProcessingExport_processOrderJms_Service.wsdl
作为 Web 服务。单击 Next。
用于生成 JSP 代码的工具无法处理数组。在订单处理应用程序中,这意味着所生成的用于测试 Java 代理的 JSP 表单将不具有 OrderLineItems 的输入字段。您将需要自定义 JSP 代码以处理 OrderLineItems。
该问题仅涉及 JSP 代码生成的情况,并不涉及从导出 WSDL 中生成的 Java 代理代码,Java 代理代码的确包含用于处理业务对象数组的方法。因此,该问题仅存在于 JSP 测试客户端。由于该 JSP 代码用于测试并且不太可能用于生产环境中,因此,该问题的影响不大。
|
结束语
在本文中,您已了解 SCA 运行时和客户端编程模型的灵活性如何允许 Web 服务客户端调用 Process Server 服务。您可以基于您独特的业务需求从客户端编程的许多选项中进行选择:交互样式、操作类型和绑定类型(仅举几个例子)。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者