 | 级别: 初级 Owen Cline (owenc@us.ibm.com), 经过认证的咨询 IT 专家 - Software Services for WebSphere, IBM
2004 年 11 月 01 日 本文将展示如何在商业应用中有效地使用 XML 技术,并解释如何将应用程序与 DB2® Universal Database™、DB2 XML Extender、WORF、WebSphere® Application Developer 和 WebSphere Application Server 集成。您将学习如何设计和创建一个用 WebSphere Application Developer 开发并构建在 WORF(DB2 Web Services Object Runtime framework)之上的 Web 服务 XML 应用程序。该 XML 应用程序处理来自 DB2 数据库和保存在 DB2 数据库中的 XML 数据。
DB2 XML Extender 概述
DB2 XML Extender 提供了存储和访问 XML 文档的功能,以及从关系数据组成 XML 文档或者将 XML 文档分解成关系数据的能力。为了实现这些功能,DB2 XML Extender 为 DB2 Universal Database 提供了一组新的数据类型、函数和存储过程。有了 DB2 XML Extender,就可以将 SQL 用作访问 XML 文档的主要方法,从而使任务简单不少。XML Extender 还为管理任务提供了方便,因为它提供了基于 GUI 的向导、一组用于管理的存储过程,以及管理命令。
存储和检索
通过使用 DB2 XML Extender,您可以将整个 XML 文档作为一种用户定义的数据类型存储到 DB2 中,或者将 XML 内容映射为 DB2 表中的列。DB2 XML Extender 还可以将 XML 文档存储为文件系统中的外部文件,并将一个指向该文件的指针存储在 DB2 数据库中,这样就可以一边继续使用遗留的文本文件,一边享受 DB2 带来的好处。DB2 XML Extender 提供了搜索 XML 元素和属性的强大功能,这些功能也可以与 DB2 Text Extender 的结构化文件和纯文本搜索功能相结合(请参阅
http://www-3.ibm.com/software/data/db2/extenders/text/index.html)。
在 DB2 中集成 XML 文档
为了将 XML 文档集成到 DB2 中,DB2 XML Extender 提供了两种选项:
- XML Columns:该方法使您可以将 XML 文档存储在 DB2 中。这些 XML 文档被插入到支持 XML 的列中,并且可以被更新、检索和搜索。元素和属性可以映射为称作副表(side table)的 DB2 表,然后为该表建立索引,以便快速搜索。
- XML Collections:该方法使您可以将 XML 文档结构映射为 DB2 表,这样就可以将已有的 DB2 数据组成 XML 文档,或者将 XML 文档分解成 DB2 数据。
文档类型定义(DTD)库
DB2 XML Extender 提供了一个 XML DTD 库。当为 XML 启用一个数据库时,便创建了一个名为 DTD_REF 的 DTD 引用表。这个表中的每一行包含一个 DTD,还有一些关于该 DTD 的元数据信息。您可以将自己的 DTD 插入到该表中。可以用这个表中的 DTD 验证 XML 文档的合法性。
文档访问定义
DB2 XML Extender 还为您提供了一种称作文档访问定义(document access definition,DAD)的映射模式,这是一种用于将 XML 文档映射为关系数据的文件。DAD 是一种符合 XML 格式的文档,它使您可以在使用 XML Column 或 XML Collection 时,将 XML 文档结构与 DB2 数据库相关联。使用 XML Column 时和使用 XML Collection 时的 DAD 文件结构有所不同。DAD 文件是通过使用 XML_USAGE 表来管理的,该表是在启用数据库时创建的。
位置路径
一个位置路径就是一个 XML 标记序列,各标记之间以正斜杠(/)隔开,位置路径可以标识一个 XML 元素或属性。在以下情形中,位置路径在 DB2 XML Extender 和 DB2 Text Extender 中使用:
它们是作为输入提供的,以便提取 UDF,标识将提取的元素和属性。
对于 XML Columns 方法,在定义 DAD 中的索引方案时,它们被用于指定一个 XML 元素或属性与一个 DB2 列之间的映射文件。
它们被 Text Extender 用于结构化文本搜索。
清单 1 展示了 DB2 XML Extender 所支持的位置路径语法:
清单 1. 位置路径语法
/
Represents the XML root element.
/tag1
Represents the element tag1 under root.
/tag1/tag2/..../tagn
Represents an element with the name tagn as the child of the descending chain
from root, tag1, tag2, through tagn-1.
//tagn
Represents any element with the name tagn, where double slashes(//) denote
zero or more arbitrary tags.
/tag1//tagn
Represents any element with the name tagn, a child of an element with the name
tag1 under root, where double slashes (//) denote zero or more arbitrary tags.
/tag1/tag2/@attr1
Represents the attribute attr1 of an element with the name tag2, which is a
child of element tag1 under root.
/tag1/tag2[@attr1="5"]
Represents an element with the name tag2 whose attribute attr1 has the
value 5. tag2 is a child of element with the name tag1 under root.
/tag1/tag2[@attr1="5"]/.../tagn
Represents an element with the name tagn, which is a child of the descending
chain from root, tag1, tag2, through tagn-1, where the attribute attr1 of tag2
has the value 5.
|
安装 XML Extender
DB2 XML Extender Version V7.1 要求在 AIX、Sun Solaris、Linux、Windows NT 和 Windows 2000 上安装了 DB2 Universal Database V6.1 或更高版本。DB2 XML Extender 包含以下组件:XML Extender Server、XML Extender 运行时客户机、XML Extender 软件开发人员工具包(SDK)、示例和在线文档。要在 Windows NT 上安装 DB2 XML Extender,可遵循以下步骤:
- 装入 DB2 XML Extender CD。
- 阅读 D:\db2xml\yourPlatform 下的 readme 文件,其中 D:\ 是用于装载 CD 的驱动器,yourPlatform 可以是 AIX、NT 或 Solaris,这取决于您自己的平台。
- 要在 Windows NT 上安装 DB2 XML Extender,可以执行 D:\db2xml\nt 目录中的 setup.exe 文件。
- 选择所需的安装语言。
- 选择您想要安装的产品:DB2 XML Extender Server 或 DB2 XML Extender Client。如果您要在一个服务器平台上安装 DB2 XML Extender,那么请选择
XML Extender Server。这个选项还将安装 XML Extender Client 组件。如果您要在一个客户机环境中安装 DB2 XML Extender,那么请选择
XML Extender Client。
- 从以下三种安装类型中选择一种:
Typical、
Compact 或
Custom (推荐 Typical)。
- 保留默认的目标位置 C:\dxx,或选择另一个文件夹来安装 DB2 XML Extender。
- 保留默认的 Program Folder DB2 XML Extender,或另外选择一个选项。
- 当安装完所选的组件时,请关闭和重启系统。
检验安装
为了检查安装情况,您必须创建一个数据库,将该数据库绑定到 XML Extender 和 CLI,然后运行安装检查程序。
- 创建一个数据库。您可以使用 DB2 Control Center,或者在 Command Center 或 Command Line Processor 窗口中使用
CREATE DATABASE MYDB 命令,其中,MYDB 是您想要用于 XML Extender 的数据库的名称。
- 创建了数据库后,可以按照以下步骤将其绑定:
- 在一个 DB2 Command Window 中,通过输入以下命令连接到数据库:
db2 connect to mydb。
- 转到 XML Extender 安装目录的 BND 子目录。例如,如果您将 XML Extender 安装在 C:\DXX 中,那么可以通过以下命令转到 C:\DXX\BND:
cd /d C:\DXX\BND。
- 输入以下命令,将数据库绑定到 XML Extender:
db2 bind @dxxbind.lst。
- 通过以下命令转到 DB2 安装目录的 BND 子目录:
cd /d %DB2PATH%\bnd。
- 输入以下命令,将数据库绑定到 CLI:
db2 bind @db2cli.lst。
- 输入以下命令,断开与数据库的连接:
db2 terminate。
- 绑定了数据库之后,输入以下命令,回到 XML Extender 安装目录的主目录(例如 C:\DXX):
cd /d C:\DXX。
- 输入以下命令,运行安装检查程序:
<![CDATA[ dxxinstallchk mydb > out 2>&1 ]]>,其中 mydb 是数据库名,out 是输出文件名。这里的输出应该类似于验证文件 dxxinstallchk.vfy 的内容。
例如,如果用户是 xmlext,数据库是 xmltest,那么我们将得到下面的输出文件:
DXXA002I Connecting to database xmltest.
DXXA005I Enabling database xmltest. Please wait.
DXXA006I The database xmltest was enabled successfully.
Database Connection Information
Database server = DB2/NT 7.1.0
SQL authorization ID = XMLEXT
Local database alias = XMLTEST
DB20000I The SQL command completed successfully.
DB20000I The SQL command completed successfully.
DXXA002I Connecting to database xmltest.
DXXA000I Enabling column Order. Please Wait.
DXXA022I Column Order enabled.
DXXA002I Connecting to database xmltest.
DXXA008I Disabling column Order. Please Wait.
DXXA034I XML Extender has successfully disabled column Order.
DB20000I The SQL command completed successfully.
DXXA002I Connecting to database xmltest.
DXXA035I XML Extender is disabling database xmltest. Please wait.
DXXA036I XML Extender has successfully disabled database xmltest.
DB20000I The TERMINATE command completed successfully.
为 XML 启用数据库
使数据库支持 XML 是将 XML 信息存储到数据库中所需的第一步。启用一个数据库时,将创建:
- db2xml 模式(同时指定了所需的权限)。
- 用户定义类型(UDT)XMLVARCHAR、XMLCLOB、XMLFILE 和很多用户定义函数(UDF)。
- DB2 XML Extender 所需的控制表,例如 DTD_REF 和 XML_USAGE。
您可以通过以下某一种方法启用数据库的 XML 支持:
- Administration 命令 dxxadm,该命令有不同的命令选项,这取决于您想要执行的操作。启用数据库的命令是:
dxxadm enable_db mydb,其中 mydb 是您想要启用的数据库的名称。
- Administration 向导。单击
Start -> Programs -> DB2 XML Extender -> XML Extender Administration Wizard。
- Administration 存储过程调用 dxxEnableDB()。
XML columns 方法
若使用 XML Columns 方法,当存储了文档后,您可以对 XML 文档执行各种类型的操作:您可以直接抽取和搜索 XML 文档的 XML 元素和属性,或者,为了提高性能,您可以在副表中存储可能经常要访问的元素和属性。DB2 Text Extender 可用于将执行结构化文档和纯文本搜索的功能扩展到 XML 文档中。
您可以选择更新 XML 元素的内容或 XML 属性的值。
XML 文档还可以被 XML 应用程序检索和使用。若使用 XML Columns 方法,您可以将整个 XML 文档原原本本地存储在一列中。如果符合以下一个或多个标准,那么选择 XML Columns 方法是最好的:
- XML 文档已经存在,您想要将报纸文章、订单之类的文档存档。
- XML 文档经常被读,但很少更新。
- 更新的性能不是很关键。
- 您想要原原本本地存储 XML 文档。
- 您想要在本地文件系统上将 XML 文档保存于 DB2 之外。
- 您知道哪些元素或属性是经常要搜索的。为了对这些列执行有效的搜索,您可以决定在副表中对这些经常要访问的元素或属性创建索引。
XML columns 方法实例
让我们看一个实例,该实例展示了如何操纵雇员数据。
清单 2. person.xml
<?xml version="1.0"?>
<!DOCTYPE person SYSTEM "c:\person.dtd">
<person id="1">
<firstName>John</firstName>
<lastName>Smith</lastName>
<country>US</country>
<phone>
<type>office</type>
<number>12345678</number>
</phone>
<phone>
<type>home</type>
<number>34567890</number>
</phone>
</person>
|
清单 3. person.dtd
<?xml version="1.0"?>
<!ELEMENT person (firstName,lastName,country,phone*)>
<!ATTLIST person id CDATA #REQUIRED >
<!ELEMENT firstName (#PCDATA )>
<!ELEMENT lastName (#PCDATA )>
<!ELEMENT country (#PCDATA )>
<!ELEMENT phone (type,number)>
<!ELEMENT type (#PCDATA )>
<!ELEMENT number (#PCDATA )>
|
接下来,您需要一个 XML 列来存储 XML 文件。DB2 XML Extender 提供了三种新的用户定义类型,这些类型放在 db2xml 模式中,用于以列数据的形式存储 XML 文档:
- XMLVarchar:您可以将一个 XML 文档存储在数据库中,最大长度为 3 KB。
- XMLCLOB:XML 文档也是存储在数据库中,但最大长度为 2 GB。
- XMLFILE:这个 UDT 允许您将文档保留在本地文件中。
例如,下面的 SQL 语句将创建一个表 person,其中包含一个 XMLCLOB 类型的 XML 列:
清单 4. 创建表 person
create table person(id integer not null primary key,
person db2xml.xmlclob notlogged);
|
然后,如果您打算使所存储的 XML 文件生效,那么应该注册 DTD 文件。您需要在 DB2 XML Extender 中注册 DTD。为做到这一点,必须将 DTD 文件存储在 DTD_REF 表中(这个表是在启用数据库期间在 DB2XML 模式中创建的),然后将该文件与惟一的标识符 DTD ID 相关联。有两种方法可以将一个 DTD 插入到 DTD_REF 表中:
- 使用 GUI XML Extender Administration 向导。
- 使用一条 INSERT SQL 语句,以及由 DB2 XML Extender 提供的用户定义函数 XMLClobFromFile,将 DTD 文件作为 XMLCLOB 数据类型插入到 DTD_REF 中。例如,如果您想将它插入位于目录 C:\TEMP 的 DTD person.dtd,并将 DTD 与惟一的标识符 C:\TEMP\person.dtd 相关联,那么所用的 SQL 语句如下所示:
清单 5. 向表 person 插入记录
insert into db2xml.dtd_ref(dtdid, content, usage_count, author, creator, updator)
values('C:\TEMP\person.dtd',db2xml.XMLClobFromFile
('C:\TEMP\person.dtd'),0, 'xmlext','xmlext','xmlext');
|
创建一个 Document Access Definition (DAD) 文件,该文件本身是一个 XML 文档,它指定了如何处理存储在数据库中的 XML 文档。对于 XML Columns 方法,只有在您想要在存储之前检验 XML 文档的合法性时,或者当您想建立副表中的元素或属性的索引时,才需要 DAD 文件。
清单 6. person 的 DAD 文件
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
<DAD> 3
<dtdid>C:\TEMP\person.dtd</dtdid>
<validation>YES</validation>
<Xcolumn>
<table name="person_names">
<column name="fname" type="varchar(50)" path="/person/firstName"
multi_occurrence="NO"/>
<column name="lname" type="varchar(50)" path="/person/lastName"
multi_occurrence="NO"/>
</table>
<table name="person_phone_number">
<column name="pnumber" type="varchar(20)" path="/person/phone/number"
multi_occurrence="YES"/>
</table>
<table name="person_phone_number">
<column name="pnumber" type="varchar(20)" path="/person/phone/number"
multi_occurrence="YES"/>
</table>
<table name="person_phone_type">
<column name="ptype" type="varchar(20)" path="/person/phone/type"
multi_occurrence="YES"/>
</table>
</Xcolumn>
</DAD>
|
对于 XML Columns 方法,如果您想要验证合法性或有副表,那么需要启用这个列。
清单 7. 为验证和副表启用的列
dxxadm enable_column xmltest person person c:\TEMP\personColumn.dad -r id
|
对于 XML Columns 方法,下面是一个用来访问数据的示例 SQL 语句:
清单 8. INSERT
insert into person values(1,db2xml.xmlclobfromfile('c:\TEMP\person.xml'));
|
清单 9. 使用副表的 EXTRACT
select pnumber from person_names t1, person_phone_number t2,
person_phone_type t3 where t1.id = t2.id and t1.id = t3.id
and t2.dxx_seqno = t3.dxx_seqno and t1.lname='Smith' and t3.ptype='office';
|
清单 10. 没有副表的 EXTRACT
select lname, fname from person1 t1, person_names t2 where t1.id = t2.id
and db2xml.extractVarchar(person, '/person/country') = 'US';
|
清单 11. UPDATE
update person set person = db2xml.XMLCLOBFromFile('c:\TEMP\personbis.xml');
|
清单 12. RETRIEVE
select db2xml.Content(person, 'c:\temp\retrievedperson.xml') from person where id = 1;
|
XML Collections 方法
对于 XML Collections 方法,存在以下可能性:
- 您可以从一个 XML 文档开始填充一个或多个 DB2 表。XML 文档中的标记和 XML 文档本身没有存储在 DB2 中。只有您感兴趣的元素和属性的值需要存储在 DB2 中。XML 文档中的元素和属性与 DB2 表之间的映射是由 DAD 文件提供的。
- 您可以使用一个或多个 DB2 表列中的数据创建一个 XML 文档。DB2 XML Extender 使用存储在 DB2 表列中的数据组合出一个 XML 文档。同样,DB2 表中数据与组成的 XML 文档之间的映射是通过 DAD 文件来完成的。
- 您可以像使用 DB2 中的关系数据那样使用从 XML 文档拆分(分解)出来的数据。
若使用 XML Collections 方法,您可以将 XML 文档结构映射为 DB2 表,这样您就可以从已有的 DB2 数据组成 XML 文档,或者将 XML 文档分解成 DB2 表。在下面的情形中应该使用 XML Collections:
- 在已有的关系表中有一些数据,您将根据某个 DTD 组成 XML 文档。
- 需要存储的 XML 文档的数据集合与关系表之间能形成很好的映射。
- 您想使用不同的映射模式为关系数据创建不同的视图。
- 您有来自其他数据源的 XML 文档。您只对数据感兴趣,而不关心标记,并且想将纯数据存储在数据库中。您想拥有决定是否将数据存储在某些已有的表中还是存储在新表中的灵活性。
- XML 文档中某个较小的子集经常需要更新,并且更新的性能很关键。
- 您需要存储整个 XML 文档的数据,但是常常只想检索其中的一个子集。
- XML 文档大小超过了 2 GB,必须分解它们。
XML Collections 方法实例
首先我们从两个表开始,并使用与前面 XML Columns 实例中相同的 DTD:
清单 13. 创建表的 SQL 语句
CREATE TABLE Customer(
ID INTEGER NOT NULL PRIMARY KEY,
Country VARCHAR(30),
LName VARCHAR(30),
FName VARCHAR(30))
CREATE TABLE Customer_Details(
ID INTEGER,
Phone_Number VARCHAR(20),
Phone_Type VARCHAR(20),
CONSTRAINT CUST_DETAIL_FK
FOREIGN KEY (ID) REFERENCES Customer (ID))
|
清单 14 展示了一个使用 SQL Mapping 的 DAD 文件的例子。注意,我们只能用 SQL 映射来检索:
清单 14. 使用 SQL 映射的 DAD 文件
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
<DAD>
<validation>NO</validation>
<Xcollection>
<SQL_stmt>
SELECT c.ID,COUNTRY,LNAME,FNAME,p.PHONE_ID,PHONE_NUMBER,PHONE_TYPE from
CUSTOMER C, table (SELECT substr(char(timestamp(generate_unique())),16) as
PHONE_ID,ID,PHONE_NUMBER,PHONE_TYPE from customer_details) P where P.ID=C.ID
order by ID, PHONE_ID</SQL_stmt>
<prolog>?xml version="1.0"?</prolog>
<doctype>!DOCTYPE person SYSTEM "C:\dxx\samples\dtd\person.dtd"</doctype>
<root_node>
<element_node name ="person">
<attribute_node name="id">
<column name="ID"/>
</attribute_node>
<element_node name="firstName">
<text_node>
<column name="FName"/>
</text_node>
</element_node>
<element_node name="lastName">
<text_node>
<column name="LName"/>
</text_node>
</element_node>
<element_node name="phone" multi_occurrence="YES">
<element_node name="type">
<text_node>
<column name="Phone_Type"/>
</text_node>
</element_node>
<element_node name="number">
<text_node>
<column name="Phone_Number"/>
</text_node>
</element_node>
</element_node>
</element_node>
</root_node>
</Xcollection>
</DAD>
|
清单 15 展示了一个使用 RDB Mapping 的 DAD 文件:
清单 15. 使用 RDB 映射的 DAD 文件
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
<DAD>
<validation>NO</validation>
<Xcollection>
<prolog>?xml version="1.0"?</prolog>
<doctype>!DOCTYPE person SYSTEM "C:\dxx\samples\dtd\person.dtd"</doctype>
<root_node>
<element_node name ="person">
<RDB_node>
<table name="customer"/>
<table name="customer_details"/>
<condition>
customer.id=customer_details.ID
</condition>
</RDB_node>
<attribute_node name="id">
<RDB_node>
<table name="customer"/>
<column name="id"/>
</RDB_node>
</attribute_node>
<element_node name="firstName">
<text_node>
<RDB_node>
<table name="customer"/>
<column name="FName"/>
</RDB_node>
</text_node>
</element_node>
<element_node name="lastName">
<text_node>
<RDB_node>
<table name="customer"/>
<column name="LName"/>
</RDB_node>
</text_node>
</element_node>
<element_node name="phone" multi_occurrence="YES">
<element_node name="type">
<text_node>
<RDB_node>
<table name="customer_details"/>
<column name="Phone_Type"/>
</RDB_node>
</text_node>
</element_node>
<element_node name="number">
<text_node>
<RDB_node>
<table name="customer_details"/>
<column name="Phone_Number"/>
</RDB_node>
</text_node>
</element_node>
</element_node>
</element_node>
</root_node>
</Xcollection>
</DAD>
|

 |

|
WebSphere Application Developer XML 工具
用于 WebSphere Application Developer 的 XML 工具包括各种 XML 透视图(perspective)以及编制(authoring)和生成工具。下面是这些工具的一个列表。
各种 XML 透视图
-
Data perspective
- Data perspective 包含各种用于从所有具有 JDBC 驱动程序的数据库中导入和导出 XML 形式的数据的工具。
-
XML perspective
- XML perspective 包含各种用于编制、编辑和转换 XML 相关文件(XML、XML Schema、DTD、XSL 样式表等等)的工具。
-
XSL Debug perspective
- XSL Debug perspective 使您可以在一个符号调试程序中调试 XSL 转换。
编制和生成工具
-
XML 编辑器
- XML 编辑器是一个用来创建和查看 XML 文件的工具。您可以使用该工具创建新的 XML 文件,可以从零开始创建,也可以从已有的 DTD 创建,或者从已有的 XML 模式创建。您还可以使用它来编辑 XML 文件,将 XML 文件与 DTD 或模式相关联,以及验证 XML 文件的合法性。
-
DTD 编辑器
- DTD 编辑器是一个用来创建和查看 DTD 的工具。通过使用 DTD 编辑器可以创建 DTD,生成 XML 模式文件,以及生成 Java bean。您还可以使用 DTD 编辑器根据您所创建的 DTD 生成 defaultHTML 表单。
-
XML Schema 编辑器
- XML Schema 编辑器是一个用来创建、查看和验证 XML 模式的工具。您可以使用 XML schema 编辑器执行诸如创建 XML 模式组件,导入和查看 XML 模式,从 XML 模式生成 DTD 和关系表定义,以及生成用于创建 XML 模式的 XML 实例的 Java bean 之类的任务。
-
XSL 编辑器
- XSL 编辑器可用于创建新的 XSL 文件或者编辑已有的 XSL 文件。您可以使用内容帮助和各种向导来帮助您创建或编辑 XSL 文件。编辑好文件之后,您还可以验证其合法性。而且,您可以将 XML 实例文件与您正在编辑的 XSL 源文件相关联,并在定义 XPath 表达式之类的构造时,使用 XSL 编辑器来提供有指导的编辑。
-
XPath Expression 向导
- 您可以使用 XPath expression 向导来创建 XPath 表达式。XPath 表达式可用于搜索 XML 文档,从节点抽取信息(例如元素或属性)。
-
XSL 工具
- 您可以使用 XSL 调试和转换工具将 XSL 文件应用到 XML 文件,将 XML 文件转换成新的 XML、HTML 或文本文件。在转换发生之后,可以通过 XSL Debug perspective 可视化地单步调试 XSL transformation 脚本,在转换规则被触发时高亮显示它们。您可以使用 XSL Debug perspective 中的视图来帮助自己调试 XML 或 XSL 文件。
-
SQL Query 向导和 SQL Builder
- 您可以使用 SQL Query 向导或 SQL Builder 来创建用于 XML 生成或数据库应用程序的 SQL 数据。
-
用户定义函数
- 您可以构建和部署 SQL 用户定义函数,这些函数可以在 SQL 语句中使用。
-
存储过程
- Application Developer 完全集成了存储过程构建器。用它可以构建和部署 Java 和 SQL 存储过程。
-
XML 和 SQL Query 向导
- 您可以使用 XML and SQL Query 向导,根据 SQL 查询的结果来创建 XML 文件,或者接收一个 XML 文件,并将其存储在一个关系表中。当根据 SQL 查询创建 XML 文件时,您可以选择创建一个 XML 模式,或者描述 XML 文件结构的 DTD 文件,以便在其他应用程序中使用该文件。这里包括了两个 Java 类库:SQLToXML(sqltoxml.jar)和 XMLToSQL(xmltosql.jar),以便运行的时候在应用程序中使用它们。这些 JAR 文件位于:WSAD_HOME_DIRECTORY\wstools\eclipse\plugins\com.ibm.etools.sqltoxml\jars。
-
XML to XML mapping 编辑器
- XML to XML mapping 编辑器是用于将一个或多个源 XML 文件映射到一个单独的目标 XML 文件的一种工具。您可以使用它添加 XPath 表达式、分组(grouping)、Java 方法或转换函数到您的映射中。这里还可以编辑映射,删除映射,或者保持映射供以后使用。在定义了映射之后,可以生成一个 XSLT 脚本。然后,可以使用生成的脚本来组成和转换遵从源 DTD 的 XML 文件。
-
RDB to XML mapping 编辑器
- RDB to XML mapping 编辑器是用于定义一个或多个关系表与一个 XML 文件之间映射的一种工具。在创建了映射之后,您可以生成一个文档访问定义(DAD)脚本,DB2 XML Extender 可以运行这个脚本,从已有的 DB2 数据组成 XML 文件,或者将 XML 文件分解成 DB2 数据。
-
Web Service 向导
- Application Developer 可以从 SQL 语句和存储过程创建 Web 服务。在第一步中,要从 SQL 语句或存储过程创建一个文档访问定义扩展(document access definition extended,DADX)文件;第二步是从 DADX 文件创建 Web 服务。

 |

|
在 WebSphere Studio Application Developer 中创建 WORF Web Service
WORF 定义
WORF 是 Web services object runtime framework(Web 服务对象运行时框架)的缩写形式。它被包括在 WebSphere Studio 中,同时也可以作为独立的工具在 DB2 中使用。WebSphere Application Server AE 中还集成了 WORF。WORF 为创建访问 DB2 的基于 XML 的 Web 服务提供了一个环境。WORF 使用 SOAP 和一个 Document Access Definition Extension(DADX)文件,该文件描述了可以在 Internet 上调用的一组 SQL 操作。
除了 SOAP 请求之外,WORF 还支持 HTTP GET 和 POST 操作。当收到一个服务请求时,WORF 将装载请求中指定的 DADX 文件,连接到 DB2,运行 SQL 语句,并提交数据库事务。它将把结果格式化成 XML,必要时转换数据类型,然后把响应返回给请求者。
创建 Web 项目
按照以下步骤创建一个名为 TestWORF 的新 J2EE Web 项目。
- 单击
File -> New -> Project -> Web -> Dynamic Web Project。
- 单击
Next。
- 输入
TestWORF 作为项目名。
- 单击
Finish。
图 1. 创建 Web Project 的屏幕
切换到 Data Perspective
切换到 Data perspective。单击
Window->Open Perspective->Data。
图 2. 切换到 Data Perspective 屏幕
将数据库模式导入 Web 项目中
下面是将数据库模式导入 TestWORF 项目的步骤:
- 在 DB Servers 视图中单击右键,选择 New Connection。
- 输入 SAMPLE 作为数据库名,更正 User Id 和 Password,然后单击
Finish。
- 展开新创建的连接。右击该模式选择
Import to Folder。
- 通过单击 Browse 按钮选择 TestWORF 项目。
- 单击
Finish,然后就会自动创建数据库文件夹。
图 3. 建立新连接的屏幕
图 4. 将数据模式导入文件夹的屏幕
创建一条 SQL 语句
创建一条 SQL 查询语句来查询数据库并返回公司中的所有雇员。
- 切换到左上角的 Data Definition 视图。
- 展开
TestWORF -> WebContent -> WEB-INF -> databases -> SAMPLE -> Statements。
- 右击
Statements 文件夹并选择
New -> Select Statement。
- 输入 "Employees" 作为语句名。
- 单击
OK。
- SQL Builder 现在应该会启动,并开始构建 Employees 语句。在 Tables 视图中单击右键,添加 ADMIN.EMPLOYEE 表到语句中。
- 保持该查询语句。
- 执行该语句,以验证内容是否与下面的表匹配。单击主菜单上的 SQL 菜单并选择
Execute。
图 5. 创建 SQL Statement 的屏幕
创建一个 DADX Group
现在,接着使用我们刚刚创建的语句来创建一个 DADX Web 服务。首先创建一个新的 DADX 组配置。DADX 组包含连接(JNDI 和 JDBC)和其他信息,这些信息在组内各 DADX 文件之间共享。
- 单击
File -> New -> Other -> Web Services -> Web Service DADX Group Configuration。
- 在接下来的页面中,选中
TestWORF 项目并单击
Add Group 按钮。输入 "EmployeeGroup" 作为组名。
- 展开 TestWORF 文件夹并选中
EmployeeGroup。
- 单击
Group Properties 按钮,将 DB URL 更新为 jdbc:db2:SAMPLE。
- 在 DADX group configuration 向导中,单击
OK,然后再单击
Finish。
图 6. 创建 DADX 组的屏幕
创建一个 DADX 文件
现在,我们将使用我们早先创建的 SELECT 语句创建一个 DADX 文件。
- 单击
File -> New -> Other -> Web Services -> DADX File。
- 展开 TestWORF 文件夹,直到找到 Employees 语句。
- 选择该语句并单击
Next 两次,进入 DADX Generation Dialog 对话框。
- 输入 EmployeesList.dadx 作为文件名。
- 确保输出文件夹是 /TestWORF/JavaSource/groups/EmplyeeGroup。
- 单击
Finish。
图 7. 创建 DADX 文件的屏幕
创建一个 DADX Web 服务
接下来我们将创建一个 DADX Web 服务.
- 单击
File -> New -> Other -> Web Services -> Web Service。
- 在接下来的页面中,选择 Web 服务类型
DADX Web Service。
- 确保勾选了 Generate a Proxy 复选框。Java Proxy 是一种客户机代理类型,选择 Test the Generated Proxy。单击
Next。
- 在 Service Deployment Configuration 对话框中,确保 Service Web Project 是 TestWORF,Client Web Project 是 TestWORFClient。单击
Next。
- 在 Web Services Warning 对话框中单击 Ignore All。
- 在 Web Service DADX File Selection 对话框中,确保选中了您创建的 DADX 文件。在这个例子中,该文件是 /TestWORF/JavaSource/groups/EmplyeeGroup/EmployeesList.dadx。单击
Next。
- 检查 Web Service DADX Group properties 对话框中的 DB URL 是不是 jdbc:db2:SAMPLE。单击
Next。
- 在 Web Service Binding Proxy Generation 对话框中,勾选 Show mappings 复选框并单击
Next。
- 选择 Show 并使用默认的 DOM Element mapping 单选钮。
- 单击
Finish。
测试 DADX Web Service
至此,我们已创建了一个 DADX Web 服务,并在 WebSphere Test Environment 中发布了它。这时,Web 浏览器中应该显示了一个 TestClient.jsp 测试页面,我们将进行如下操作:
- 单击
Employees() Method 链接。
- 单击
Invoke 按钮。
- 现在,Result 面板应该获得更新,并显示 Employees 查询语句的 XML 输出。
图 8. 测试 DADX 服务的屏幕
DADX Web 服务的输出
下面是来自 SELECT 查询的输出:
图 9. DADX Web 服务的输出屏幕
部署 DB2 Web 服务
运行在 WebSphere Application Server 中的 DB2 Web 服务需要有 Web Services Object Runtime Facility (WORF)运行库。简而言之:
- 在 DB2_HOME_DIRECTORY\samples\java\Websphere 目录中找到 dxxworf.zip,其中 DB2_HOME_DIRECTORY 是 DB2 的安装目录。
- 将 dxxworf.zip 解压到任何目录。
- 将 worf.jar 从解压得到的 lib 子目录复制到 WAS_HOME_DIRECTORY\lib,其中 WAS_HOME_DIRECTORY 是 WebSphere Application Server 的安装目录。
- 用 WAR 导出包含 Web 服务的 EAR,并在 WAS 中安装它。
结束语
本文谈到了以下话题:
- DB2 XML Extender 为从 DB2 数据库中轻松地导入和导出 XML 数据提供了一种方法。
- DB2 XML Extender 有两种方法来做到这一点:XML Columns 和 XML Collections。
- WORF (Web Services Object Runtime Framework)可用于通过 Web 服务从 DB2 数据库中导入和导出 XML 数据。基于 Web 服务的 WORF(使用一个 DADX 文件)可用来执行存储过程和 CRUD 方法,从而调用 SQL 语句,直接插入、更新、删除或查询数据。
- DB2 XML Extender 操作(例如 storeXML 和 retrieveXML)还可以包括在 WORF Web Service DADX 文件中,以便将 XML 存储在 DB2 数据库中或者从中检索 XML 文档。
下载 | 描述 | 名字 | 大小 | 下载方法 |
|---|
| zip file | WS_WORF.zip | 10 KB | HTTP |
|---|
参考资料
关于作者  | 
|  | Owen Cline 是位于加州圣地亚哥市的 IBM Software Services for Websphere 小组的一名成员。他有 20 多年软件开发领域的开发经验。他拥有 4 项软件专利,编写了大量 IBM 红皮书,并曾多次出席各种技术会议。在过去的 5 年当中,Owen 专门从事 J2EE 架构、应用开发和部署,重点研究了 WebSphere 平台。此外,这几年来,他还参与了许多轮廓鲜明的 Web 站点的开发。 |
对本文的评价
|  |