开发基于 DB2 Everyplace 产品的快递解决方案
2008-12-09 16:33:59 来源:WEB开发网客户端应用程序提供可视化界面,使得邮递员可以方便地对包裹进行收取和分发,以及对相关工作例如包裹信息的查询,客户端和服务器端的同步等。图 14 是客户端程序的逻辑结构。
图 14. 客户端用户逻辑和界面结构
读者可以通过将这个结构流程与之前提到的应用场景做比较来更好地了解客户端部分的逻辑。
最后,我们来看看客户端的中间逻辑层的实现。客户端逻辑的关键功能是通过调用 DB2 Everyplace 提供的 API 来实现的,有关 API 的具体说明请参见参考资源中的 DB2 Everyplace Application and Development Guide。在这里我们举一个例子,介绍客户端与服务器端数据库同步实现的具体方法。DB2 Everyplace v912 开始支持 XML 类型和 BLOB 类型的同步。
同步的过程大致是这样的:
首先,在连接 Sync Server 之前需要设置相关的连接信息,比如驱动信息,Server 的 URL,连接的用户名、密码等信息。我们使用一个 property 文件来保存这个信息,在 sync 初始化的时候读进这个文件,并将相关信息设置完毕。这个 property 文件可以通过客户端的一个页面进行修改。
然后,通过读取 Sync Driver 并从 Sync Manager 获取 Sync Service 的一个实例创建一个同步服务,并设置一个此服务的事件处理函数 Sync Listener 来处理相关的同步信息(通过实现接口 ISyncListener 中的方法 eventIssued),完成数据的同步。
此过程的主要代码片断见清单 3。
清单 3. Synchronize 的实现过程
public class ParcelSync implements ISyncListener{
// 设置一些 Sync 主体和变量
private ISyncProvider provider;
private ISyncService service;
private ISyncConfigStore config;
private ISyncDriver syncer;
//Implement eventIssued 方法处理相关 Sync 事件
public int eventIssued(ISyncEvent evt){
// 各类事件的处理
switch(evtType) {
case ISync.EVTTYPE_INFO:
case ISync.EVTTYPE_ERROR:
// 返回
return ISync.RTNCB_DONE;
// 其他 case,以下省略
……
default:
break;
}
return ISync.RTNCB_DEFAULT;
}
public void goSync(String propFile){
try {
int rc = 0;
// 读取 property 文件
readProperties(propFile);
// 加载 sync driver
Class.forName(userProps.getProperty("syncdriver"));
// 获取 synchronization service 实例
provider =
ISyncManager.getISyncProvider(userProps.getProperty("syncprotocol"));
service =
provider.createSyncService(userProps.getProperty("server.url"), userProps);
// 获取 configuration store 实例
config = service.getConfigStore(userProps.getProperty("path"));
// 获取 sync driver 实例以运行 synchronization
syncer = config.getSyncDriver();
// 设置 listener
syncer.setSyncListener(this);
// 同步每个 subscription sets, 省略具体枚举过程
rc = syncer.sync();
ssArr = config.getSubscriptionSets();
……
}
catch(ISyncException ie){
System.out.println("Exception code:" + ie.getCode());
ie.printStackTrace();
}
} //goSync
}
更多精彩
赞助商链接