本文以实例的方式给移动应用的开发人员介绍了如何利用 DB2 Everyplace 基础架构将 pureXML 同步到移动设备上,以及如何开发移动设备上的 pureXML 应用程序。本文的客户端将基于 Apache Derby 移动数据库。另外将提供服务器端配置以及客户端的 Java 示例代码。本文将为移动应用开发人员如何在移动设备上开发使用 pureXML 的数据提供很好的实例参考。
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) 。
配置开发环境的步骤如下 :
首先我们需要启动 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)
CREATE DATABASE XMLSRC AUTOMATIC STORAGE YES ON 'C:\' DBPATH ON 'C:\'
USING CODESET UTF-8 TERRITORY US COLLATE USING SYSTEM PAGESIZE 4096; |
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 片断的语义依赖于具体应用,本文插入的片断"
CREATE TABLE xtable (
"IDX" INTEGER NOT NULL ,
"XCOL" XML ) |
insert into xtable values(1, “ |
最后我们需要启动 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 地址来进行替换)。接下来我们还需要按照下面的步骤在移动设备管理中心配置一些必需的预定,预定集,用户以及组的具体信息。
Replicate.bat XMLMDB |
在 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 列出了本文中所使用的配置选项。
#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 下面,当然读者可以自定义不同的存放目录。
java -cp "db2jisync.jar;isync4j.jar;.;derby.jar;xsltc.jar;serializer.jar; xalan.jar;xercesImpl.jar;xml-apis.jar" DB2SyncConsole ISync.properties |
加入步骤如下:
在对 Derby 数据库进行查询、插入、更新和删除操作之前,需要首先打开数据库连接。在类 JXSync 中,方法 openDBConnection 首先加载 Derby EmbeddedDriver 来初始化,随后打开对 Derby 数据库 c:/test/xmldata 的连接。后面的查询、增加、更改和删除操作都将使用此连接。清单 8 列出了 openDBConnection 的实现代码。
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();
}
} |
类 JXSync 提供了方法 queryXDataFromDB 用来查询 XML 数据。 queryXDataFromDB 首先创建一个语句实例,随后执行 SQL 语句 select idx, xmlserialize(xcol as char(128)) from xtable 来执行查询。查询结果通过遍历结果集逐条显示。这里 xmlserialize 是一个 SQL/XML 操作符,用来转换 XML 类型为字符串类型。 Derby 依赖于 Apache JAXP 来实现 xmlserialize 操作符。清单 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();
}
} |
类 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 片断"
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,"" |
类 JXSync 提供了方法 updateXDataIntoDB 。这个方法用来向读者展示如何更新 XML 数据。 updateXDataIntoDB 首先创建一个预准备语句实例,随后执行 SQL 语句来执行更新。这个方法执行成功后,标示 Websphere 产品的新的 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,"" |
类 JXSync 提供了方法 removeXDataFromDB 。这个方法非常简单,它用来向读者展示如何删除 XML 数据。 removeXDataFromDB 首先创建一个语句实例,随后执行一条 Delete 语句来执行删除。这。这个方法执行成功后,标示 Websphere 产品的 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();
}
} |
使用类 JXSync 提供的方法更改客户端数据后,可以再次使用 Java 版客户端将更换后的数据同步到服务器。具体配置请参考前文 Java 版客户端刷新后台数据到客户端。同步成功后,使用清单 13 的命令复制镜像数据库到源数据库。读者可以通过 DB2 CLP,CLI 或者控制中心连接 XMLSRC 数据库,并检查源表 xtable 。 Xtable 应和客户端 Derby 数据库中的记录完成了正确同步。
Replicate XMLMDB |
事实上,DB2 Everyplace 产品为开发者使用 Derby 引擎开发 XML 同步应用提供了非常强大的支持。通过全文的介绍,现在读者已经知道如何用 Derby 引擎,Apache JAXP, Java 同步客户端,sync API 和 JDBC 来开发 XML 同步应用了。所以,接下来读者可以通过阅读相关在线文档或者技术手册来更加深入地去尝试 DB2 Everyplace 的 XML 高级特性的应用开发。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15082138/viewspace-594515/ ,如需转载,请注明出处,否则将追究法律责任。