You are on page 1of 5

第 27 卷  第 1 期 上  海  海  事  大  学  学  报 Vol. 27  No.

1
             
2006 年 3 月 JOURNAL OF SHANGHA IMAR ITIM E UN IV ERSITY M ar. 2006

文章编号 : 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
where m 2B usiness , M icrosoft 的 SQL Server 2000
[1]
息大多又是通过数据库来存储和管理的 . 每天随着
[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规则的数据库通知服务 45

通过对当前的数据库通知技术的分析 , 可发现 个槽 ,数据类型分别是字符串型 、


整型 、
字符串型 、字
以下不足 : ( 1 ) 各类提供商通常提供的是相互独立 符串型和字符串型 .
的服务 ,这些数据库通知服务开发平台只能基于特 事实模板与关系表定义有很好的对应关系 , 因
定类型的数据库管理系统 , 对其他类型的数据库管 此 ,可以从数据库中抽取关系表的定义构造事实模
理系统几乎不能支持 . 也就是说 , 利用现有开发平 板 . 事实模板与关系表定义的对应关系见表 1.
台很难开发出能够对异构数据库中不同数据关联变 表 1  事实模板和事实与关系表元素的对应关系
化进行监控的数据库通知应用系统 ; ( 2 ) 目前技术 事实模板 模板名 槽名 槽类型 槽值
采用 SQL 编码表达监控策略 , 因此普通用户很难制
关系表定义 表名 字段名 字段类型 字段值
定和修改这些监控策略 ; ( 3 ) 现有技术很难实现业
务智能 ,如现有技术只能通知采购人员库存少了 ,但 2. 2  事实
不能建议采购人员采购多少备件 . 事实是事实模板的一个实例 ,由事实模板名 、

本文提出一种实现数据库通知服务的新框架 . 个或多个槽以及槽值组成 . 以下事实是事实模板
使用 Jess规则代替 SQL 编码来表达用户的数据监 person 的一个实例 :
控策略 , 规则执行时由规则解释器将规则翻译成 ( person ( nam e“John ”)
SQL 语句然后执行 . 由于 Jess规则很容易理解 , 数 ( age 23 )
据监控策略非常易于理解和接受 , 修改起来也非常 (mobile 2phone 13900000000 )
方便 ; 其次 ,可在规则解释器中实现异构数据库系统 ( eye 2color blue )
之间的关联通知服务 ; 最后 , Jess规则还可以进行复 ( hair2color black ) )
杂的推理 ,可实现通知业务的智能化 ,如根据当前订 其中 , person 是 事 实 模 板 名 称 , 槽 nam e 的 值 是
单数量 ,检查是否具有足够的零件库存 ,并根据专家 “John ”, 槽 age 的值是 23, 槽 mobile 2phone 的值是
经验建议采购人员采购一定数量的零件 . 13900000000,槽 eye 2color的值是 blue, 槽 hair2color
的值是 black.
2  基于 Jess规则的通知策略
根据表 1 中的对应关系 , 关系表中每一条记录
在本框架中 ,用户定义的通知策略采用 Jess规 都可以转化为一个事实 .
[ 5, 6 ]
则表示 . 由于选用了 Jess 作为本框架实现中的 2. 3  通知规则
规则引擎 ,因此 ,通知规则应该满足 Jess的语法 . 在
一条 Jess 规 则 类 似 于 过 程 性 语 言 中 的 IF …
Jess的知识表示中 , 有 3 个基本元素 : 事实模板 、

THEN …结构 . 定义一条满足 Jess语法的通知规则
实和规则 .
的一般格式是 :
2. 1  事实模板 ( defrule < rule nam e > [ < comm ent > ] / /规则
在事实被创建之前 ,必须先定义事实模板 ,其一 的名称和描述
般格式为 : < patterns > 3 / /规则的条件部分 ,可包含一个
( deftemp late < temp late 2name > [ < op tional2 和多个模式
comment > ] < slot2definition > 3 ) = >
其中 , < slot2definition >的语法描述定义为 : < action > 3 ) / /规则的动作部分 , 可包含一个
( slot < slot2nam e > [ ( type < type 2nam e > ) ] ) 和多个通知动作
比如 ,可创建 person事实模板如下 : 通知规则的头部包括 3 部分 : ( 1 ) 关键词 de2
( deftemp late person“An examp le deftemp late ” frule; ( 2 )通知规则名称 ; ( 3 ) 可选的注释字符串 , 一
( slot name ( type string) ) 般用于描述规则的目的或其他信息 . 在通知规则头
( slot age ( type integer) ) 部之后 ,是由 0 个或多个模式构成的条件元素 . 每
( slot mobile 2phone ( type string) ) 一个模式由一个或多个域构成 , 其目的是匹配事实
( slot eye 2color ( type string) ) 中的槽值 . 如果规则的所有模式与事实匹配 , 则规
( slot hair2color ( type string) ) ) 则就被激活 . 通知规则中模式后面的符号“ = > ”

其中 , person 是事实模板名称 ,“An examp le deftem 2 于区分规则的左部和右部 , 相当于 IF … THEN …中
p late ”是 person 模 板 的 文 字 解 释 , person 模 板 有 THEN 部分开始的标记 . 规则的最后一部分是动作
name, age, mobile 2phone, eye 2color 和 hair2color 等 5 列表 ,当此规则被触发时这些动作就会被执行 .
46 上  海  海  事  大  学  学  报             第 27 卷

此外 ,通知规则的左部可使用“and ” 和“or” 条 预定义模板的事实 .


件元素对多个模式进行“与 ” 和“或 ” 的组合 ,也可使 主程序模块为定义好的通知规则设置运行参
用“not” 条件元素对模式匹配结果进行求反 ;“ test” 数 ; 直接控制数据库模式匹配引擎中规则的运行 ; 收
条件元素也可应用于模式中 , 用于判断条件是否成 集和显示规则的运行状态信息和历史信息 ; 对已发
立. 送的通知进行管理 .
下面是通知规则的一个实例 : 调度引擎模块主要按照用户设置好的通知规则
( defrule rule 2examp le “如果有人 年龄 超过 30 运行参数产生调度事件 , 并把调度事件递交给数据
岁 ,则打印出他的姓名 ” 库模式匹配引擎 .
( person ( name ? name ) ( age ? age ) ) / /模式 , 数据库模式匹配引擎封装了规则引擎模块和规
尝试匹配所有 person事实 则引擎与数据库接口模块 . 在模式匹配引擎中 , 规
( test ( > ? age30 ) ) / /判断年龄是否大于 30 岁 则引擎根据用户导入的规则集生成一个网状 ( Rete )
= > 结构 ,然后接受主程序模块调度事件的输入 . 一旦
( p rintout2t ? name “ is over 30! ”ctrf) ) / /打印 接受到一个调度事件 , 规则引擎找出与这个调度事
出姓名 件相关的规则 . 对每一条规则 , 规则引擎首先解析
规则左侧 ,并通过与数据库的接口模块生成 SQL 语
3  体系结构 句并执行 ,然后将返回的数据转换成事实导入规则
基于 Jess规则的数据库通知服务体系结构如 引擎中的网状结构 . 如果导入的事实能与规则左侧
图 1 所示 . 在系统的总体结构中包含 8 个功能模 完全匹配 ,则触发这条规则 ,发出通知 .
块 ,分别是 : 主程序模块 、
调度引擎模块 、
规则引擎模 通知发送器模块负责把规则引擎中产生的通知
块、 规则引擎与数据库接口模块 、 通知发送器模块 、 发送给用户 . 通知的发送方式由规则的右侧动作部
抽取数据库模式模块 、 事实模板生成模块 、规则定义 分或根据主程序界面中的设置来确定 .
模块 . 其中规则引擎模块和规则引擎与数据库接口
模块可封装为一个数据库模式匹配引擎 ; 抽取数据
4  规则引擎与数据库接口定义
库模式模块 、 事实模板生成模块和定义规则模块可 规则引擎中工作内存的存储量十分有限 , 只有
封装为通知规则编辑器 . 当推理用的事实比较少的时候才将它们全部导入内
存中 ,而本文的实现涉及数据库中大量的事实 , 因
此 ,规则引擎只能每次读取一部分事实 ,把大部分事
实存储在外部的数据库中 .
在规则引擎中 ,如果需要一个事实 ,它首先将访
问本地的事实库 ; 如果没有找到必需的事实 ,它将访
问外部的事实库 (如果有的话 ) . 外部的事实库并不
是规则引擎本身就具有的 , 而是规则引擎开发者通
过封装一些非规则引擎的存贮系统 (如数据库系
统 )来实现的 .
通过在规则引擎结构中引入外部事实库 , 可以
扩展规则引擎获取事实的渠道 .
因此定义一个规则引擎与数据库的接口 —— —
iRete2DB ,通过实现这个接口 ,一个数据库可以充当
图 1  基于 Jess规则的数据库通知服务体系结构 规则引擎的外部事实库 , 看起来就像规则引擎的自
在图 1 中 , 通知规则编辑器提供一个可视化界 身事实库一样 .
面 ,让用户从数据库中导入数据库的模式 ,自动生成 图 2说明了规则引擎与外部数据库的接口
事实模板 (一个事实模板可以只包含对应表中的部 iRete2DB 的作用 .
分字段 ,也可以包含全部字段 ) ,用户再根据这些事 iRete2DB 接口包括 4 个方法 , 即 contains ( f) ,
实模板定义通知规则 . 定义好的规则存储在文件 put ( f) , all ( f)和 remove ( f) . 规则引擎可以通过这些
中 ,该文件称为通知规则库 . 生成的事实模板也被 方法对外部数据库进行访问 ,它们的含义见表 2.
导入规则引擎 ,这样可要求规则引擎只能处理具有
第 4 期           胡勤友 ,等 : 基于 Jess规则的数据库通知服务 47

规则引擎通过 Rete 匹配算法对这些事实和通知规


则进行匹配 ,如果匹配成功就发送通知 ,否则不执行
任何动作 .

图 2  接口 iRete2RDB 的作用


表 2   iRete2DB 接口中每个方法的含义
方法 操作类型 返回类型 : 返回值
布尔型 : 如果外部数据库包含 Fact,
contains( Fact) 包含判定 图 3  关联通知服务实现的流程
则返回真 .
表 3  数据库连接参数索引文件结构
布尔型 : 如果在外部数据库中成功
数据库 1 所在的 IP 地址 、
端口号 、
驱动器名称 、
插入参数 Fact,则返回真 . 外部数据 索引名 1
put( Fact) 插入 用户名和密码
库中是否允许重复事实的出现 , 取
数据库 2 所在的 IP 地址 、
端口号 、
驱动器名称 、
决于外部数据库 . 索引名 2
用户名和密码
返回外部数据库中所有与参数 Fact … …
all( Fact) 查询
相匹配的事实 . 数据库 n 所在的 IP 地址 、
端口号 、
驱动器名称 、
索引名 n
布尔型 : 如果外部数据库中所有与 用户名和密码
remove ( Fact) 删除 参数 Fact相匹配的事实成功删除 ,
则返回真 . 6  数据库通知服务的实例演示
根据本文提出的数据库通知服务框架 , 实现基
5 异构数据库系统之间的关联通知服务
于 Jess规则的数据库服务开发平台 , 在此平台上 ,
企业在不同时期建立的数据库经常会采用不同 实现一个简单的企业库存监控实例 .
的数据库管理系统 , 形成异构的数据环境 . 实现异 实例 背 景 : 现 有 两 个 数 据 库 系 统 SQL Server
构数据源数据关联通知服务是经常需要的 . 比如 A 2000 和 O racle 9 i, 安装在两台计算机上 , 它们的 IP
数据库包含订单数据 , B 数据库包含零件库存数据 , 地址分别是 202. 121. 215. 250 和 202. 121. 215. 183.
系统根据当前订单的订货量来确定零件库存是否合 SQL Server 2000 有 数 据 库 Northw ind ( SQL Server
理 ,如果不合理 ,则通知采购人员采购零件 , 这类通 2000 自带的 ) ; O racle 9 i 有数据库 Products. North2
知服务称为数据关联通知服务 . 如果 A 数据库和 B 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
数据库模式匹配引擎可解决这个问题 , 如图 3
  O racle 9 i中 Products数据库有一张表 p roduct,
所示 . 由于通知规则在定义的时候可记录每个数据
它的基本情况见表 5.
库连接参数的索引 ,当规则引擎触发通知规则时 ,规
表 5  p roduct表基本信息
则引擎通过通知规则提供的连接参数索引从具有表
字段名 p roductID PName UnitInStock supp lier unitp rice
3 所示结构的文件中查找数据库的 IP 地址 、 端口 数据类型 NUMBER VARCHAR NUMBER VARCHAR NUMBER
号、 驱动器名称 、用户名和密码 , 再通过规则引擎与 长度 8 20 8 20 8

数据库的接口把这些参数递交给 JDBC 管理器 . JD 2   上面两张表中都有上百条记录 . 现在对这两个


BC 管理器根据这些参数选择不同的数据库驱动程 数据库系统进行通知服务 , 条件是当某产品的库存
序 ,连接数据库 . 最后从数据库中查询通知规则需 数量少 于 其 订 单 需 要 量 时 发 送 短 消 息 给 号 码 为
要的数据 , 并将其转换成事实返回到规则引擎中 . “13818888888 ”
的手机 , 短消息的内容是 :“产品库
48 上  海  海  事  大  学  学  报             第 27 卷

存不足 ,需要马上采购 ! ” 并发送邮件给“zhansan @    ( 4 ) 利用数据库通知引擎为 StockLower规则设


163. net”,邮件的内容与短消息的一样 . 下面是实 定调度参数并执行 . 规则的执行结果可以从数据库
现通知服务的全过程 : 通知引擎控制台界面上反映出来 , 如图 6 所示 . 最
( 1 )由于 O rder Details表中一种商品可能有很 后发送一条短消息给号码为“13818888888 ”的手
多订单 ,为了便于定义规则 ,需要对同一种商品的订 机 ,短消息的内容是 :“产品库存不足 , 需要马上采
单需要量进行统计 ,因此在 Northw ind 数据库中先建 购 ! ”; 同时也发送一封邮件至“zhansan@ 163. net”,
立一个视图 , 视图的名字是 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.

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

7  结束语
本文提出并实现一种基于 Jess 规则的数据库
通知服务框架 ,经过分析和实例验证 ,可得出如下结
论 : 首先 ,数据监控策略非常易于理解和接受 , 修改
起来也非常方便 ; 其次 ,可以实现异构数据库系统之
图 4  连接数据库配置文件的内容 间的关联通知服务 ; 最后 , Jess规则还可以进行更为
( 3 )利用可视化规则编辑器编辑出如图 5 所示 复杂的推理 ,可实现通知业务的智能化 . 以上 3 个
的 StockLower规则 . 优点是以前的产品所欠缺的 .
今后 ,一方面将采用带参数的 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.
(编辑  李佩芬 )

You might also like