admin 管理员组文章数量: 1087135
2024年6月30日发(作者:单文件打包工具)
第29卷
Vo1.29
第22期
No.22
计算机工程与设计
Computer Engineering and Design
2008年11月
NOV.2008
基于Shark的工作流1t志迁移研究及其实现
马 华 , 张红宇 , 陈 振
(1.湖南涉外经济学院计算机学部,湖南长沙410205;
2.中南大学商学院,湖南长沙410083)
摘 要:工作流日志数据中可能记录着非常有价值的信息,它们对于流程优化和工作流挖掘具有重要意义。然而,传统工作
流系统缺乏对工作流日志迁移的有效支持。基于对工作流日志数据的分析,提出了一种支持日志迁移的分布式工作流系统
框架。该框架通过工作流实例数据与历史数据的分离,以实现工作流日志数据的分布式管理。基于开源工作流Shark,通过
扩展WfMC相关接口,给出了该框架的实现方案。
关键词:工作流日志;数据迁移;Shark;分布式管理;工作流系统
中图法分类号:TP311 文献标识码:A 文章编号:1000—7024(2008)22 5917.04
Research on logs migration of workflow based on shark and its implementation
MA Hua , ZHANG Hong一、 , CHEN Zhen
(1.Department of Computer,Hunan College of International Economics,Changsha 4 1 0205,China;
2.School ofBusiness,Central South University,Changsha 410083,China)
Abstract:Some valuable information can be discovered from log data of workflow,which is very important to business process opti—
mization and workflow mining.However,traditional workflow management system can not support logs migration ofworkflow efficie—
ntly.Based on analysis of log data,a ramework of fdistributed workflow management system is put forward to support logs migration.
Related work_flow interfaces defined by WfMC are extended.On the basis ofopen source wo ̄flow project(Shark),the implementation
ofthis framework is introduced.
Key words:workflow logs;data migration;Shark;distributed management;workflow management system
0引言 1 WtMC与开源Shark
工作流管理联盟(WfMC)是公认的工作流技术的国际标
准化组织。Shark“ 是由国际组织Enhydra开发的开源工作流
引擎,它完全基于WfMC的相关标准,支持以XPDL 描述的
基于工作流日志的业务流程优化“ 、工作流模型挖掘脚逐
渐成为当前的研究热点。它们均依赖于通过对工作流日志数
据的分析,来优化或重构现有的工作流模型。然而,由于工作
流管理联盟(workflow management coalition,wo C)所制定的相
关标准规范。 并未对工作流日志的管理提供直接参考,现有的
大多数工作流管理系统“ 都未实现工作流日志的有效管理,它
们有的直接放弃日志数据中的所有历史数据,从而可能造成
有效信息的丢失;有的简单地将工作流实例数据与工作流历
史数据耦合在一起存储,随着数据的积累,将导致工作流系统
性能的下降。
在支持服务协作的工作流管理系统 研究的基础上,基于
工作流过程建模,提供了包括工作流引擎、监控与管理工具和
客户端工具等。目前,Shark与Enhydra的开源工作流建模工
具JaWE”L 起,已成为最符合WfMC规范、具有较高研究价值
和应用价值的工作流管理系统范例。
然而,随着工作流技术的发展,作为传统工作流技术的代
表,Shark也逐渐凸显许多不足。在文献[5,9】中,通过扩展
WfMC的元模型和建模语言,我们实现了Shark对Web服务协
作的有效支持。同时,Shark的工作流日志管理功能也比较薄
弱。Shark将工作流日志中的实例数据与历史数据保存在同
一
开源工作流Shark,扩展了WfMC的相关接口,通过工作流日
志的迁移,实现了工作流实例数据和历史数据的有效分离
和管理。
收稿日期:2007一l1—23 E.marl:mohe1.ma@163.com
个实体中,而且,Shark对工作流历史数据的处理仅提供了
两种简单策略。策略1是在流程实例完成后直接删除历史数
基金项目:湖南省教育厅科学研究基金项目(07C425),湖南省教育科学十一五规划基金项目(XJKO6cxJO27)。
作者简介:马华0979--),男,湖南株洲人,硕士,高级工程师,研究方向为工作流技术和虚拟实验室; 张红字(1979一),女,安徽毫州人
博士研究生,研究方向为虚拟企业和CIMS; 陈振(1966一),男,副教授,研究方向为虚拟实验室和多媒体技术。
据;策略2是与当前正在使用的实例数据统一保存,在用户需
要删除时,以Process定义或Package定义为单位进行处理。由
于历史数据被完全删除,策略l显然不适合真实的应用场景。
策略2同样不理想,因为随着系统运行时间的推延,大量历史
数据的共存,直接降低了频繁进行的工作流实例数据的检索
效率。所以,有效管理工作流曰志数据,通过工作流日志迁移
实现工作流实例数据与历史数据的分离,已成为迫切需求。
Data、ActivityDataWOB、ActivityData BLOBs;⑥流程创建事件
审计:CreateProcessEventAudit;⑦活动以及活动状态转换事件
审计:AssignmentEventAudit、StateEventAudit、NewEventAudit;
⑧相关数据修改事件审计:DataEventAudit;⑨任务数据:As.
signments Table;@Deadline通知:Deadline。这些表之问的主要
关联关系如图1所示(不含ProcessRequesters)。
蒜
一 R
其中,事件审计数据(库表6~8)和工作流实例数据(库表
附
2工作流日志分析
9和1O),保存的是流程实例执行过程中产生的流水数据,均
不需要迁移。剩下的其它数据中共存了有价值的工作流实
2.1工作流数据分类
例数据和历史数据,它们是需要进行日志迁移、实现数据分
我们将WfMC所定义的工作流数据归纳为3类:工作流
离的对象。
模型数据、工作流日志数据和辅助数据。工作流模型数据主
要保存了由工作流建模工具所产生的工作流定义信息(如流
3支持日志迁移的工作流系统框架
程定义、活动定义、ToolAgent、外部应用、参与者、用户和用户
3.1功能模型
组等)。工作流日志数据由两部分组成,分别是工作流实例数
工作流日志迁移需要实现工作流实例数据与历史数据的
据和工作流历史数据。工作流实例数据主要指处于激活状态 分离,从而提高应用系统的执行性能,同时为工作流日志的其
的工作流实例产生的中间数据(如流程实例、活动实例、流程实 它应用提供基础平台,实现备份数据的有效管理和日志数据
例相关数据、活动实例相关数据、Assingnment、Deadline/Limit、 挖掘的功能。这样,可以将支持臼志迁移的工作流系统分为
流程状态历史以及活动状态历史等),它们随着流程实例的执 两大模块,即日志数据迁移模块和工作流执行模块。其功能
m
行不断地被更新;工作流历史数据足处_丁完成状态的工作流 模型如图2所示。
实例的结果数据,这些数据与工作流实例数据保持了某种对 该模型中,我们将工作流数据库由原来的模型库、实例库
应关系,但它们是不可以再被修改的。辅助数据主要包括流 二级结构扩展为模型库、实例库和历史库三级结构。日志数
一一一~
。
程/活动状态类型以及事件类型等。由于WfMC并未对保存
据迁移模块负责于动或自动完成历史数据从实例库向历史库
这些数据的数据库实体进行规范,许多工作流系统实际上是
的迁移以及日志数据管理,如曰志数据查询或日志数据挖掘
将实例数据和日志数据共存的(如Shark),即没有独立的工作
等。自动迁移的时机可由一个监控线程来完成,由其进行迁
流历史数据实体。
移时间限制(深夜或凌晨时间)和备份周期条件(每周一次或每
2.2 WfMC的工作流日志分析
月一次)的检查,只有在两个条件均满足的情况下,才会自动
根据WfMC规范,工作流实例数据和历史数据共存在以 执行。这两个条件可以根据系统应用的实际数据流量,进行
下实体中:①流程数据:Processes;②活动数据:Activities;③流
动态配置。同时,用户可以选择“实时同步”,以获取最新的流
程发起者:ProcessRequesters;④流程相关数据:ProcessData、 程日志信息。工作流执行模块负责执行工作流实例化、执行
∞ R删∞队吣
ProcessDataWOB、ProcessDataBLOBs;⑤活动相关数据:Activity— 和流转等操作。
prcoeS ̄ata|l
Id
ProcessDefinition
PDefName
ActivityRequesterId
ActiVityRequesterPrOcessId
lD敲吐
ResourceRequesterld
ExternalRequesterClassName
State
Priority
Name
Creared
Started
LastStateTime
LimitTime
Description
o1d
ProcessDataBlobs
vers1on
processDatawob
variableValue
actV
ari
ivi
a61
tyDat
eValue
aWob
old
old
verslon
图1待迁移的数据库袁关系
~~一 一
哪
J N T O
工作流执行模块
图2支持日志迁移的工作流系统功能模型
3.2总体结构
工作流数据集中存储,适用于轻量级系统场景。但在应
用系统的数据流量非常大的情况下,日志数据迁移模块和工
作流执行模块的分离,可以提高分布式执行性能,降低执行服
务器的负载。我们设计的支持日志迁移的工作流系统框架结
构如图3所示。
工作流 工作 工作流
建模 列表 监控 垦 l
… …,
=。 =. :i . —
工作流 J
r卫-毪避≮ 号辎 盛口 l1管理器1日志|迁移 1擎!
≥ 文
: 2口2 。r登登鍪 :
功
z ≈曩
Ij 控制器 Ij 监控器 ㈠
jj: {
DODS DoDS
(
:0=
if- ) f< J
、
l模型库 实例库 I… :.一 -_
L、
I历艾辟广
、
———_
,一
—
图3支持日志迁移的工作流系统框架结构
该框架中,采用了独立的工作流日志迁移引擎,它主要包
括日志数据管理器、实时同步控制器和数据迁移监控器。日
志数据监控器用于监摔日志数据迁移的时机,决定是否激活
日志数据管理器,由其调用部署在工作流执行引擎中的Web
服务接口,使用数据迁移控制器实现历史数据由实例库向历
史库的迁移。由于实例库和历史库相对独立的部署和运行,
工作流日志数据被迁移进入历史库中保存,必要时可以通过
实时同步控制器实现查询时的同步。
4基于Shark的系统实现
4.1 Shark的日志库表设计
在Shark1.1.2中,用于存储工作流数据的库表共有60多
个,而工作流日志中需要迁移的数据主要是流程和活动的一
些重要操作痕迹,如:流程启动时间、结束时间,活动激活、结
束时间,以及在流程运行过程中,产生的相关数据影响。经过
分析,主要涉及到流程表(Processes),活动表(Activities),流程数
据表(ProcessData),活动数据表(ActivityData),流程请求者表
(ProcessRequest)等9张表。根据图1,需要建立相应的历史表
结构。它们统一采用以-BU为后缀的命名格式,这样我们建
立了Processes BU,Activties BU,ProcData BU和ActData BU
等9张表。
4.2 DODS分析
Shark在O/R映射层使用的是Enhydra的开源DODS。通
过定义文件可以自动生成Java类文件和SQL脚本。Shark1.1.2
使用的是DODS6.5。以下是DOML文件中定义Processes BU
表的片段:
<table id=”org.enhydra.shark.instancepersistence.data.Pro-
cess
BU”dbTableName=”Processes
BU’’
—
—
<column id=”Id”usedForQuery=”true”>
<type dbType=”VARCHAR ’javaType:’’String’。
size=”100”/></coluran>
<column id=”ProcessDefinition”
usedForQuery:’’true”>
<referenceObject constraint=”true”reference:
”org.enhydra.shark.instancepersistence.data.ProcessDefinition”/>
<type dbType=”none。’javaType=org.enhydra.shark.in—
stancepersistence.data.ProcessDefinitionDO/>
</column>
<index id=”I1”unique=”true”>
<indexColumn id=”Id”/>
</index>
</table>
DODS根据此DOML文件会生成相应的SQL脚本,以及
DO.java, DOI.java, Query.java, DataStructs.java共4类Java文
件。将SQL文件导入原来的Shark数据库中,Java文件放入
Shark的data包下,这样就建立了对历史数据库进行底层操作
的基础。
4-3工作流接口扩展
基于WfMC制定的工作流接口0 ,我们扩展实现了工作流
目志迁移的相关接口:
(1)0瓜映射定义:org.enhydra.shark.instancepersistence.data
中添加了使用DOML文件生成的36个DODS类,用于实现对
Processes BU等9张新添库表的O/R映射。
(2)接口定义:org.enhydra.
中新建了Process backup Persistencelnterface等4个实现流程、
活动、流程数据、活动数据持久操作的相关接口。
(3)方法定义:首先,存org.enhydra.api.interna1.instance per—
sistence.PersistentManagerlnterface类中添加实现数据持久的方
法,比如Process
_
backup Persistencelnterface需添加persist()等5
个方法(其它接口的持久方法定义类似)。同时,在org.enhydra.
shark.instancepersistence包中新建DODSProcess
backup.java
等
4个类。
然后,在org.erdaydra.shark.instancepersistence.DODSPersis・
tentManager类中添加方法执行具体的持久操作,以Process
backupPersistence Interface接口的持久为例,需要添加persist0
等3个方法。修改了org.enhydra.shark.utilities.dods.Buffer类,
一
5919—
在write()方法中扩展了对新添加表的相应操作。
最后,在org.enhydra.shark.ExecutionAdmin类中,添加执行
数据迁移的具体方法,其主要步骤如下:
private void performCascadeBackUp(String procld,Set pro—
clds,PersistentManager Interface ipm,SharkTransaction t){
//迁移流程实例和流程请求者
ProcessPersistencelnterface po=
ipm.restoreProcess(procld,t);
Process
backupPersistencelnterface pbuPI
_
ipm.createProcess
_
backup(po);
ipm.persist(pbuPl,true,t);
proclds.add(procld);
∥迁移所有的流程实例变量
ListproeVars=
ipm.getAllVariablesForProcess(procld,t);
Iterator il=procVars.iterator0;
while(il.hasNextO){
ProcessVariablePersistencelnterface pvPI=
(ProcessVariable Persistencelnterface)i 1.next();
ProcessVariable
backupPersistenceInterface pvBU:ipm.create
_
ProcessVariable
backup(pvPI);
ipm.persist(pvBU,ture,t);}
∥迁移该流程实例内的所有活动实例
List acts:ipm.getAllActivitiesForProcess(procld,t);
if(acts!=nul1){
Iterator it=acts.iterator0;
while(it.hasNextO){
ActivityPersistencelnterface act
(ActivityPersistencelnterface)it.next();
Activity backupPersistencelnterface
apuPI=ipm.createActivity
backup(act);
_
ipm.persist(apuP1,true,t);
//迁移活动实例的所有变量
List actVars=ipm.getAllVariablesForActivity(act.getldO,t);
Iterator i2=actVars.iterator0;
while(i2.hasNextO){
ActivityVariablePersistencelnterface avPI=(Activity"Carla—
blePersistencelnterface)i2.next();
ActivityVariablebackupPersistencelnterface pvBU=ipm.
createActiviytVariable
backup(avPI);ipm.persist(pvBU,true,t);}
∥保存待迁移的子流程id
if(act.getSubflowProcessld 0 null&&!act.isSubflow As・
ynchronousO){
backupFurther.add(act.getSubnowProcessId());)
}
//递归迁移子流程
backupFurther.removeAll(proclds);
Iterator i=backupFurther.iterator();
while(i.hasNextO){
String fpid=(String)i.next();
・——
5920-——
performCascadeBackUp(fpid,proclds,ipm,t);}
}
}
4.4监控线程设计
工作流日志迁移引擎采用的是一个独立的、轻量级的
Shark引擎,它仅保留了最少的满足日志迁移需求的功能模块。
在该引擎的org.enhydra.shark.SharkOava类的主函数中添加如
下代码:
eom.eflow.workflow.LogThread t:new LogThread();
t.run0;
新建的两个类MigrationTask和LogThread均位于com.elfow.
workflow包下,LogThread负责检测时间,MigrationTask调用数
据迁移控制器的相关方法完成日志迁移。LogThread中rUll 0
方法的主要定义如下:
public void mn(){
LogThread t=new LogThread0;
t.start0;
int add=86400000・(h 3600+m*6O+s) 1000;
Timer timer=new Timer();
timer.scheduleAtFixedRate(new MigrationTask0,add,5000);
t.joinO;
}
5结束语
我们的研究已被应用于支持服务协作的工作流原型系统
SoFlow 中。该原型系统实现了对工作流日志迁移的有效支
持,对其进行的测试表明,由于日志数据迁移模块和工作流执
行模块、工作流实例库和历史库均采用了分布式结构设计,系
统性能得到明显的改善。从而,为以后进行的流程优化和工
作流模型挖掘研究提供了工作基础。
参考文献:
【1】 樊博,孟庆国.基于知识管理的电子政务流程优化研究[J】.1隋报
杂志,2006(4):55—56.
[2】Van der Aalst WMP,We ̄ters AJMM.Process mining[J].Special
Issue ofComputers in Industry,2004,53(3):321—343.
[3]Workflow Management Coalition,Workflow management faci—
lity V12【Z].2000. r
[4】ObjectWeb.Enhydra Shark[EB/OL].http://shark.objectweb.org/.
(5] 马华,张红宇.一个支持服务协作的工作流管理系统[J].计算机
系统应用,2007(6):5.8. .
[6】 Workflow Management Coalition.Workflow process definition
interface-一XML process definition language[Z].2002 ̄
[7] ObjectWeb.Enhydra JaWE[EB/OL].http://www.enhydra.org/
workflow/jawe/.
【8] 李春芳,骆盈盈,谭庆平.基于业务规则的工作流管理系统模型
[J].计算机工程与设计,2006,27(20):3861.3863.
(9】 马华,张红字,李建华.支持服务协作的工作流模型和建模语言
[J].计算机应用,2007,27(2):409—412.
版权声明:本文标题:基于Shark的工作流日志迁移研究及其实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1719738322a738720.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论