Jerry_Beijing
[个人空间]
[短信]
[博客]
|
|
|
|
前面已发表过一篇关于Sybase移动数据库Pocket PC客户端应用开发的文章,本文将讲解有关Sybase移动数据库同步服务器Mobilink Server的相关技术知识。Sybase移动数据库应用开发技术体系架构是一个非常庞大复杂的技术系统,因此很难通过几篇文章全面概括。如果你对Sybase移动数据库应用开发技术感兴趣,并且想系统的学习相关知识,建议你阅读由中国铁道出版社刚刚出版的《C#与Sybase数据库移动应用开发指南》一书。
版权声明:本文系作者原创,未经作者同意,任何网络站点与媒体请勿转载!谢谢合作。
在Sybase MobiLink技术架构中,提出了同步事件与同步脚本的概念。这对于控制远程数据库与统一数据库之间的数据同步的逻辑处理极为重要。你可以通过针对相应同步事件编写同步脚本,并将其存储在统一数据库中来控制同步过程。你可以使用SQL、Java或.NET针对所关心的同步事件编写脚本。同步过程由多个步骤组成。每个步骤都由唯一的事件名称来标识。可以通过编写与这些事件相关联的脚本来控制同步过程。我们可以使用SQL、Java或.NET针对所关心的同步事件编写脚本。首先有一点必须明确,同步是被存储到统一数据库中的。由MobiLink服务器控制的。你可以通过统一数据库所提供的存储过程,直接将同步脚本存储在统一数据库中。也可以这样说,MobiLink 同步逻辑由存储在统一数据库中的脚本组成。其存放结构如下图所示:

某些被称为表脚本的脚本不仅可以与一个事件关联,而且可以与远程数据库中某一特定的表关联。MobiLink 同步服务器执行某些任务(例如行的下载)的方式是按表逐个进行的。你可以将多个脚本与同一个事件关联,而将每个脚本与不同的应用程序表关联。
脚本版本
脚本是以组的方式进行组织的,这些组被称为脚本版本。通过指定特定的版本, MobiLink 客户端可以选择使用哪一组同步脚本来处理上载流及准备下载流。编写Java同步逻辑在复杂程度上与编写任何其它Java代码没什么不同。你需要了解的是有关MobiLink的知识、部分有关Java的知识以及有关MobiLink Java API的知识。下面我们来看一个Java同步脚本实例的部分方法实现代码。
package com.mydomain.ml.scripts;
import java.sql.*;
...
import ianywhere.ml.script.DBConnectionContext;
import ianywhere.ml.script.InOutInteger;
public class MyScripts {
public MyScripts(DBConnectionContext dbconnectioncontext)
throws SQLException {
Connection connection;
Statement statement;
ResultSet resultset;
context = dbconnectioncontext;
connection = context.getConnection();
}
public void authParams(InOutInteger inoutinteger, String s, String s1,
String s2) {
rid = s1;
protocol = s2;
System.out.println("authParams: protocol =" + s2);
System.out.println("authParams: rid =" + s1);
}
public void authUser(InOutInteger inoutinteger, String s, String s1) {
_tableName = "";
try {
System.out.println("authUser: Authenticating user in UA: " + s);
Map map = getLoginMap();
...
Iterator it = map.values().iterator();
while (it.hasNext()) {
String value = (String) it.next();
trace("value= " + value);
}
inoutinteger.setValue(1000);
System.out.println("User Authenticated Successfully.");
} catch (Exception exception) {
System.out.println(exception.getMessage());
inoutinteger.setValue(4000);
}
}
...
}
... ...
上面Java类中的authParams()方法可以作为authenticate_parameters连接事件的同步处理脚本,而authUser()则可以作为authenticate_user连接事件的同步处理脚本。你可以通过下面的语句方便地将上述Java同步脚本添加到统一数据库中。
call ml_add_java_connection_script('mlversion','authenticate_parameters', ' com.mydomain.ml.scripts.authParams);
call ml_add_java_connection_script('mlversion','authenicate_user', ' com.mydomain.ml.scripts.authUser' );
编写.NET同步逻辑在复杂程度上与编写任何其它.NET代码没什么不同。你需要了解的是有关MobiLink事件的知识,并熟悉MobiLink .NET API。.NET同步脚本类的构造函数可以使用一个没有参数的构造函数或者一个签名的构造函数,签名的构造函数如下所示。
public MyClass(iAnywhere.MobiLink.Script.DBConnectionContext cc)
没有参数的构造函数的声明形式如下所示。public MyClass()
传递给你的同步上下文是针对连接的,MobiLink同步服务器通过该连接与当前用户保持同步。.NET同步脚本类中的同步事件方法必须是public的,这些方法中的参数必须与同步事件所传递的参数个数与类型一致。例如下面的方法,用于验证用户是否合法。
public void DoAuthenticate(ref int authStatus,string user,string pwd,string newPwd)
{
//处理用户验证逻辑。
…
}
要将这些信息添加到MobiLink系统表中,最简单的方法是使用ml_add_dnet_connection_script存储过程或ml_add_dnet_table_script存储过程。例如,如果在Adaptive Server Anywhere数据库中运行以下语句,这些语句将指定只要发生authenticate_user 连接级别事件。
Call ml_add_dnet_connection_script( 'mlversion','authenicate_user','MobilinkProject.AuthClass.AuthUser')
小结
本文主要讲了有关Sybase移动数据库同步服务器——Mobilink Server中的同步脚本的技术知识。由于文章篇幅过大时无法发表帖子,不得不删除大量的内容。因此上面提到的同步脚本的介绍并不完整。
04.JPG (22.85 KB) 2007-9-7 14:47
05.JPG (29.84 KB) 2007-9-7 14:47
06.JPG (15.3 KB) 2007-9-7 14:47
07.JPG (46.3 KB) 2007-9-7 14:47
08.JPG (37.19 KB) 2007-9-7 14:47
09.JPG (12.68 KB) 2007-9-7 14:47
10.JPG (6.39 KB) 2007-9-7 14:47
11.JPG (19.45 KB) 2007-9-7 14:47
12.JPG (12.38 KB) 2007-9-7 14:47
|
| 您对本贴的看法:鲜花[0]
臭蛋[0] |
| 空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 |
|