Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103623576
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Sybase

2008-04-10 20:58:41

 来源:赛迪网    作者:Breck Carter

实现业务规则的重要性

MobiLink的一个主要优点是具有利用其事件驱动的架构定制同步过程的能力。您能够提供自定义脚本为任何特殊事件指定相应处理方法。MobiLink 提供了非常精细的控制;比如说,在涉及100个表的同步过程中,差不多有数千个不同的事件可用。当然,大多数事件无需脚本,采用默认操作即可;在本案例中,为以下事件编写了自定义脚本:

事件名称 
脚本用途 

upload_insert 
为每一个表指定如何处理每一个已上传的插入 

upload_update 
为每一个表指定如何处理每一个已上传的更新 

upload_delete 
为每一个表指定如何处理每一个已上传的删除 

upload_statistics 
为每一个表记录上传行数 

begin_download 
确定要下载的表和行的集合 

download_cursor 
为每一个表选择下载的行 

download_delete_cursor 
为每一个表选择要从远程数据库删除的行的主键 

end_download 
记录哪一个表和行的集合在变更前不需下载 

download_statistics 
为每一个表记录所下载的行数 

handle_error 
对可能发生的特定错误进行特殊处理

完善的应用程序通常在同步过程上运用复杂的业务规则,Mobile Inspector也不例外。为业务规则使用的MobiLink脚本就像“仅District Supervisors可获得District Supervisor Inspection表中的行”一样直观,当然也可实现更复杂的规则。例如,以下download_cursor脚本选择Inspect 行的规则为:该行(1)被分配给特殊检查小组,并且(2a)尚未被下载,或(2b)自上次下载后已更新。此脚本中的SELECT语句使用 BRI_RECD_SYNC_IDS 表识别已分配给该小组的行;而之前更长的begin_download脚本动态填充该表,从而使其可在类似于本例所示的脚本中使用:

SELECT BRI_INSPCTN.INSPCTN_ID, 

BRI_INSPCTN.STRCTR_ID, 

BRI_INSPCTN.INSPCTN_DT, 

... 

BRI_INSPCTN.APRVL_DT 

FROM WIGINS_UNIT.BRI_INSPCTN 

WHERE EXISTS 

( SELECT * 

FROM WIGINS_UNIT.BRI_RECD_SYNC_IDS, 

WIGINS_UNIT.BRI_TMP_SYNC_VRBLS 

WHERE BRI_TMP_SYNC_VRBLS.SESSION_ID 

= TO_NUMBER ( USERENV ( SESSIONID ) ) 

AND BRI_RECD_SYNC_IDS.GLOBAL_DB_ID 

= BRI_TMP_SYNC_VRBLS.GLOBAL_DB_ID 
-- for this remote 

AND BRI_RECD_SYNC_IDS.STRCTR_ID 

= BRI_INSPCTN.STRCTR_ID 
-- matches on structure id 

AND BRI_RECD_SYNC_IDS.INSPCTN_ID 

= BRI_INSPCTN.INSPCTN_ID 
-- matches on inspection id 

AND ( BRI_RECD_SYNC_IDS.FRST_DOWNLOAD_TS 

= '1900-01-01' 
-- not yet been downloaded 

OR BRI_INSPCTN.LST_MDFD_TS 

>= ? ) )
-- updated since the last synch

MobiLink服务器调用Mobilink脚本,但实际上由中心或“统一”数据库服务器执行脚本,并为MobiLink服务器往返传递行。NC DOT 使用两组Mobilink服务器和两组脚本实现三层数据库架构。在最上面的一级,用Oracle PL/SQL编写的脚本运行于中心的Oracle 9i服务器;上例为此类脚本之一。行被传递到中心站点处运行的Mobilink服务器,并从那里传递到检查办公室的小组负责人的平板电脑上。

在现场,有另一个在每位小组负责人的平板电脑上运行的Mobilink服务器。该服务器调用运行在同一台电脑上的ASA数据库服务器中的SQL脚本;这些行传递到MobiLink服务器,并从那里通过无线连接传送给小组成员。通过这样的设置,小组负责人的数据库在以Oracle同步时作为远程数据库,而在与小组成员同步时作为统一数据库。

阅读(542) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~