You are on page 1of 5

上  海  海  事  大  学  学  报

第 27 卷  第 1 期
Vol. 27  No. 1
       
     
2006 年 3 月
M ar. 2006
JOURNAL OF SHANGHA IMAR ITIM E UN IV ERSITY
文章编号 : 1672 29498 (2006) 01 20044 205

基于 Jess规则的数据库通知服务
胡勤友 , 施朝健 , 陈海山 , 危  强
(上海海事大学 商船学院 ,上海  200135 )

摘  要 : 提出一种实现数据库通知服务的技术框架 ,使用 Jess规则代替 SQL 编码来表达用户的数
据监控策略 ,规则执行时先由规则解释器将规则翻译成 SQL 语句然后执行 . 使用这种方法 ,数据监
控策略易于理解和接受 ,修改方便 ; 其次 ,可在规则解释器中实现异构数据库系统之间的关联通知
服务 ; 最后 , Jess规则还可以进行复杂的推理 ,实现通知业务的智能化 .
关键词 : 数据监控 ; 数据库通知服务 ; 任务调度 ; 模式匹配 ; 规则引擎
中图分类号 : TP311. 13       文献标识码 : A

Jess rules ba sed da taba se notif ica tion serv ice
HU Q inyou, SH I Chaojian, CHEN Haishan, W E I Q iang
(M erchant M arine College, Shanghai M aritim e Univ. , Shanghai 200135, China )

Abstract: A new fram ework to realize database notification is advanced, in which Jess rules are used to
describe any customers’monitoring strategies. W hen the p roduction rules are executed, rule interp reter
can translate them to SQL code first and then the output SQL code can be executed. U sing this m ethod,
several advantages can be achieved. Firstly, data monitoring strategies can be understood and revised by
ordinary custom ers easily. Secondly, data monitoring on data from multip le heterogenic databases can be
im p lem ented in rule interp reter. Lastly, intelligent database notification service can be im p lem ented w ith
rule reasoning.
Key words: data monitoring; database notification service; task scheduling; pattern matching; rule en2
gine

1  介  绍
在日益信息化 、
数字化的当今时代 , 股市行情 、
体育赛事 、
彩票 、
生产管理 、
公司经营 、
购物中心的促
销活动等都包含许许多多我们关注的信息 . 这些信
息大多又是通过数据库来存储和管理的 . 每天随着
新信息的产生 , 数据库中的数据都在不断地更新 .
作为使用这些数据库的企业或个人 , 希望自己所关
注的数据发生变化时能得到及时的通知 , 以免导致

不必要的经济损失 ; 或者定时地得知数据库中有关
数据的状态 ,以便及时调整经营策略或管理方案 .
由于数据库通知技术具有极其广泛的应用前
景 ,许多软件公司都致力于数据库通知技术的研究
和开发 ,取得了不少的成果 . 如 Sybase公司的 iA ny2
[1]
where m 2B usiness , M icrosoft 的 SQL Server 2000
[2]
Notification Services , IBM 的 W ebSphere Everyp lace
[3]
[4]
Suite , O racle 的 O racle 9 iA S W ireless 等 , 用户可
以利用这些平台构建自己的数据监控和通知服务 .

收稿日期 : 2005 206 206; 修回日期 : 2005 212 220
基金项目 : 上海市高等学校青年科学基金 ( 02 IQ 19) ; 上海市重点学科建设资助项目 ( T0603)
作者简介 : 胡勤友 ( 1974 2) ,男 ,安徽舒城人 ,副教授 , 博士 , 研究方向为数据库与知识库 、
多 agent 系统和智能海上交通 , ( E 2mail) qghn@mmc.
shm tu. edu. cn

第 4 期           胡勤友 ,等 : 基于 Jess规则的数据库通知服务
通过对当前的数据库通知技术的分析 , 可发现
以下不足 : ( 1 ) 各类提供商通常提供的是相互独立
的服务 ,这些数据库通知服务开发平台只能基于特
定类型的数据库管理系统 , 对其他类型的数据库管
理系统几乎不能支持 . 也就是说 , 利用现有开发平
台很难开发出能够对异构数据库中不同数据关联变
化进行监控的数据库通知应用系统 ; ( 2 ) 目前技术
采用 SQL 编码表达监控策略 , 因此普通用户很难制
定和修改这些监控策略 ; ( 3 ) 现有技术很难实现业

45

个槽 ,数据类型分别是字符串型 、
整型 、
字符串型 、

符串型和字符串型 .
事实模板与关系表定义有很好的对应关系 , 因
此 ,可以从数据库中抽取关系表的定义构造事实模
板 . 事实模板与关系表定义的对应关系见表 1.
表 1  事实模板和事实与关系表元素的对应关系
事实模板

模板名

槽名

槽类型

槽值

关系表定义

表名

字段名

字段类型

字段值

务智能 ,如现有技术只能通知采购人员库存少了 ,但
不能建议采购人员采购多少备件 .

2. 2  事实

本文提出一种实现数据库通知服务的新框架 .
使用 Jess规则代替 SQL 编码来表达用户的数据监
控策略 , 规则执行时由规则解释器将规则翻译成
SQL 语句然后执行 . 由于 Jess规则很容易理解 , 数
据监控策略非常易于理解和接受 , 修改起来也非常

个或多个槽以及槽值组成 . 以下事实是事实模板
person 的一个实例 :
( person ( nam e“John ”)
( age 23 )
(mobile 2phone 13900000000 )
( eye 2color blue )

方便 ; 其次 ,可在规则解释器中实现异构数据库系统
之间的关联通知服务 ; 最后 , Jess规则还可以进行复
杂的推理 ,可实现通知业务的智能化 ,如根据当前订
单数量 ,检查是否具有足够的零件库存 ,并根据专家
经验建议采购人员采购一定数量的零件 .

2  基于 Jess规则的通知策略
在本框架中 ,用户定义的通知策略采用 Jess规
[ 5, 6 ]

则表示 . 由于选用了 Jess

作为本框架实现中的

规则引擎 ,因此 ,通知规则应该满足 Jess的语法 . 在
Jess的知识表示中 , 有 3 个基本元素 : 事实模板 、

实和规则 .
2. 1  事实模板

在事实被创建之前 ,必须先定义事实模板 ,其一
般格式为 :
( deftemp late < temp late 2name > [ < op tional2
comment > ] < slot2definition > 3 )
其中 , < slot2definition >的语法描述定义为 :
( slot < slot2nam e > [ ( type < type 2nam e > ) ] )
比如 ,可创建 person事实模板如下 :
( deftemp late person“An examp le deftemp late ”
( slot name ( type string) )
( slot age ( type integer) )
( slot mobile 2phone ( type string) )
( slot eye 2color ( type string) )
( slot hair2color ( type string) ) )

其中 , person 是事实模板名称 ,“An examp le deftem 2
p late ”
是 person 模 板 的 文 字 解 释 , person 模 板 有
name, age, mobile 2phone, eye 2color 和 hair2color 等 5

事实是事实模板的一个实例 ,由事实模板名 、

( hair2color black ) )

其中 , person 是 事 实 模 板 名 称 , 槽 nam e 的 值 是
“John ”, 槽 age 的值是 23, 槽 mobile 2phone 的值是
13900000000,槽 eye 2color的值是 blue, 槽 hair2color
的值是 black.
根据表 1 中的对应关系 , 关系表中每一条记录
都可以转化为一个事实 .
2. 3  通知规则

一条 Jess 规 则 类 似 于 过 程 性 语 言 中 的 IF …
THEN …结构 . 定义一条满足 Jess语法的通知规则

的一般格式是 :
( defrule < rule nam e > [ < comm ent > ] / /规则
的名称和描述
< patterns > 3 / /规则的条件部分 ,可包含一个
和多个模式
= >
< action > 3 ) / /规则的动作部分 , 可包含一个

和多个通知动作
通知规则的头部包括 3 部分 : ( 1 ) 关键词 de2
frule; ( 2 )通知规则名称 ; ( 3 ) 可选的注释字符串 , 一
般用于描述规则的目的或其他信息 . 在通知规则头
部之后 ,是由 0 个或多个模式构成的条件元素 . 每
一个模式由一个或多个域构成 , 其目的是匹配事实
中的槽值 . 如果规则的所有模式与事实匹配 , 则规
则就被激活 . 通知规则中模式后面的符号“ = > ”

于区分规则的左部和右部 , 相当于 IF … THEN …中
THEN 部分开始的标记 . 规则的最后一部分是动作
列表 ,当此规则被触发时这些动作就会被执行 .

46

上  海  海  事  大  学  学  报             第 27 卷

此外 ,通知规则的左部可使用“and ”
和“or”

件元素对多个模式进行“与 ”
和“或 ”
的组合 ,也可使
用“not”
条件元素对模式匹配结果进行求反 ;“ test”
条件元素也可应用于模式中 , 用于判断条件是否成
立.
下面是通知规则的一个实例 :
( defrule rule 2examp le “如果有人 年龄 超过 30
岁 ,则打印出他的姓名 ”
( person ( name ? name ) ( age ? age ) ) / /模式 ,
尝试匹配所有 person事实
( test ( > ? age30 ) ) / /判断年龄是否大于 30 岁
= >
( p rintout2t ? name “ is over 30! ”ctrf) ) / /打印
出姓名

3  体系结构
基于 Jess规则的数据库通知服务体系结构如
图 1 所示 . 在系统的总体结构中包含 8 个功能模
块 ,分别是 : 主程序模块 、
调度引擎模块 、
规则引擎模
块、
规则引擎与数据库接口模块 、
通知发送器模块 、
抽取数据库模式模块 、
事实模板生成模块 、
规则定义
模块 . 其中规则引擎模块和规则引擎与数据库接口
模块可封装为一个数据库模式匹配引擎 ; 抽取数据
库模式模块 、
事实模板生成模块和定义规则模块可
封装为通知规则编辑器 .

图 1  基于 Jess规则的数据库通知服务体系结构

在图 1 中 , 通知规则编辑器提供一个可视化界
面 ,让用户从数据库中导入数据库的模式 ,自动生成
事实模板 (一个事实模板可以只包含对应表中的部
分字段 ,也可以包含全部字段 ) ,用户再根据这些事
实模板定义通知规则 . 定义好的规则存储在文件
中 ,该文件称为通知规则库 . 生成的事实模板也被
导入规则引擎 ,这样可要求规则引擎只能处理具有

预定义模板的事实 .
主程序模块为定义好的通知规则设置运行参
数 ; 直接控制数据库模式匹配引擎中规则的运行 ; 收
集和显示规则的运行状态信息和历史信息 ; 对已发
送的通知进行管理 .
调度引擎模块主要按照用户设置好的通知规则
运行参数产生调度事件 , 并把调度事件递交给数据
库模式匹配引擎 .
数据库模式匹配引擎封装了规则引擎模块和规
则引擎与数据库接口模块 . 在模式匹配引擎中 , 规
则引擎根据用户导入的规则集生成一个网状 ( Rete )
结构 ,然后接受主程序模块调度事件的输入 . 一旦
接受到一个调度事件 , 规则引擎找出与这个调度事
件相关的规则 . 对每一条规则 , 规则引擎首先解析
规则左侧 ,并通过与数据库的接口模块生成 SQL 语
句并执行 ,然后将返回的数据转换成事实导入规则
引擎中的网状结构 . 如果导入的事实能与规则左侧
完全匹配 ,则触发这条规则 ,发出通知 .
通知发送器模块负责把规则引擎中产生的通知
发送给用户 . 通知的发送方式由规则的右侧动作部
分或根据主程序界面中的设置来确定 .

4  规则引擎与数据库接口定义
规则引擎中工作内存的存储量十分有限 , 只有
当推理用的事实比较少的时候才将它们全部导入内
存中 ,而本文的实现涉及数据库中大量的事实 , 因
此 ,规则引擎只能每次读取一部分事实 ,把大部分事
实存储在外部的数据库中 .
在规则引擎中 ,如果需要一个事实 ,它首先将访
问本地的事实库 ; 如果没有找到必需的事实 ,它将访
问外部的事实库 (如果有的话 ) . 外部的事实库并不
是规则引擎本身就具有的 , 而是规则引擎开发者通
过封装一些非规则引擎的存贮系统 (如数据库系
统 )来实现的 .
通过在规则引擎结构中引入外部事实库 , 可以
扩展规则引擎获取事实的渠道 .
因此定义一个规则引擎与数据库的接口 ——

iRete2DB ,通过实现这个接口 ,一个数据库可以充当
规则引擎的外部事实库 , 看起来就像规则引擎的自
身事实库一样 .
图 2说明了规则引擎与外部数据库的接口
iRete2DB 的作用 .
iRete2DB 接口包括 4 个方法 , 即 contains ( f) ,
put ( f) , all ( f)和 remove ( f) . 规则引擎可以通过这些
方法对外部数据库进行访问 ,它们的含义见表 2.

第 4 期           胡勤友 ,等 : 基于 Jess规则的数据库通知服务

47

规则引擎通过 Rete 匹配算法对这些事实和通知规
则进行匹配 ,如果匹配成功就发送通知 ,否则不执行
任何动作 .

图 2  接口 iRete2RDB 的作用
表 2   iRete2DB 接口中每个方法的含义
方法

操作类型

contains( Fact)

包含判定

返回类型 : 返回值
布尔型 : 如果外部数据库包含 Fact,

图 3  关联通知服务实现的流程

则返回真 .

表 3  数据库连接参数索引文件结构

布尔型 : 如果在外部数据库中成功
put( Fact)

插入

插入参数 Fact,则返回真 . 外部数据

查询

返回外部数据库中所有与参数 Fact
相匹配的事实 .
布尔型 : 如果外部数据库中所有与

remove ( Fact)

删除

用户名和密码

库中是否允许重复事实的出现 , 取
决于外部数据库 .

all( Fact)

数据库 1 所在的 IP 地址 、
端口号 、
驱动器名称 、

索引名 1

参数 Fact相匹配的事实成功删除 ,
则返回真 .

5 异构数据库系统之间的关联通知服务
企业在不同时期建立的数据库经常会采用不同
的数据库管理系统 , 形成异构的数据环境 . 实现异
构数据源数据关联通知服务是经常需要的 . 比如 A
数据库包含订单数据 , B 数据库包含零件库存数据 ,
系统根据当前订单的订货量来确定零件库存是否合
理 ,如果不合理 ,则通知采购人员采购零件 , 这类通
知服务称为数据关联通知服务 . 如果 A 数据库和 B
数据库是异构的 ,则这类通知服务称为异构数据源
数据关联通知服务 . 目前的数据库通知服务开发平
台只支持特定类型的数据库管理系统 , 不能支持异
构数据源中数据的关联通知服务 .
数据库模式匹配引擎可解决这个问题 , 如图 3
所示 . 由于通知规则在定义的时候可记录每个数据
库连接参数的索引 ,当规则引擎触发通知规则时 ,规
则引擎通过通知规则提供的连接参数索引从具有表
3 所示结构的文件中查找数据库的 IP 地址 、
端口
号、
驱动器名称 、
用户名和密码 , 再通过规则引擎与
数据库的接口把这些参数递交给 JDBC 管理器 . JD 2
BC 管理器根据这些参数选择不同的数据库驱动程
序 ,连接数据库 . 最后从数据库中查询通知规则需
要的数据 , 并将其转换成事实返回到规则引擎中 .

数据库 2 所在的 IP 地址 、
端口号 、
驱动器名称 、

索引名 2

用户名和密码

数据库 n 所在的 IP 地址 、
端口号 、
驱动器名称 、


索引名 n

用户名和密码

6  数据库通知服务的实例演示
根据本文提出的数据库通知服务框架 , 实现基
于 Jess规则的数据库服务开发平台 , 在此平台上 ,
实现一个简单的企业库存监控实例 .
实例 背 景 : 现 有 两 个 数 据 库 系 统 SQL Server
2000 和 O racle 9 i, 安装在两台计算机上 , 它们的 IP
地址分别是 202. 121. 215. 250 和 202. 121. 215. 183.
SQL Server 2000 有 数 据 库 Northw ind ( SQL Server
2000 自带的 ) ; O racle 9 i 有数据库 Products. North2
w ind数据库中总共有 33 张表 , 但只用到里面的 O r2
der Details表 ,其基本情况见表 4.
表 4  O rder Details表基本信息
字段名
数据类型
长度

O rderID

ProductID

UnitPrice

Quantity

D iscount

int

int

money

smallint

real

4

4

8

2

4

  O racle 9 i中 Products数据库有一张表 p roduct,
它的基本情况见表 5.
表 5  p roduct表基本信息
字段名
p roductID
PName UnitInStock supp lier
unitp rice
数据类型 NUMBER VARCHAR NUMBER VARCHAR NUMBER
长度
8
20
8
20
8

  上面两张表中都有上百条记录 . 现在对这两个
数据库系统进行通知服务 , 条件是当某产品的库存
数量少 于 其 订 单 需 要 量 时 发 送 短 消 息 给 号 码 为
“13818888888 ”
的手机 , 短消息的内容是 :“产品库

上  海  海  事  大  学  学  报             第 27 卷

48

存不足 ,需要马上采购 ! ”
并发送邮件给“zhansan @
163. net”,邮件的内容与短消息的一样 . 下面是实
现通知服务的全过程 :
( 1 )由于 O rder Details表中一种商品可能有很
多订单 ,为了便于定义规则 ,需要对同一种商品的订
单需要量进行统计 ,因此在 Northw ind 数据库中先建
立一个视图 , 视图的名字是 Detail_V IEW 1, 视图中
包含两列 (一列是 ProductID ,另一列是 SUM (Quanti2
ty) ) . 建立视图的 SQL 语法是 :
CREATE Detail_V IEW 1 AS SELECT ProductID ,
SUM ( Quantity ) from Details GROUP BY ProductID
ORDER B Y ProductID ASC;
( 2 )配置数据库连接. 由于本实例用到两个异构
数据库 : Products 和 Northwind, 需要在 userdb. config
文件中对这两个数据库的连接进行配置 ,见图 4.

   ( 4 ) 利用数据库通知引擎为 StockLower规则设
定调度参数并执行 . 规则的执行结果可以从数据库
通知引擎控制台界面上反映出来 , 如图 6 所示 . 最
后发送一条短消息给号码为“13818888888 ”的手
机 ,短消息的内容是 :“产品库存不足 , 需要马上采
购 ! ”; 同时也发送一封邮件至“zhansan@ 163. net”,
邮件内容与短信内容一样 .

 图 6  数据库通知引擎控制台界面 (规则的执行 )

7  结束语

图 4  连接数据库配置文件的内容

( 3 )利用可视化规则编辑器编辑出如图 5 所示

的 StockLower规则 .

本文提出并实现一种基于 Jess 规则的数据库
通知服务框架 ,经过分析和实例验证 ,可得出如下结
论 : 首先 ,数据监控策略非常易于理解和接受 , 修改
起来也非常方便 ; 其次 ,可以实现异构数据库系统之
间的关联通知服务 ; 最后 , Jess规则还可以进行更为
复杂的推理 ,可实现通知业务的智能化 . 以上 3 个
优点是以前的产品所欠缺的 .
今后 ,一方面将采用带参数的 Jess规则和自然
语言来表示数据库通知策略 , 使得用户能够更加容
易地理解和修改通知策略 ; 另一方面也将在数据库
模式匹配引擎中引入模糊推理能力 , 进一步提高数
据库通知服务的智能水平 .

图 5  StockLower规则的定义

参考文献 :
[ 1 ] SQL Anywhere Studio[ EB /OL ]. http: / /www. sybase. com. cn / cn / content/ downloads/ SAS_studio_whitepaper. pdf
[ 2 ] M icrosoft SQL Server Notification Services Technical Overview [ EB /OL ]. Notification Services Product Team. M icrosoft Corporation, Ap ril 2002. ht2
tp: / /m sdn. m icrosoft. com / library / default. asp ? url = / library / en2us/ sqlntsv/ htm / ns_adm insvc_1b03. asp
[ 3 ] W ebSphere Everyp lace Suite[ EB /OL ]. http: / /www 2900. ibm. com / cn / softw are /websphere /p roducts/ everyp lace_suite /
[ 4 ] O racle 9 i App lication Server: W ireless Edition[ Z]. O racle9 i AS Technical W hite Paper, November 2000.
[ 5 ] FR IEDMAN H J. The Java Expert System Shell[ EB /OL ]. Sep tember 10, 2001. http: / /www. iau. dtu. dk / teaching /31380 /Jess/manual. pdf
[ 6 ] GIARRATANO J, R IL EY G. Expert System s Princip les and Programm ing[M ] , PW S Publish Company, 1998.
(编辑  李佩芬 )