第 1 部分介绍 Web 服务并教您如何在 Microsoft®Windows®系统上配置 DB2®Express-C 9.7 时使用 DB2 pureXML 启用它们。在本文中您将创建一个数据库,它是微型博客样例应用程序所使用的数据库。接下来,您将探索如何使用 pureXML 将微型博客数据库中的数据公开为 Web 服务。最后,您将了解如何使用 Web 浏览器测试公开的 Web 服务是否正常工作。
在第 2 部分中您将了解 Adobe®Flex,以及它如何出色地处理通过 Web 服务公开的数据。您将在 Windows 环境中安装 Flex SDK,了解 MXML 和 ActionScript 以及如何编译它们以构成一个 Flex 应用程序。然后,您将了解如何使用 Flex 组件构建微型博客应用程序的用户界面,以及如何使用一些样例 XML 数据测试它。当用户界面完成之后,把它和在第 1 部分中创建的 DB2 pureXML Web 服务集成起来。
Flex 是创建富 Internet 应用程序的强大方法,但如果您要用不同的视图显示数据,应该怎么办呢?在第 3 部分中,您将了解如何使用 pureXML Web 服务在 HTML 页面上发布微型博客条目。联合是任何社交媒体应用程序的重要方面,因此您还将了解以 RSS 提要的形式发布微型博客条目。最后,您将了解如何将您的微型博客应用程序与 Twitter 集成起来,从而允许您在 Twitter 和您自己的应用程序上发布更新。
在学习完本系列文章之后,您将具备构建特性丰富的微型博客应用程序所需的工具和知识,并且您可以根据自己和组织的需求轻松地扩展和修改微型博客应用程序。
您需要安装 DB2 数据库服务器 —— Express-C 版本的 DB2。关于如何下载和安装 DB2 Express-C 的信息,请参见本文末尾的 参考资料部分。您还将使用 IBM®Data Studio 和 WebSphere®Application Server Community Edition(在后文简称为 Community Edition)来将服务部署到 Web 服务器上。参见 参考资料部分获得下载信息。
IBM DB2 是一个关系数据库管理系统,它能够运行在许多设备和操作系统上。IBM DB2 有好几个版本,从入门级的 Express-C 数据库到高级的 Enterprise Server Edition。在本文中,您将使用 Express-C 版本,因为它是免费的,并且安装和配置比较简单。DB2 Express-C 在概念上与 Oracle Database XE (Express Edition) 和 Microsoft SQL Server Express 非常相似。但与其竞争对手不同的是,DB2 Express-C 并不限制数据库用户的数量和数据库的大小。
尽管 DB2 Express-C 是 DB2 产品家族中很基础的生产级数据库,但它支持 pureXML —— pureXML 是 DB2 的特性之一,它允许将原生的 XML 数据储存在数据库中,而不是将它转换为纯文本再储存。它以透明的方式完成该过程,因此您不必担心有效数据是否被储存为传统的 SQL 数据类型或 XML。另外,所有 XML 数据都受到用于保护传统关系数据的安全和数据完整性控件的保护。这允许您快速开发需要使用 XML 数据、关系数据或这两种数据的混合体的应用程序。
现代的应用程序通常使用面向服务架构(SOA)进行部署,SOA 包含的 Web 服务通过 Internet 或内部网为公开业务逻辑提供标准化并且独立于平台 / 技术的方法。通常使用下列工具公开 Web 服务:
- Simple Object Access Protocol (SOAP),一个基于 XML 的消息代理
- Web Services Description Language (WSDL),一个标准化 XML 接口描述语言
- Universal Description Discovery and Integration (UDDI),一个 Web 服务目录框架
您可以使用 IBM WebSphere Studio 创建用于公开 DB2 数据库中的数据的 Web 服务。WebSphere Studio 为创建到 DB2 数据的 WSDL 接口和直接向 UDDI 注册表发布 Web 服务提供工具。然后,您可以使用 IBM WebSphere Application Server 将这些 Web 服务部署到 Web 上。幸运的是,DB2 Web 服务基础设施会处理与 DB2 数据交互所需的所有 Java Database Connectivity (JDBC) 代码。
DB2 Web services Object Runtime Framework (WORF) 支持为在 Document Access Definition Extension (DADx) 文件中定义的一组数据库操作自动生成 WSDL 接口。这个 DADx 文件和 Apache Axis SOAP 服务器一起部署到一个合适的应用服务器中,比如 WebSphere Application Server。一旦部署完毕,您就可以通过任何使用 Web 服务的客户端访问 Web 服务。在本系列文章的第 2 部分中,您将使用 Adobe Flex 平台使用一些 DB2 Web 服务。
当安装完成并且安装程序关闭之后,将启动 DB2 First Steps 应用程序。在它打开之前,它可能询问您是否创建一个浏览器配置文件,以支持 JavaScript 和访问本地 DB2 文件。如果您看到这样的询问,请按 Create profile。DB2 First Steps 应用程序的屏幕截图类似于 图 1。
图 1. DB2 First Steps 应用程序
如果您想要设置样例数据库,那么可以设置一个。您可以使用 “Create new database” 按钮启动一个用于创建 DB2 数据库的向导。不过您在本文不采用这种办法,因为您需要创建一个支持 XML 的数据库,它不能通过该向导创建。当 DB2 First Steps 应用程序使用完成之后,可以关闭它。接下来,您将为您的微型博客应用程序创建一个 DB2 数据库。
要创建一个新的 DB2 数据库,需要打开 DB2 Command Editor。导航到 Start>Programs>IBM DB2>DB2COPY1 (Default)>Command Line Tools>Command Editor,加载完成之后,您将看到 DB2 Command Editor,如 图 2所示。
图 2. DB2 Command Editor
在主编辑器区域(在包含播放和停止按钮的工具栏的下面),输入下面的语句并按 Execute(带有播放图标的按钮):create database mblog using codeset UTF-8 territory us。
该过程需要一分钟左右才能完成,因此要耐心等待。当数据库创建完成之后,您将在结果窗口中看到 “DB20000I The CREATE DATABASE command completed successfully”。现在,数据库已经创建,接下来要告诉 DB2 Command Editor 连接到它。在编辑区域输入下面的语句并按 Execute:connect to mblog。
如果一切进展顺利,您将看到一条消息 “A JDBC connection to the target has succeeded”,表示您已经连接到 mblog 数据库。现在,创建一个名为 status_updates 的新表,用于储存 XML 格式的微型博客应用程序的更新。在编辑器窗口中输入 清单 1中的语句并按 Execute。
清单 1. 创建 status_updates 表
create table status_updates (
data xml
)
|
您将收到一条表示 SQL 命令成功完成的消息,如 图 3所示。
图 3. SQL 命令成功执行
现在,试图将一些 XML 数据插入到数据库中。在 DB2 Command Editor 的编辑器窗口中输入 清单 2中的 INSERT 语句。
清单 2. 插入 XML 状态更新
insert into status_updates values (
'<update display="true">
<date_created>2009-08-06T21:20:19</date_created>
<text>Hello World!</text>
</update>'
)
|
现在,按下 Execute,您将看到表示命令成功执行的响应消息。
未在常规的 RDBMS 列中输入该数据导致的问题之一是没有定义任何规则 —— 没有数据类型和 NOT NULL 标识符等。您可以轻松地插入一个毫不相干的 XML 文档,它将被接受。这正是 XML 模式应该派上用场的地方。您可以使用 XML 模式定义 XML 数据的可接受格式。随后,当您执行插入语句时,将根据该模式验证数据。
要创建 XML 模式,仅需打开一个纯文本编辑器(比如记事本)并创建一个新文件。文件的保存位置非常重要,为简单起见,将模式保存在文件夹 C:\xmlschemas\updates.xsd 下。如果您选择不同的位置,一定要确保在随后的模式注册中表示出来。将 清单 3中的代码输入到新文件中并保存它。
清单 3. XML 模式 - updates.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="update">
<xs:complexType>
<xs:sequence>
<xs:element name="date_created" type="dateTime"/>
<xs:element name="text" type="normalizedString"/>
</xs:sequence>
<xs:attribute name="display" type="xs:boolean" default="true"/>
</xs:complexType>
</xs:element>
</xs:schema>
|
清单 3中的模式定义了一个元素 update,它是一个包含两个子元素的复合元素:
date_created—— 一个dateTime元素text—— 一个normalizedString元素
在处理数据时,一个规范化字符串将告诉 XML 处理器删除字符串两边的不必要空格。
您已经将 XML 模式储存在一个文件中,现在您需要在 DB2 中注册该模式,这样它才知道向数据库插入数据时如何验证 XML 数据。在 DB2 Common Editor 的编辑器区域,输入 清单 4中的语句。
清单 4. 在 DB2 中注册 XML 模式
register xmlschema 'http://mblog.example.com' from 'C:/xmlschemas/updates.xsd' as mblog.status_update complete |
如果正确地注册了 XML 模式,您将收到响应:“DB20000I The REGISTER XMLSCHEMA command completed successfully”,如 图 4所示。
图 4. 成功注册 XML 模式
在此处值得一提的是,定义了 XML 模式并在数据库中注册它并不意味着插入任何 XML 数据都会自动根据该模式进行验证。换句话说,当执行 INSERT命令时,您需要手动地验证 XML。使用 XMLVALIDATE函数完成该过程,如 清单 5所示。
注意:您也可以选择创建一个数据库触发器来捕捉表上的每个 INSERT操作,并告诉它在执行 INSERT之前使用 XMLVALIDATE函数验证 XML 数据。在本文中,您将一直手动地使用 INSERT 语句验证数据。
清单 5. 根据 XML 模式验证 XML 数据
insert into status_updates values (
xmlvalidate(xmlparse(document('
<update display="true">
<date_created>2009-08-09T21:09:10</date_created>
<text>This should validate!</text>
</update>
')) according to xmlschema id mblog.status_update)
)
|
因为根据您的模式 清单 5中的 XML 是有效的,所以您将收到一条表示 SQL 命令成功执行的消息。现在,尝试插入无效的数据,看看会发生什么。在 清单 5中,将 <date_created>和 </date_created>标记之间的文本更改为 This is not a valid datetime。现在再次执行该语句。但这次,您将收到错误消息 “SQL16105N Incorrect XML data”。DB2 将提供关于该错误的有用信息,并提供纠正问题的建议 —— 在这个例子中,将显示 “Correct the XML document and try the operation again”。您已经在数据库中验证了 XML 数据,现在看看如何查询该数据。
您可以使用两种语言查询储存在 DB2 9 数据库中的 XML 数据:SQL (SQL/XML) 和 XQuery。您甚至还可以使用同时包含 SQL 和 XQuery 表达式的混合查询。首先,执行一个 SQL 查询以获取 status_updates 表的内容。在 DB2 Command Editor 中,输入以下 SQL 语句:select data from status_updates。
当您按下 Execute时,Command Editor 将切换到 Query Results 选项卡视图,您可以从该视图上看到一个表结构,它包含一个 Data列、一个包含文本 XML的字段和一个显示 3 个点号的按钮。该按钮在 图 5中用方框突出显示。
图 5. DB2 Command Editor Query Results 视图
单击包含 3 个点号的按钮弹出 XML Document Viewer,如 图 6所示。在 Tree View 选项卡中,XML 数据用树结构来表示,您还可以看到属性 display和两个展开并显示其值的子元素 date_created和 text。
图 6. DB2 XML Document Viewer
使用 SQL 语句获取 XML 数据的主要问题是不能使用过滤子句(比如 WHERE 子句)来过滤 XML 数据,并且不能使用 SQL 对数据执行合并。不过,您可以使用带有 XML 扩展(SQL/XML)的 SQL 执行这种查询。
如您所料,SQL/XML 的目的是扩展 SQL 查询语言,使其能够用传统的 SQL 表达式不具备的方法处理 XML 数据。例如,您可以使用 SQL/XML 搜索表,以找到这样一个行,其中特定 XML 元素储存在具有特定值的 XML 列中。例如,假设您想要计算其 XML 数据列的 text 元素的值为 This should validate!的行的数量。如果该值储存在 DB2 表中的典型 VARCHAR 列中,您可以使用 清单 6中的 SQL 语句完成该任务。
清单 6. SQL 语句
select count(*) from status_updates where text = 'This should validate!' |
但是由于您将 text数据存储在一个储存在 XML 列中的 XML 文档中,所以不能使用该语句。您应该使用 清单 7中的 SQL/XML 语句。
清单 7. 使用 SQL/XML 过滤 XML 数据
select count(*) from status_updates
where xmlexists('$u/update[text="This should validate!"]'
passing status_updates.data as "u")
|
运行该语句将在 Query Results 窗口中返回结果 1,如 图 7所示。
图 7. 运行 SQL/XML 语句的结果
如果您想要对该查询执行一个简单的测试,可以将 text 改为不正确的数据并在此运行该查询。这次您将看到结果为 0。现在,以表示传统 SQL 表可能使用的方法使用 SQL/XML 返回 XML 文档元素。为此,需要使用 XMLTABLE 函数。在 Command Editor 窗口中输入 清单 8中的语句。
清单 8. 使用 XMLTABLE 格式化 SQL/XML 查询
select t.date_created, t.text from status_updates su,
xmltable('$u/update' passing su.data as "u"
columns date_created varchar(100) path 'date_created',
text varchar(500) path 'text') as t
|
执行该查询将返回与 图 8一样的结果。在 Query Results 选项卡上,您将看到 DATE_CREATED和 TEXT元素的值。
图 8. XMLTABLE 查询的结果
最后,了解如何使用 XQuery 从表中获取数据。再一次在 Command Editor 窗口中输入以下语句:xquery db2-fn:xmlcolumn('STATUS_UPDATES.DATA')。
表和列都要用大写字母,这很重要,否则查询将无效。按下 Execute将在命令结果区域返回查询结果,如 图 9所示。
图 9. XQuery 语句的结果
在结束本小节之前,我们使用 XQuery 来过滤 XML 数据并仅返回特定的元素。在这个例子中,您将仅返回 text 元素,并且这将由 date_created元素进行过滤(见 清单 9)。
清单 9. 使用 XQuery 过滤 XML
xquery
for $y in db2-fn:xmlcolumn('STATUS_UPDATES.DATA')/update
where $y/date_created="2009-08-09T21:09:10"
return $y/text
|
在 图 10中您可以看到该查询的预期结果。
图 10. 过滤 XQuery 语句的结果
到目前为止,您已经设置好了微型博客数据库,并且获得了一些插入和获取 XML 数据的经验,您可以继续前进,创建一些使用该数据的 Web 服务。
要创建 Web 服务,需要使用 IBM Data Studio 和 WebSphere Application Server Community Edition 来将这些服务部署到 Web 服务器上。首先,安装 Community Edition。访问 http://www.ibm.com/developerworks/downloads/ws/wasce/ 并单击 马上下载下载安装压缩文件。您需要使用 IBM ID 登录才能下载该压缩包。根据您的操作系统下载正确的版本(为了配合本文,我将它安装在 Windows 操作系统上)。
当加载安装程序时,按 Next进入 License Agreement 界面。阅读许可并选择 I accept the terms of the License Agreement然后按 Next。接受默认的安装目录并按 Next。查看安装概述并单击 Install开始安装。安装完成之后,按 Done退出安装程序。至此,您已经准备好 Community Edition。在后面部署 Web 服务时,Data Studio 将为您启动 Application Server。
现在,Community Edition 已经安装完毕,接下来需要安装 Data Studio(从 参考资料部分获取下载链接)。下载在 图 11中突出显示的 IDE 包。这个包包含创建和部署 Web 服务所需的所有特性。
图 11. 下载 Data Studio IDE 包
要访问下载部分,您需要使用 IBM ID 登录。在下载页面上,根据您的操作系统选择相关的产品(本文使用 Windows 系统)并单击 Continue。该过程可能会询问您一下关于如何使用该软件的细节。填写这些细节之后,在下一个界面中勾选 IBM Data Studio (IDE) Install旁边的复选框并按 Download Now开始下载进程。该文件的大小为 687 Mb,因此最好使用速度比较快的 Internet 连接(否则要有很大的耐心!)。
下载完成之后,解压缩它并运行 setup.exe 文件以启动 Data Studio 安装程序。从出现的界面中,选择安装语言并按 OK进入 Launchpad 应用程序。
在下一个界面中,可以随意浏览左侧的各个部分提供的信息,准备好之后单击 Install Product运行 Installation Manager。在 Install Packages 界面中,接受默认的选择并按 Next(见 图 12)。
图 12. IBM Installation Manager - Install Packages
将要求您阅读 License Agreements。如果您已经准备好进入下一步,选择 I accept the terms in the license agreements并单击 Next。在 Location 界面上,接受默认选项并按 Next继续。在接下来的界面中,接受默认选项(Create a new package group)和安装目录并单击 Next。您可以选择扩展现有的 Eclipse IDE 安装(如果有的话)。其他选项使用默认值并按 Next。
在 Features 部分中,首先询问您想要安装的 Translations。默认选择 English,并且不能取消选择。如果您想要安装其他语言,可以从这里勾选。否则,单击 Next。将提供选项让您选择安装哪个特性。在这里使用默认值并单击 Next。最后,您将进入 图 13中的 Installation Summary 页面。您可以从这里查看您的选择,并且可以根据需要返回对应的界面进行修改。确定一切妥当之后,按 Install开始安装过程。
图 13. IBM Installation Manager - Summary
当安装完成之后,您将看到一个类似于 图 14的界面,它表明安装成功。按 Finish启动 IBM Data Studio。
图 14. IBM Installation Manager - Installation Complete
当 Data Studio 启动之后,它可能会询问您选择工作空间。选择 Use this as the default and do not ask again选项并单击 OK(见 图 15)。
图 15. IBM Data Studio - Workspace Launcher
您在 Data Studio 中看到的第一个界面是 Welcome 界面。在该界面的顶部中间单击箭头图标(在 图 16中突出显示)关闭该界面并进入主开发区域。
图 16. IBM Data Studio - Welcome 界面
在主 Data Studio 界面的左下部分可以看到 Data Source Explorer,它显示当前可用的 Database Connections。如果您一直按照本文的步骤做,这里应该出现 MBLOG 数据库。右键单击 MBLOG连接弹出它的上下文菜单,然后选择 Connect。这将弹出另一个新的窗口,它显示数据库连接的属性,并要求您输入用户名。输入您的数据库用户名和密码(前面在 status_updates 表中创建)。选择复选框 Save password并按 Test Connection。如果连接正常工作,您将看到消息 “Ping succeeded!”,如 图 17所示。
图 17. 配置数据库连接
按 OK关闭 Properties 窗口。现在,Data Studio 将启动一个到 MBLOG 数据库的连接,展开的数据库连接包含两个新的属性:Instance 和 MBLOG。单击 MBLOG 选项左边的展开按钮显示数据库中的不同对象类型(Buffer Pools 和 Groups 等等)。至此,您已经建立了到数据库的连接,接下来需要创建一个新的开发项目。
选择 File>New>Data Development Project打开 New Project 对话窗口。将要求您输入项目名,输入 Microblog并按 Next。在下一个界面中,将要求您选择一个现有的数据库连接或创建一个新的连接。选择 MBLOG连接并按 Finish关闭对话窗口(见 图 18)。
图 18. 选择数据库连接
现在您将返回到主 Data Studio 工作空间。在左上角,您会看到 Microblog 已成为 Data Project Explorer 面板的一个选项。单击该选项左边的展开按钮显示项目的各个部分(PL/SQL packages 和 SQL Scripts 等)。
接下来将创建一个简单的的 SQL 脚本,用于查询 status_updates 表并返回储存在每个行的数据列中的 XML 数据。从刚才展开的选项中,右键单击 SQL Scripts选项并选择 New>SQL or XQuery Script。这将打开一个对话窗口请求提供脚本的名称以及询问您希望如何编辑它。输入 getAllUpdates作为脚本名称并按 Finish。
将创建文件 getAllUpdates.sql 并在主编辑器窗口中打开它。在该窗口中输入以下语句:select data from "MBLOG".status_updates。
选择 File -> Save保存该文件。如果您想要测试 SQL 语句,按 F5执行该脚本。结果将显示在界面底部的 SQL Results 选项卡中。
接下来,创建一个用于向数据库表插入新行的存储过程。在窗口左上角的 Data Project Explorer 面板上,右键单击 Microblog 下面的 Stored Procedures。选择 New>Stored Procedure打开用于创建新的 Stored Procedure 的对话窗口。使用 insert_update作为新的存储过程的名称,并从 Language 下拉列表中选择 PL/SQL,然后按 Finish(见 图 19)。
图 19. 新的存储过程
在 Parameters 界面上,单击 Add按钮添加新的参数。从弹出窗口中,让 Parameter 模式保留为 In,然后给它输入名称 text。它的 PL/SQL 类型为 VARCHAR,长度是 500。按 Add按钮给存储过程添加参数。
INSERT_UPDATE储存过程将在 Stored Procedures 部分中保存,并在 Editor 窗口中打开。修改该代码,使其与 清单 10中的代码相同。确保使用储存 status_updates 表的模式代替 MBLOG。
清单 10.
INSERT_UPDATE存储过程代码
CREATE OR REPLACE PROCEDURE INSERT_UPDATE(IN c_text VARCHAR(500), IN display VARCHAR(5))
LANGUAGE SQL
BEGIN
INSERT INTO "MBLOG".status_updates(data) VALUES(
XMLDOCUMENT(XMLELEMENT(
name "update",
XMLATTRIBUTES(display as "display"),
XMLFOREST(
replace(varchar_format(current timestamp, 'YYYY-MM-DD HH24:MI:SS'),
' ', 'T') as "date_created",
text as "text"
)
))
);
RETURN 1;
END
|
现在,需要将存储过程部署到数据库中以便测试它。在 Data Project Explorer 面板上右键单击 INSERT_PROCEDURE选项并选择 Deploy。从 Target 数据库选择 Use current database并确保选择正确的 Target 模式。按 Finish编译存储过程。在 Data Source Explorer 中,在模式中导航找到刚才编译的 Stored Procedures 和 INSERT_UPDATE 过程。右键单击该存储过程并单击 Run。这将打开 Specify Parameter Values 对话框。在 c_text参数中输入值 Testing procedure,并在 c_display参数中输入 true。按 OK运行该存储过程。如果一切顺利,您将看到消息 “Run completed”。现在切换回到 getAllUpdates SQL 脚本并再次按 F5。这次您将看到新添加的行,即刚才用存储过程创建的行。
您现在已经可以创建一些 Web 服务了。在 Data Project Explorer 中右键单击 Web Services并选择 New Web Service。这将打开 New Web Service 对话框,如 图 20所示。确保已选择 Microblog 项目并输入 StatusUpdates作为它的名称,并将 Namespace URI 更改为 urn:updates。
图 20. 新的 Web 服务
接下来将给您的 Web 服务添加 SQL 脚本 getAllUpdates.sql。从 Data Project Explorer 选择 SQL 脚本 getAllUpdates.sql 并将其拽入到 StatusUpdatesWeb 服务中。您将在 StatusUpdates Web 服务内部创建一个 getAllUpdates操作。接下来,选中 Stored Procedure INSERT_UPDATE并将其拽入到刚才的位置。现在,您的 StatusUpdatesWeb 服务中有两个操作:getAllUpdates和 INSERT_UPDATE(见 图 21)。
图 21. StatusUpdates Web Service 操作
下一个步骤是创建一个用于部署最新创建的 Web 服务的 Web 服务器实例。在 Data Studio 中,选择 Window>Show View>Other并从 Show View 对话框选择 Server,然后选择 Servers。现在按 OK,此时工作空间中将打开 Servers 选项卡(见 图 22)。
图 22. 显示服务器的视图
现在 Servers 选项卡应该出现在 Data Studio 窗口的底部。从这里右键单击空白区域并选择 New>Server打开 New Server 向导。在该向导的第一个界面中,接受默认的选项,如 图 23所示。
图 23. Define a New Server 窗口
服务器的默认选项包括:
- 主机名:localhost
- 服务器类型:IBM WASCE v2.1 Server
- 名称:IBM WASCE v2.1 Server at localhost
按 Next。在 New Server - New IBM WASCE v2.1 Runtime 窗口中,将要求您选择您的 JRE 安装和 WASCEW 安装的位置。从该处选择合适的值并按 Next(见 图 24)。
图 24. 选择 JRE 和 WASCE
选择的值为:
- JRE:jdk
- Application Server installation Directory:C:\Program Files\IBM\WebSphere\AppServerCommunityEdition
对于 New Server 对话框接下来的所有界面,仅需接受默认值并按 Next。当您进入 Add and Remove Projects 界面时,按 Finish。现在通过启动 Web 服务器来测试它是否有效。右键单击刚才向 Servers 选项卡添加的实例并选择 Start。这需要几分钟时间,请耐心等待。启动完毕之后,将关闭 Console 选项卡。在 Servers 选项卡上,您将看到 Server 的状态为 “Started”,如 图 25所示。
图 25. Web 服务器已启动
现在 Web 服务已经定义,并且设置了一个可以运行的 Web 服务器实例,接下来将把 Web 服务部署到 Web 服务器上。从 Data Project Explorer 右键单击 StatusUpdatesWeb 服务并选择 Build and deploy。这将打开 Deploy Web Service 向导。在这个界面中,选择 Server单选按钮并确保从下拉列中选择 v2.1 Server at localhost。确保勾选了 Register database connection with Web server,以及勾选了 REST和 SOAP over HTTP消息协议。设置完成之后,确保您的选择与 图 26显示的相同,并按 Finish按钮部署 Web 服务。
图 26. Deploy Web Service 对话框
选择的部署值为:
- Web server, Type:WebSphere Application Server Community Edition, version 2 (all releases)
- Web server, Server:IBM WASCE v2.1 Server at localhost
- Data handler, Data handler:JDBC
- Data handler, Register database connection with Web server:selected
- Message protocols, REST (Web access):selected
- Message protocols, SOAP over HTTP:selected
- Parameters, Name:artifact.contextRoot and Value:MicroblogStatusUpdates
- Parameters, Name:artifact.soapEngine and Value:APACHE_AXIS_1_4
- Parameters, Name:artifact.soapEngineDirectory and Value:<Use .jar files installed on Web server>
如果您没有收到任何错误消息的话,表明 Web 服务已经成功部署,祝贺您!在下一个小节中,您将确保 Web 服务像预期那样运行。如果您在部署 Web 服务时遇到问题,请检查在 SQL 脚本和 Stored Procedure 中是否使用了正确的模式名 —— 这是导致部署失败的最常见原因。
Web 服务已经部署完毕,现在我们测试它是否正常工作。Data Studio 包含一个用来测试 Web 服务的内置实用程序,但在这个小节中您将使用 Web 浏览器测试 Web 服务是否有效。使用 Web 浏览器的主要原因是在本系列的第 2 部分中,您将从 Adobe Flex 应用程序连接到这些 Web 服务,因此您需要确保能够从 Data Studio 之外运行这些 API。
我发现 Firefox 在显示 XML 数据时非常快,因此可以优先选择使用它。其他浏览器显示的方式可能要怪一些,或要求您先把 XML 数据下载到磁盘。在 Web 服务部署之后,访问以下 URL:http://localhost:8080/MicroblogStatusUpdates/rest/StatusUpdates/getAllUpdates
如果 Web 服务正常运行,您将收到类似于 图 27所示的响应。
图 27. 来自 Web 服务的
getAllUpdates方法的响应
现在尝试通过另一种方法插入一些数据。输入以下 URL:http://localhost:8080/MicroblogStatusUpdates/rest/StatusUpdates/insertUpdate?C_TEXT=It%20Works!&C_DISPLAY=true 将返回类似于 图 28所示的响应。
图 28. 来自 Web 服务的
insertUpdate方法的响应
现在再次导航到针对 getAllUpdates的 URL,检查是否实际插入了行。在响应的底部,您应该看到刚才输入的行的元素。如果一切正确工作,您就创建了一个有效的 Web 服务。
从本系列的第一篇文章中,您了解了 IBM DB2 pureXML 和 Web 服务。您安装了 DB2 Express-C 并为样例微型博客应用程序创建了一个数据库。您学习了如何使用 SQL 语句、SQL/XML 和 XQuery 语句与 DB2 数据库中的 XML 数据交互。您还创建了一个 SQL 脚本和一个存储过程,用于访问 status_updates 数据并向它添加新的数据。您了解了如何在 Web 服务中将这个脚本和存储过程公开为方法,以及如何将 Web 服务部署到 Community Edition (WASCE) 服务器中。最后,您看到如何在 Web 浏览器中使用 REST 式 HTTP GET 请求测试这些方法。
在第 2 部分中,您将以本文为基础继续进行探讨。您将使用 Adobe Flex 创建一个漂亮的、使用本文创建的 Web 服务的用户界面。您将了解使 Flex 应用程序正常运行并从 Web 服务获取或向其添加信息所需的全部知识,包括从安装 Flex SDK 到开发用户界面和后端代码。
学习
- 访问 DB2 校园讲座(IBM DB2 Express-C 入门)专题:通过 DB2 Express-C 系列入门讲座,学习 DB2 的开发和管理入门知识。
- Finally! Bring native XML data into your relationship data using DB2 Express-C(Eric Long,developerWorks,2007 年 8 月):了解如何使用 DB2 Express-C 的新特性储存、查询和操作使用 SQL 和 XQuery 的原生 XML 文档。
- DB2 9 pureXML Guide:阅读这份 IBM 红皮书了解 pureXML 数据存储、混合数据库设计和管理。
- DB2 9: pureXML Overview and Fast start:阅读这份 IBM 红皮书,它介绍了 DB2 9 for Linux™, UNIX®, and Windows 中的混合 XML 数据服务。
- DB2 pureXML Cookbook: Master the Power of the IBM Hybrid Data Server(Matthias Nicola 和 Pav Kumar-Chatterjee,IBM Press,2009 年 8 月):通过这本由两位 IBM 专家合著的书,您可以找到数据库从业人员用于构建更快的 XML 解决方案所需的实用解决方案和经过验证的代码样例。
- Overview of IBM DB2 pureXML(2008 年 10 月):阅读来自 DBMS2 的概述。
- IM 与 SOA 专题:了解如何将 DB2 和数据管理融入到 Web 服务的总体框架中。
- SOA and Web services 新手入门:了解如何将 Information Management 融入到 Web 服务的总体框架中。
- Access DB2 with Web services: Creating Web services on Windows to access DB2(Quentin Presley,developerWorks,2003 年 3 月):在本文中,您将了解到通过 Web 服务访问 DB2 数据有多么简单。它展示了如何在 Windows 平台上使用 WebSphere Studio V5 的 Application Developer 配置开发和测试使用 DB2 数据的 Web 服务。
- 集成数据管理:跨数据生命周期管理数据(Holly Hayes,developerWorks,2009 年 6 月):详细阅读这个概述文章,它解释了 Integrated Data Management 的未来和现状,以及您(数据库架构师、开发人员、测试人员、DBA 或数据维护人员)如何在这个年代使用 IBM 解决方案快速抓住出现的机遇,从而改善服务质量、降低风险和减少成本。
- 在 IBM Data Studio 2.2 和 Optim Development Studio 2.2 中使用 PL/SQL 进行开发(Thomas Sharp,IBM developerWorks,2009 年 8 月):使用 IBM Data Studio 2.2 和 Optim Development Studio 2.2 开发使用 Oracle PL/SQL 的例程。
- IBM XML 认证:了解如何才能成为一名 IBM 认证的 XML 和相关技术的开发人员。
- XML 技术库:访问 developerWorks XML 专区,获得广泛的技术文章和技巧、教程、标准和 IBM 红皮书。
- developerWorks 技术活动 和 网络广播:随时关注技术的最新进展。
- developerWorks 播客:收听针对软件开发人员的有趣访谈和讨论。
获得产品和技术
- 现在可以免费使用 DB2 。下载 DB2 Express-C,这是为社区提供的 DB2 Express Edition 的免费版本,它提供了与 DB2 Express Edition 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。
- WAS CE 下载页面:下载基于 Apache Geronimo 技术的轻量级 Java EE 应用程序服务器。
- 获取 IBM Data Studio:获取 IDE 包,它包含开发和管理本文的 IBM Data Server 所需的基本工具。
-
IBM 产品评估试用版软件:下载或 IBM SOA Sandbox for Reuse,并开始使用来自 DB2®、Lotus®、Rational®、Tivoli®和 WebSphere®的应用程序开发工具和中间件产品。
讨论
- 参与论坛讨论。
- XML 专区讨论论坛:参与几个与 XML 有关的讨论之一。
- developerWorks blogs:查看这些博客并加入 developerWorks 社区。

