本文介绍如何使用 IBM® Rational® Application Developer for WebSphere® V7 创建事务 Web 服务提供程序,以及如何使用 Microsoft .NET 3.0 Software Development Kit 创建相应的服务使用程序。本文将向您介绍使用 WebSphere Application Server V6.1 和 Microsoft™ .NET™ Framework 进行开发所需要的步骤,其中包括针对两个平台的故障诊断提示和技巧。
引言
2005 年 8 月,IBM、Microsoft、IONA®、BEA® 和合作伙伴共同发布了一系列 Web 服务规范,该规范使应用程序能够以事务方式调用 Web 服务。这些规范包括:
处理短期事务活动的 WS-AtomicTransaction (WS-AT)。像使用其他事务系统(如 Java™ Transaction API (JTA) 或客户信息控制系统 (CICS))一样,您可以利用 WS-AT 来确保 Web 服务参与者进行的所有资源更新作为一个工作单元完成或回滚。
WS-BusinessActivity (WS-BA) 可以解决长时间运行活动的协作问题并支持补偿概念。
WS-Coordination (WS-Coor) 提供创建和交换事务上下文的基础机制。
WebSphere Application Server V6 和 V6.1、WebSphere Process Server V6、CICS Transaction Server V3.1 和 Microsoft .NET 3.0 Windows Communication Framework (WCF) 都支持 WS-AT。
本章将阐述 WS-AT 的基本概念,并指导您完成在 WebSphere Application Server 和 Microsoft .NET 3.0 之间构建事务 Web 服务的关键步骤。本文的目标读者是希望构建并部署跨不同平台的事务 Web 服务的 Web 服务开发人员、架构师和管理员。并且应该对 Java 编程、Web 服务开发、WSDL 和 SOAP 有基本的了解。
回页首
概述
WS-AT 通常用于协调 Web 服务参与者执行的活动,使所有的更新在单个工作单元中完成。例如,零售业可能需要保证有可用的库存并在发货之前收到付款。InventoryService、PaymentService 和 ShipmentService 可以驻留在使用异类技术堆栈的不同系统中,甚至可以跨组织边界。WS-AT 可以确保以事务方式执行对这三种 Web 服务的调用,并向应用程序提供原子性、一致性、隔离性和持久性 (ACID) 语义。
因为基础平台提供这一质量的服务,所以对于故障或超时条件,Web 服务开发人员无需开发自定义错误处理逻辑或进行手动撤消。
图 1 显示了一个示例,在该示例中,订单处理功能 (SubmitOrder.jsp) 使用 Web 服务调用以下三个服务提供程序来更新多个系统:InventoryService、PaymentService 和 ShipmentService。这些服务提供程序运行在不同的操作环境中,并访问不同的数据库和/或资源。借助 WS-AT,所有更新将通过一个全局事务进行协调。
图 1. 提供事务支持的订单处理示例
回页首
先决条件
要完成本文中的示例,您需要在 Microsoft Windows™ XP 平台上安装以下软件:
IBM Rational Application Developer V7 或 WebSphere Application Server 工具包(以下称为 AST)V6.1。您可以下载 Rational Application Developer 试用版。
Update Installer for WebSphere V6.1,它是安装 WebSphere Application Server FixPack 9 的先决条件。
WebSphere Application Server FixPack 9(用于 6.1.0.9),安装在 Rational Application Developer 附带的 WebSphere Application Server V6.1 测试环境中或独立的 WebSphere Application Server 上。必须安装此 FixPack,WebSphere 和 .NET 才能成功进行互操作。
Microsoft .NET Framework 3.0 Runtime。
Microsoft Windows SDK - 2007 年 3 月更新。可以将此更新应用到 Windows Vista 或 Windows XP。
WS-AT 与操作系统和平台无关。例如,您可以使用在其他分布式平台(如 Linux、AIX 或 zOS)上运行的 WebSphere Application Server 以事务方式与在 Microsoft 平台(如 Windows Vista、Windows Server 2003 或 Windows XP)上运行的 Microsoft .NET 进行互操作。
WebSphere Application Server V6 用户必须使用 WebSphere Application Server V6.0.2.19 (或更高版本)来与使用 WS-AT 的 Microsoft .NET 进行互操作。
回页首
入门
图 2 概述了构建事务 Web 服务使用程序和提供程序的主要步骤。
图 2. 在 WebSphere 和 .NET 之间启用 WS-AT 的主要步骤
以下各部分将描述这些步骤。
回页首
步骤 1:使用 Rational Application Developer 开发事务 Web 服务提供程序
本文中的示例遵循自顶向下的方法。首先,我们将创建 WSDL 文档来描述服务接口 HelloWorldTX,然后生成服务实现,最后将介绍对服务端点的事务支持。
创建 WSDL 文档
若要承载服务提供程序,则需要使用适当的 Web 模块创建 Java® 2 Platform Enterprise Edition® (J2EE) 企业应用程序对象,具体操作如下:
在 Rational Application Developer 中启用 J2EE 和 Web 服务开发人员功能,方法是选择 Windows => Preferences => General => Capabilities,并选中 Web Developer 和 Web service Developer。
通过选择 File => New => Project 创建一个新的 J2EE 对象。选择 J2EE – Enterprise Application Project,并单击 Next。
输入 HelloWorldTX 作为 Project Name,选择 WebSphere Application Server v6.1 作为 Target Runtime,然后单击 Next。
接受 Project Facets 的缺省值,并单击 Next。
通过选择 New Module 创建新的 Web 模块。取消选中 Application Client Module、EJB Module 和 Connector Module,然后单击 Finish。
单击 Finish,完成 J2EE 对象的创建。
在 J2EE 透视图中,展开新的 HelloWorldTX 对象,右键单击 WebContent,选择 New => Other = > Web Services => WSDL,并单击 Next。
输入 HelloWorldTX.wsdl 作为 File Name,并单击 Next 和 Finish 接受缺省值。
下载示例 HelloWorldTX.wsdl,剪切内容并将其粘贴到新建的 HelloWorldTX.wsdl 文件中。
生成服务实现
要生成服务实现,请完成以下步骤:
右键单击 HelloWorldTX.wsdl,选择 Web Services => Generate Java bean skeleton,并单击 Finish。
将生成的 HelloWorldTXSOAPImpl.java 更改为 return “Hello, ” + in; 。
启用 WS-AT 事务支持
在 WebSphere Application Server 中,WS-AT 事务支持是使用部署描述符指定的。不需要任何特殊 Java 代码。
展开 HelloWorldTXWeb => WebContent => WEB-INF,并打开 web.xml。
在 Servlets 选项卡上,选择 HelloWorldTXSOAPImpl Servlet。
向下滚动右侧的选项列表。在 WebSphere Extensions => Global Transaction 下,选中 Execute using Web Services Atomic Transaction on incoming requests。
按 Ctrl+S,保存对 Web 部署描述符 (web.xml) 的更改。
这将指示 WebSphere 运行时处理接收的任何 WS-AT 上下文,并在外部请求程序协调的全局事务下分派应用程序组件。
此时,HelloWorldTX Web 服务便可以使用了。
回页首
步骤 2:使用 Microsoft .NET Framework 3.0 开发事务 Web 服务使用程序
Microsoft .NET Framework 3.0 支持事务 Web 服务。服务使用程序可以是独立的 .NET 应用程序或者是在 Internet Information Services (IIS) 中运行的 Web 应用程序。在本文中,我们将构建访问 WebSphere 中的 HelloWorldTX 服务的独立 C# 客户机应用程序。
以下各步骤将描述如何使用 WSDL 文档从头构建 C# 客户机。还可以下载本文提供的预构建 .NET 客户机。
通过选择 Windows SDK => CMD Shell 启动 Windows SDK 命令 Shell。
创建工作目录存储客户机源代码(例如 C:\HelloWorldTXConsoleClient),并更改到该目录。
将 HelloWorldTX.wsdl 从 Rational Application Developer 工作区复制到工作目录。
通过发出以下命令生成 C# 代理类: svcutil HelloWorldTX.wsdl。
将 TransactionFlowAttribute 属性添加到生成的 HelloWorldTX.cs 源文件,如清单 1 所示: