ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用 Derby 引擎开发 DB2 Everyplace XML 同步应用程序

使用 Derby 引擎开发 DB2 Everyplace XML 同步应用程序

原创 Linux操作系统 作者:ArtCode 时间:2009-05-08 13:18:59 0 删除 编辑

简介

本文以实例的方式给移动应用的开发人员介绍了如何利用 DB2 Everyplace 基础架构将 pureXML 同步到移动设备上,以及如何开发移动设备上的 pureXML 应用程序。本文的客户端将基于 Apache Derby 移动数据库。另外将提供服务器端配置以及客户端的 Java 示例代码。本文将为移动应用开发人员如何在移动设备上开发使用 pureXML 的数据提供很好的实例参考。

前提条件

  • DB2 Everyplace Enterprise Edition 9.1.2 以上
  • Eclipse 3.0 以上
  • Derby 10.3.0 以上
  • Apache Xalan-java 2.7.1 以上和 Apache Xerces-java 1.4.4 以上


背景知识

Derby 引擎与 DB2 Everyplace XML 同步解决方案无缝集成

Apache Derby 是开源的基于 SQL 标准的全特性关系型数据库。 Derby 完全使用 Java 实现,是一种小型嵌入式数据库,引擎和 JDBC 驱动加起来总尺寸只有 2M 左右。 Derby 非常容易安装、部署,可以应用在任何基于 Java 的解决方案中。从版本 10.3 以来,Derby 引擎开始支持 XML 数据类型。

DB2 Everyplace 为移动设备端数据库和服务器端数据库进行同步提供整体解决方案。如图 1 所示,Derby 数据库可以非常方便的用来存储移动设备上的包括 XML 类型在内的各种数据。 Java 同步客户端运行于设备端,负责 Derby 数据库与同步服务器进行同步。 DB2 Everyplace 同步服务器运行于服务器端,负责管理后台业务数据库与设备上的 Derby 数据库进行双向的数据同步。同步服务器会为需要同步的源数据库建立相应的镜像数据库。镜像数据库与后台数据库之间的数据交互被称为复制 (Replication) 。镜像数据库与客户端之间的数据交互过程被称作同步 (Synchronization) 。


图 1. Apache Derby 数据库与 DB2 Everyplace XML 同步解决方案架构图
系统架构图

开发环境配置

配置开发环境的步骤如下 :

  1. 下载并安装 Eclipse,本文中使用 Eclipse 版本 3.3.2
  2. 下载并安装 J2SE 软件开发包,本文中使用 JDK 1.5
  3. 下载并安装最新的 DB2 Everyplace,本文中所使用的是 DB2 Everyplace 版本 9.1
  4. 下载并安装 Derby,本文中所使用的是 Derby 版本 10.3.0
  5. 下载并安装 Apache JAXP 解析器,本文中所用的是 Xalan-Java 版本 2.7.1 和 Xerces-Java 版本 1.4.4 。你可以从本文后面的相关资源链接中下载。


服务器端配置

首先我们需要启动 DB2 控制中心(如果是 Windows 平台可以可以通过双击通过双击“ MS Windows Start menu->All Programs->IBM DB2 ->DB2COPY1(default)->General Administration Tools->Control Center ”来启动)。创建源数据库 XMLSRC 和镜像数据库 XMLMDB 。注意,为了支持 XML 同步,需要将 code set 设定为 UTF-8 。(见清单 1 和 清单 2)


清单 1. XMLSRC 源数据库创建语句

CREATE DATABASE XMLSRC AUTOMATIC STORAGE YES  ON 'C:\' DBPATH ON 'C:\' 
      USING CODESET UTF-8 TERRITORY US COLLATE USING SYSTEM PAGESIZE 4096;


清单 2. XMLMDB 镜像数据库创建语句
CREATE DATABASE XMLMDB AUTOMATIC STORAGE YES  ON 'C:\' DBPATH ON 'C:\' 
      USING CODESET UTF-8 TERRITORY US COLLATE USING SYSTEM PAGESIZE 4096;

随后我们连接源数据库 XMLSRC,并使用清单 3 的 DDL 语句创建源表 xtable,使用清单 4 的 DML 语句向 xtable 中插入 XML 片断数据。 XML 片断的语义依赖于具体应用,本文插入的片断"DB210000 ”意味着DB2的产品价格是10000美元。"


清单 3. 源表创建语句

CREATE TABLE xtable  ( 
    "IDX" INTEGER NOT NULL , 
     "XCOL" XML )


清单 4. 源表数据插入语句
 insert into xtable values(1, “
         DB2
         10000
    ”)
			

最后我们需要启动 DB2 Everyplace 同步服务器(如果是 Windows 平台可以通过双击“ MS Windows Start menu->All Programs->IBM DB2 Everyplace->Enterprise Edition 9.1->Administration Tools->Start Servlet for SyncServer ”来启动)。接下来我们还需要启动移动设备管理中心来完成服务器端的配置。本文中使用的 DB2 Everyplace 同步服务器的 IP 地址是 9.123.149.103(读者请根据自己同步服务器的 IP 地址来进行替换)。接下来我们还需要按照下面的步骤在移动设备管理中心配置一些必需的预定,预定集,用户以及组的具体信息。

  1. 在移动设备管理中心创建一个名为 xGrp 的用户组
  2. 在移动设备管理中心创建一个名为 xUser 的用户(密码设置为 xPassWord)并将该用户加入到在 1# 中创建的 xGrp 用户组
  3. 创建一个名为 xSubs 的预定集
  4. 创建一个名为 xSub 的预定并将源数据库 XMLSRC 中的 xtable 表作为源表加入到预定中
  5. 将预定 xSub 放入 xSubs 预定集
  6. 让组 xGrp 可管理预订集 xSubs
  7. 使用清单 5 的命令复制源数据库数据到镜像数据库


清单 5. 复制源数据库

Replicate.bat  XMLMDB

使用 Java 版客户端刷新后台数据到客户端

在 DB2 Everyplace 产品的安装父目录的子目录 Clients/javaclient 下可以找到 Java 版同步客户端 db2jisync.jar 。 Java 版同步客户端使用 Derby 引擎来存储客户端数据。 Derby 10.3 或以上开始支持 XML 数据类型。 Derby 依赖 Apache JAXP 解析器来解析 XML 数据。 Apache JAXP 由 Xalan-java 和 Xerces-java 组成。为了方便用户使用 Java 版同步客户端,DB2 Everyplace 产品提供了一个样例程序 DB2SyncConsole 。它使用 Java 版同步客户端提供的同步 API 来和同步服务器进行双向同步。读者可以在子目录 Clients/clientapisample/JAVA_API/src 下找到 DB2SyncConsole 。

在启动同步之前,需要首先配置 ISync.properties 的选项,特别是 serverurl, username, password 和 path 要确认正确。清单 6 列出了本文中所使用的配置选项。


清单 6. ISync.properties 配置文件
#Sun Sep 14 19:49:21 PDT 2008 
 isync.timeout=60 
 syncprotocol=isync\:db2j\: 
 #sync username 
 isync.user=xUser 
 #sync password 
 isync.password=xPassWord 
 isync.trace=detailed 
 #sync driver in Java client 
 syncdriver=com.ibm.mobileservices.isync.db2j.DB2jISyncProvider 
 filesubdir=filesubdir 
 jdbcsuburl=jdbc\:derby\:syncDb;create\=true 
 #encoding 
 isync.encoding=UTF-8 
 target.db.url=jdbc\:derby\:syncDb;create\=true 
 server.url=http\://9.123.149.103\:8080 
 target.db.driver=org.apache.derby.jdbc.EmbeddedDriver 
 #local directory for Derby database 
 path=c\:\\test\\xmldata

确认 Java 版客户端 db2jisync.jar, 同步 API isync4j, Derby 引擎 derby.jar, JAXP 解析器 serializer.jar、xalan.jar、xercesImpl.jar、xml-apis.jar 都在 JVM 的 classpath 中。你可以使用清单 7 的命令来启动 Java 版客户端和服务器同步,随后如图 2 所示,选择 (1) 来同步。刷新成功后,源表 xtable 中的记录将被 Derby 引擎存放到 c:\test\xmldata 下面,当然读者可以自定义不同的存放目录。


清单 7. 启动 Java 版客户端
java -cp "db2jisync.jar;isync4j.jar;.;derby.jar;xsltc.jar;serializer.jar; 
 xalan.jar;xercesImpl.jar;xml-apis.jar" 
 DB2SyncConsole  ISync.properties


图 2. Java 版客户端界面
Java版客户端界面

Derby 数据库 XML 应用开发

创建一个 Java 项目

  1. 打开 Eclipse,双击“文件 -> 新建 -> 项目 ",填入项目名称 jxsync 并点击下一步(见图 3)

    图. 3 创建 Java 项目
    创建Java项目

  2. 点击 " 完成 "(见图 4)

    图 4. 完成项目创建
    完成项目创建

加入 Derby 和 Apache JAXP 支持

加入步骤如下:

  1. 在 Project Explorer 视图中 , 进入 Project 菜单,选择 Properties 并单击 Add External JARs 。加入 derby.jar、xsltc.jar、serializer.jar、xalan.jar、xercesImpl.jar 和 xml-apis.jar 。 ( 见图 5)

    图 5. 加入 API 支持
    加入API支持

  2. 单击 OK,完成配置 ( 见图 6)

    图 6. 已加入的库文件
    已加入的库文件

创建一个类

  1. 打开 Eclipse,双击“文件 -> 新建 -> 类 ",填入项目名称并点击下一步。(见图 7)

    图 7. 创建一个类
    创建一个类

  2. 点击 " 完成 " 。

打开数据库连接

在对 Derby 数据库进行查询、插入、更新和删除操作之前,需要首先打开数据库连接。在类 JXSync 中,方法 openDBConnection 首先加载 Derby EmbeddedDriver 来初始化,随后打开对 Derby 数据库 c:/test/xmldata 的连接。后面的查询、增加、更改和删除操作都将使用此连接。清单 8 列出了 openDBConnection 的实现代码。


清单 8. 打开数据库连接
public void openDBConnection() 
  { 
    try{ 
       Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();       
       StringBuffer strBuff = new StringBuffer(); 
       strBuff.append(new String("jdbc:derby:")); 
       strBuff.append(strPath); 
       strBuff.append(new String("\\syncDb")); 
       strURL =  strBuff.toString(); 	
       conn= DriverManager.getConnection(strURL); 			
       }catch(Exception e){ 
           e.printStackTrace(); 
           } 
    }

查询 XML 数据

类 JXSync 提供了方法 queryXDataFromDB 用来查询 XML 数据。 queryXDataFromDB 首先创建一个语句实例,随后执行 SQL 语句 select idx, xmlserialize(xcol as char(128)) from xtable 来执行查询。查询结果通过遍历结果集逐条显示。这里 xmlserialize 是一个 SQL/XML 操作符,用来转换 XML 类型为字符串类型。 Derby 依赖于 Apache JAXP 来实现 xmlserialize 操作符。清单 9 列出了查询 XML 数据的实现代码。


清单 9. 查询 XML 数据
public  void queryXDataFromDB() 
    { 
        try{ 		
            Statement stmt=conn.createStatement(); 
            String sql="select idx, xmlserialize(xcol as char(128)) from xtable"; 	
            ResultSet rs=stmt.executeQuery(sql); 			
            while(rs.next()){ 	 
                int idx = rs.getInt(1); 
                String strProduct = rs.getString(2); 				
                System.out.println("idx:" + idx + "xcol:" + strProduct); 
            }// end while 			
            rs.close(); 		
            stmt.close(); 			 
            }catch(Exception e){ 
                e.printStackTrace(); 
        } 
    }

插入 XML 数据

类 JXSync 还提供了方法 addXDataIntoDB 用来向读者展示如何向数据库中插入 XML 数据。 addXDataIntoDB 首先创建一个预准备语句实例,随后执行 SQL 语句 insert into xtable values(?, xmlparse(document cast(? as CLOB) preserve whitespace)) 来执行插入。这里 xmlparse 也是一个 SQL/XML 操作符,用来转换字符串类型 CLOB 为 XML 类型。与 xmlserialize 操作符类似,Derby 也依赖于 Apache JAXP 来实现 xmlparse 操作符。这个方法执行成功后,标示 Websphere 产品的 XML 片断"Websphere15000"将会被插入在 Derby 数据库中。一个标价为 15000 美元的 Websphere 产品被插入到数据库中了。清单 10 列出了插入 XML 数据的实现代码。


清单 10. 插入 XML 数据
public  void addXDataIntoDB() 
    { 
        try{ 		  	
            String sql = "insert into xtable values( 
            ?, xmlparse(document cast(? as CLOB) preserve whitespace))"; 
            PreparedStatement stmt = conn.prepareStatement(sql); 
            stmt.setInt(1, 2); 
            stmt.setString( 
        2,""Websphere15000""); 
            System.out.println(stmt.executeUpdate()); 			
            stmt.close(); 
          }catch(Exception e){ 
                e.printStackTrace();} 
    }

更新 XML 数据

类 JXSync 提供了方法 updateXDataIntoDB 。这个方法用来向读者展示如何更新 XML 数据。 updateXDataIntoDB 首先创建一个预准备语句实例,随后执行 SQL 语句来执行更新。这个方法执行成功后,标示 Websphere 产品的新的 XML 片断"Websphere16000"将会被更新到数据库中。这个例子中,意味着 Websphere 产品的价格从 15000 美元上调到 16000 美元。清单 11 列出了更新 XML 数据的实现代码。


清单 11. 更新 XML 数据
public  void updateXDataIntoDB() 
    { 
        try{ 
            String strUpdate = "update xtable set xcol= 
            xmlparse(document cast(? as CLOB) preserve whitespace) where idx=2"; 	
            PreparedStatement stmt = conn.prepareStatement(strUpdate); 
            stmt.setString( 
        1,""Websphere16000""); 
            System.out.println(stmt.executeUpdate()); 
            stmt.close(); 
        }catch(Exception e){ 
            e.printStackTrace(); 
         } 
    }

删除 XML 数据

类 JXSync 提供了方法 removeXDataFromDB 。这个方法非常简单,它用来向读者展示如何删除 XML 数据。 removeXDataFromDB 首先创建一个语句实例,随后执行一条 Delete 语句来执行删除。这。这个方法执行成功后,标示 Websphere 产品的 XML 片断"Websphere16000"将会被删除。这个例子中,意味着 Websphere 产品被从数据库中删除了。清单 12 列出了删除 XML 数据的实现代码。


清单 12. 删除 XML 数据
public  void removeXDataFromDB() 
    { 
        try{ 		  	
            String sql = "delete from xtable where idx=2"; 
            Statement stmt=conn.createStatement(); 	
            System.out.println(stmt.executeUpdate(sql)); 	
            stmt.close(); 
            }catch(Exception e){ 
                e.printStackTrace(); 
        } 
    }

使用 Java 版客户端同步客户端改动到服务器

使用类 JXSync 提供的方法更改客户端数据后,可以再次使用 Java 版客户端将更换后的数据同步到服务器。具体配置请参考前文 Java 版客户端刷新后台数据到客户端。同步成功后,使用清单 13 的命令复制镜像数据库到源数据库。读者可以通过 DB2 CLP,CLI 或者控制中心连接 XMLSRC 数据库,并检查源表 xtable 。 Xtable 应和客户端 Derby 数据库中的记录完成了正确同步。


清单 13. 复制镜像数据库
Replicate XMLMDB

小结

事实上,DB2 Everyplace 产品为开发者使用 Derby 引擎开发 XML 同步应用提供了非常强大的支持。通过全文的介绍,现在读者已经知道如何用 Derby 引擎,Apache JAXP, Java 同步客户端,sync API 和 JDBC 来开发 XML 同步应用了。所以,接下来读者可以通过阅读相关在线文档或者技术手册来更加深入地去尝试 DB2 Everyplace 的 XML 高级特性的应用开发。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15082138/viewspace-594515/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-08-05

  • 博文量
    269
  • 访问量
    555563