技术开发 频道

生成面向DB2 9 pureXML的Web服务

【IT168 技术文档】

背景

    现在,Web 服务是 SOA 的一个重要组成部分,支持高度解耦的灵活的解决方案。Web 服务可以使用自上而下或者自下而上的方法构建。在自上而下方法中,首先从一个服务规范(例如一个 WSDL 文件)开始,然后实现底层代码以匹配规范。在自下而上方法中,先从一个 Java bean 开始,然后将功能公开为 Web 服务。

    IBM 在 DB2 9 中引入了 pureXML 特性,该特性允许在数据库中原生存储 XML 数据。它使得 XML 成为 DB2 中的一级数据类型,XML 类型的列可以在数据库中以原生分层格式存储任何格式良好的 XML。在数据库中以 XML 格式存储数据之后,可以非常高效地查询该数据,因为在运行时无需执行 XML 解析来实现查询计算。然后,可以使用 XQuery、SQL 或者 DB2 提供的任何应用程序开发接口访问和操纵 XML 数据。

    XForms 是一种基于 XML 的电子表单技术,它可以将表单数据提交为 XML 数据实例。它是一项 W3C 推荐标准,并且独立于平台和设备。XForms 将数据模型与表示分开,从而允许将用户数据提交为 XML。然后,数据的接收者可以以 XML 实例的形式存储和操纵用户提交的数据。有很多方法可以使用 XForms 提交数据。在这个例子中,我们使用 Web 服务。

    使用 XForms 作为终端用户表单,使用 Web 服务作为传输机制,使用 DB2 9 进行存储,这将创建一个真正的端对端 XML 解决方案,这种解决方案可以灵活更改,并且极大减少了开发时间。

先决条件

    为了更好地理解本文中的信息,需要具备以下先决条件:

  • 熟悉 DB2 9 和 pureXML 特性。
  • 具备 RAD 使用知识以及能够使用测试 WebSphere Application Server 环境部署和移除应用程序
  • 熟悉 Web 服务开发的概念

 


系统需求

服务器端开发

  1. 具有 pureXML 特性的 DB2 9

        也可以使用免费的 DB2 Express-C。DB2 Express-C 可以在至多两个双核 CPU 服务器上运行,服务器上最大内存为 4 GB,任何存储系统设置,没有数据库大小或者任何其它人为限制。参考资料小节提供了 Express-C 的下载链接。

  2. RAD Version: 7.0.0 (或更高版本)

    注意:这个例子详细列出了使用 RAD 附带的内置测试 WebSphere Application Server Version 6.1.0.2 测试输出的步骤。可以选择导出 WAR 文件并部署到一个独立的 WebSphere Application Server (6.1.0.2 版或更高版本)上。这个例子不适用于更低版本的 WebSphere Application Server。

客户端

  • 带 XForms 插件的 Mozilla Firefox 1.5.x 或更高版本(最好是 Firefox 2.0.x)。

        可以从 Firefox Add-ons 页面安装 XForms 插件。 要安装 XForms 插件,使用 Firefox 2.0.x 打开这个 url ,并选择 Install now


过程

总结

    这个例子展示如何使用自下而上的方法生成面向 XML 数据的 Web 服务。首先提供一个 Java bean(FormServices.java)的实现。这个 Java bean 包含的数据访问和操纵方法可以操纵 DB2 9 示例数据库的 XML 列中的数据。然后,使用 RAD 工具将 Java bean 中的那些方法公开为 Web 服务。最后使用提供的 Xforms 测试这些 Web 服务。

我们来逐步讲解这个例子

  1. 创建示例数据库和 xmlcustomer 表
    1. 创建一个代码页为 UTF8 的示例数据库(如果不存在该数据库的话),例如:
       db2 create db sample using codeset UTF8 territory US
                          

      DB2 9 使用 UTF8 数据库代码页,以便创建 XML 数据类型列。

    2. 在 DB2 命令提示符下,使用以下命令创建 xmlcustomer 表:
      connect to sample
                          CREATE TABLE XMLCUSTOMER( CID  INT NOT NULL PRIMARY KEY, INFO  XML )
                          

      XML 列 INFO 可以存储任何格式良好的 XML。

      可以在 DB2 命令提示符下输入以下命令,试着插入 test:

      insert into xmlcustomer values ( 9999, '<test/>');
                          

  2. 启动 RAD 并创建一个 “Dynamic Web Project”。
    1. 确认在 Web 透视图中执行操作。(否则,请选择 Window > Open Perspective > Web 以打开 Web 透视图。)
    2. 输入 “XForm” 作为项目名称(大小写敏感)。
    3. 使用默认设置,单击 Finish

 

  1. 导入本文提供的 Java 源代码文件,并进行必要的更改
    1. 展开前面创建的 XForm 项目,直到看到 Java Resources 文件夹。
    2. 单击右键并选择 New > package。 指定 "com.ibm.test" 作为包名,然后单击 Finish

如何创建包
图 2. 创建包 

 

    1. 在刚才创建的包上单击右键,选择 Import > File System,导入 FormServices.java (本文提供的 Java 源代码)。

 

    1. 搜索模式 //Change,必要时根据自身环境作出更改。代码中的注释可以指导您进行更改。
    2. 如果您遵循了前面的步骤,那么在 Database 类中惟一需要更改的是 userid 和 password,同样由模式 //Change 标出。
    3. 确保整齐地编译代码,并且解析所有导入。这需要将 db2jcc.jar 添加到 XForm 项目的 Java Build Path 中。
    4. 要添加外部 jar db2jcc.jar,在项目上单击右键,选择 Properties > Java Build Path > Add External Jars >,然后从 DB2 installation (\sqllib\java) 中选择 db2jcc.jar
  1. 将编译后的 Java 代码公开为 Web 服务
    1. FormServices.java 上单击右键,然后单击 Web Services > Create Web Service。如果没有看到 Web Services 菜单,请继续阅读下面的内容,了解如何启用该菜单。
    2. 如果没有看到 Web Services 菜单。可能需要启用工作台的 Web 服务功能。为此,单击 Windows > Preferences > Workbench > Capabilities,确保 Web Service Developer 被启用。 
       

 

    1. 确认设置如下图所示。在弹出的警告窗口中单击 OK

      注意:服务生成之后,RAD 工具将不同的 Java 数据类型映射为 JAX-RPC 规范中定义的相应的 XSD 类型。IBM WebSphere SOAP 引擎将 Java bean 中的 javax.xml.soap.SOAPElement 数据类型映射为 WSDL 中的 XML 模式 xsd:anyType。但是,JAX-RPC 规范目前还没有定义针对 xsd:anyType 的标准 Java 映射。JAX-RPC 实现并不是支持 xsd:anyType 所必需的。这个例子在其它 SOAP 引擎上可能不能运行,而且也没有在其它 SOAP 引擎上测试过。

检查 Web 服务设置 
图 5. 检查 Web 服务设置

 

    1. 单击 Next,直到看到一个可选择需要启用的服务的菜单。确保所有服务都被选中以公开为 Web 服务,然后单击 Finish

      注意:单击弹出的警告窗口上的 OK 按钮(相关解释见前面的注意事项)。

选择要公开为 Web 服务的方法
图 6. 选择要公开为 Web 服务的方法 

 

    1. 如果看到提示,则单击 Start Server。生成的服务将被发布在内置的 WebSphere Application Server 测试服务器上。
  1. 在内置的测试 WebSphere Application Server 上运行 XForms
    1. 在测试 XForms 应用程序之前,应确保正确安装了必要的 JAR 文件,以便使用 JDBC type 4 驱动器连接到 DB2。
      1. 进入 WebSphere Application Server 的安装目录,检查是否存在以下文件:db2jcc.jar,db2jcc_license_cu.jar。 (例如,在这个例子中,我必须在 “C:\Program Files\IBM\SDP70\runtimes\base_v61\lib'” 目录下安装这些 JAR 文件。)
      2. 如果该目录下没有这些 JAR 文件,则复制这些 JAR 文件到该目录,并重新启动 WebSphere Application Server 系统服务器。
    2. 在使用前面步骤创建的 Web 服务运行 XForms 之前,还需要在同一个 WebSphere Application Server 上安装 SOAPForwarding servlet。

          这个步骤只是一个弥补措施,因为 Mozilla 的 XForms Add-on 目前不能进行有效的 SOAP 调用。如果 Mozilla XForms Add-on 以后的版本修复了这个缺陷,那么就不需要这个步骤。在撰写本文之际,使用 Firefox Xforms Version 0.7.0.1 的 Web 服务调用会丢失 SOAPAction 报头。SOAPForwarding servlet 只是添加这个必需的 SOAPAction 报头。

      1. XformEAR 上单击右键,选择 Import > war file
      2. 浏览文件系统,选择 SOAPResolution.war 文件。Web 项目的名称应该会自动填充,如下图所示。确认它被添加到已有的 XFormEAR 项目中。

导入 SOAPForwarding Servlet  

图 7. SOAPResolution WAR

 

      1. 单击 Finish 导入该 servlet。
  1. 使用 RAD 内置的 Web Services explorer 测试 Web 服务
    1. 至此,您已经成功地部署并启动了应用程序,现在可以测试所部署的服务了。
    2. 在 RAD 中,在生成的 FormServices.wsdl 上单击右键,选择 Test with Web services explorer
    1. 如下图所示,指定端点和正确的端口号,测试任何以 *AsString 结尾的方法。 。 在这个例子中,有 3 个以 *AsString 结尾的方法,这 3 个方法以转义字符串的形式返回 XML。大多数浏览器都偏爱转义字符串形式的 XML(&lt; 而不是 “<” )。 但是,XForms 则偏爱实际的 XML 值。其它 3 个方法(没有 *AsString)在功能上与以 *AsString 结尾的方法相同,只不过这 3 个方法返回实际的 XML 数据。


使用 Web services explorer 测试 *AsString 服务
图 8. 使用 Web services explorer 测试 *AsString 服务 

  1. 使用 XForms 测试 XML Web 服务
    1. 启动 demo 附带的 XForms。

      xmlcustomer.xhtml 文件上单击右键,选择 Open with Firefox。这个步骤假设您已经按照本文 先决条件 小节的要求安装了 XForms 插件。这时应该可以看到下面的屏幕截图所示的 XForm。

    2. 完成一些必要的工作,例如指定惟一的 “Id Val”,输入/修改名称,等等。
    3. 使用 xmlcustomer Form,在 Id Val 字段中指定一个惟一的 ID,并单击 Submit

      这里指定的 Id Val 在 DB2 中的 XMLCUSTOMER 表的 CID 列中应该是惟一的。

    4. 当单击 Submit 时,XForm 对 insertFormData 服务进行 Web 服务调用,将表单的用户数据以 XML 实例的形式插入到 DB2 中。

 

    1. 如果没有发生错误,应该可以看到检索表单。指定 insert 语句中指定的 ID,单击 Retrieve
    2. 这时,该 xform 对 retrieveFormData 服务进行 Web 服务调用,从 DB2 检索 XML 实例形式的用户数据,并将其映射到 xform。

使用 xform 测试 Web 服务
图 10. 使用 xform 测试检索服务  

结束语

    您看到了如何在 DB2 pureXML 中按照自下而上的方法生成面向 XML 数据的 Web 服务。通过 HTTP Web 服务实现 SOAP,这些服务可以向 DB2 9 存储和检索 XML 数据。这些服务可以以转义字符串或实际 XML 的形式在线路上插入和检索 XML。可以根据特定需要修改 Java 源代码,任何方法都可以公开为 Web 服务。这些 Web 服务可以作为任何通过 HTTP 调用实现 SOAP 的客户机的端点,实现向数据库检索和存储数据。

0
相关文章