在本课中,您将配置三个通告程序属性,以改变通告程序创建推送请求、将请求传送到远程监听器以及清除过期请求的方式。
配置 Notifier 实用程序
使用 MobiLink 同步插件连接到统一数据库:
打开 Sybase Central。
在左窗格中选择 MobiLink Synchronization 9 插件。从 [文件] 菜单中选择 [连接]。
即会出现 [连接] 对话框。
在 [标识] 选项卡上,在 [用户 ID] 中键入 DBA,在 [口令] 中键入 SQL。在 [数据库] 选项卡上,在 [服务器名] 中键入 cons。
单击 [确定] 进行连接。
添加新通告程序。
在左窗格中,打开 [通知] 文件夹,然后选择 [通告程序] 文件夹。在右窗格中,双击 [添加通告程序]。
出现 [添加新通告程序] 对话框。
将通告程序命名为 CarDealerNotifier。单击 [完成]。
输入 begin_poll 事件脚本。
通告程序检测统一数据库中的更改,然后使用 begin_poll 事件创建推送请求。此时,如果 Dealer 表发生更改并且远程数据库不是最新的,则 begin_poll 脚本将填充 PushRequest 表。
在右窗格中,选择 [CarDealerNotifier]。从 [文件] 菜单中选择 [属性]。
随即出现 [CarDealerNotifier 通告程序属性] 对话框。
单击 [逻辑] 选项卡。从下拉菜单中选择 [begin_poll]。
为 begin_poll 脚本输入以下内容:
-- -- Insert the last consolidated database -- modification date into @last_modified -- declare @last_modified timestamp; select max( last_modified ) into @last_modified from Dealer;
--
-- Delete processed requests if the mluser is up-to-date
--
delete from PushRequest
from PushRequest as p, ml_user as u, ml_subscription as s
where
p.status = 'processed'
and
u.name = p.mluser
and
u.user_id = s.user_id
and
@last_modified <= greater( s.last_upload_time, s.last_download_time );--
-- Insert new requests when a device is not up-to-date
--
insert into PushRequest( mluser, subject, content )
select u.name, 'sync', 'ignored'
from ml_user as u, ml_subscription as s
where
u.name in ( select ml_user from ml_listening where listening = 'y' )
and
u.user_id = s.user_id
and
@last_modified > greater( s.last_upload_time, s.last_download_time )
and
u.name not like '%-dblsn'
and
not exists( select * from PushRequest
where PushRequest.mluser = u.name
and PushRequest.subject = 'sync')在 begin_poll 脚本的第一主要部分中,如果设备是最新的,处理过的请求将从 PushRequest 表中删除:
@last_modified <= greater( s.last_upload_time, s.last_download_time)
@last_modified 是统一数据库 Dealer 表中最大的修改日期。表达式 greater( s.last_upload_time, s.last_download_time) 表示远程数据库的上次同步时间。
您也可以使用 request_delete 事件直接删除推送请求。但是在这种情况下,begin_poll 事件确保过期的或隐式删除的请求在远程数据库同步之前不会被消除。
代码的下一部分检查 Dealer 表的 last_modified 列中的更改,并向所有不是最新的活动监听器(列在 ml_listening 表中)发布推送请求。
@last_modified > greater( s.last_upload_time, s.last_download_time)
填充 PushRequest 表时,begin_poll 脚本将 subject 设置为 'sync'。
输入 request_cursor 脚本。
request_cursor 脚本读取推送请求。每个推送请求决定在消息中发送哪些信息,以及哪些远程数据库接收信息。
从下拉菜单中选择 [request_cursor]。
为 request_cursor 脚本输入下面的代码:
select p.req_id, 'Default-DeviceTracker', p.subject, p.content, p.mluser, p.resend_interval, p.time_to_live from PushRequest as p
PushRequest 表为 request_cursor 脚本提供行。
request_cursor 结果集中的顺序和值都很重要。例如,第二个参数定义缺省网关 Default-DeviceTracker。设备跟踪器网关跟踪到达用户的方式,并自动选择 UDP 或 SMTP 连接到远程设备。
输入 request_delete 脚本。
request_delete 通告程序事件指定清理操作。使用该脚本,通告程序可自动删除隐式删除的和过期的请求。
从下拉菜单中选择 [request_delete]。
为 request_delete 脚本输入以下内容:
update PushRequest set status='processed' where req_id = ?
该 request_delete 脚本不删除行,而是将 PushRequest 表中某行的状态更新为 'processed'。
单击 [确定] 以保存通告程序属性。
有关本课中的此主题的详细信息,请参见:
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。