基于JBPM工作流引擎的OA系统设计与实现


西安电子科技大学 硕士学位论文 基于JBPM工作流引擎的OA系统设计与实现 姓名:刘建建 申请学位级别:硕士 专业:软件工程 指导教师:田斌;李景文 20090601 摘要越来越多的企业、政府都成为OA(办公自动化)的用户,通过办公自动化来提高部门之间的协同办公、信息流动与共享。与此同时工作流技术逐渐成为了新一代办公系统必不可少的支撑技术。常见的有OSWorkFlow和JBPM等,已经在办公自动化中得到越来越多的应用。OA对流程的着重点放在自己特有的流程模型上面,但是在应用过程中,上述工作流系统暴漏了一些缺陷,在满足办公自动化当中的特殊流程模型方面显得无能为力,业务分析人员的分析模型和开发人员的实施模型存在较大的差异,使得工作流系统的实施难度加大。JBPM工作流引擎克服了上述缺陷,JBPM引擎把一个业务流程看做一个uml活动图,详细定义了活动图的每个部分,有利于业务人员与开发人员之间沟通和流程的实施;灵活的扩充机制,使得JBPM在处理OA流程模型,包括回退任务、提醒任务、会签任务、抄送任务、动态任务是提供了有力的支持。论文对JBPM工作流引擎进行了研究,完成的工作和取得的成果如下:对办公自动化系统做了需求分析。详细分析了系统应用需求,给出了系统解决方案,根据需求分析,设计了系统的总体框架和模块组成。同时对于OA中工作流平台以及OA中工作流平台和J2EE框架的结合给出了详细的设计及实现。系统经过测试,运行正常,各个功能符合企业用户需求。现在系统已经投入应用并取得了良好效果。关键词:工作流工作流管理系统办公自动化JAVA企业级开发流程模型 AbstractManyenterprisesandgovernmentscalTyoutofficeautomationwithcomputersystemtoenhanceworkingefficiencyandservicequality,whichmeansthatseveraldepartmentscollaboratetofinishajobandtheinformation,flowsbetweenthem.Thetechnologyofworkflowsystemisusedmoreandmoretomeettheneeds.ThetypicalworkflowsystemsincludeOSWorkFowandShark.Whentheworkflowsystemisused,OAsystemfocusesonhowtoimplementitsspecialworkflowpatternssuchasretroversionpattern.Buttheworkflowsystemsreferredabovehassomedrawbacks.TheyarenotflexibleenoughtoimplementthespecialworkflowpatternsofOA.Thedifferencebetweenanalysismodelandimplementationmodelisfar.AllthesebringthedifficultyofapplicationofworkflowsysteminOA.Fortunately,JBPMworkflowsystemCanovercomethesedrawbacks.JBPMsupportsthemodelofUMLactivity,whichallowsthedevelopertodefineeverypartsofallactivity,includingstart—state,end—stateandthetransitionsbetweenstates.Businessanalystandthedeveloperusethesamemodel.AndtheeasyandflexibleexpandingwayofJBPMworkflowdefinitiongivesstrongsupporttotheimplementationofspecialworkflowpatteminOA.ThisthesishasmadeadetailedstudybasedonJ2EEframeworkoftheopen.SOI.U'OeworkflowmanagementsystemJBPM.Themainworkofthisthesisisasfollows:Hasdoneadetailneedsanalysisonautomaticalofficesystem,andalsomadeadetailedanalysisofthesystemapplicationrequirements,Basedontheneedsofanalysis,thethesishasdesignedtheoverallframeworkofthesystemcomponentsandmodules,atthesametime,thethesishasmadethecombinationofthedetaileddesignandimplementationabouttheofficeautomation.Systemtestedandfunctioningproperly,thevariousfunctionsinlinewiththeneedsofbusinessusers.Nowhavebeenputintoapplicationsystemandachievedgoodresults.Keyword:WORKFLOWJBPMJ2EEOAPROCESSMoDEL 创新性声明本人声明所呈交的论文是我个人在导师的指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含他人已经发表或撰写过的研究成果;也不包含为获得西安电子科技大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均己在论文中做了明确的说明并表示了谢意。申请学位论文与资料若有不实之处,本人承担一切相关责任。本人签名:娃日期孚垃关于论文使用授权的说明本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究生在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。本人保证毕业离校后,发表论文或使用论文工作成果时署名单位仍然为西安电子科技大学。学校有权保留送交论文的复印件,允许查阅和借阅论文;学校可以公布论文的全部或部分内容,可以允许采用影印、缩印或其他复制手段保存论文。(保密的论文在解密后遵守此规定)本人签名:导师签名:醐彳业1111之华..窆!J[Z 第一章绪论第一章绪论随着办公自动化的兴起,通过流程或特定环节将日常事务联系在一起,使公文在流转、审批、发布等方面提高效率,实现办公管理规范化和信息规范化,降低企业运行成本。在这背后有一种技术为工作流慢慢凸显出来。工作流就是自动运作的业务过程部分或整体,表现为参与者对文件、信息或任务按照规程采取行动,并令其在参与者之间传递。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。1.1国内外研究现状国内外基于J2EE的工作流引擎很多,但主要占优势的有两种,即OSWORKFLOW及JBPM[¨,此外国内也有对应的工作流引擎。但工作流引擎并没有发展到不需要程序员不必动用多少代码就可以直接使用的程度。工作流流程的定义直至实现完全依赖程序员来实现,其软件的可用性,适应性完全依赖程序员自身的素质,因而很难把握。此外基于工作流的OA在可定制方面也很差,当用户的需求发生变更后,原有的流程发生变化,则基于工作流的系统无法适应用户的需求,因此在设计上可以进行一些改进,使工作流在实际应用中更加灵活以满足用户多变的需求。工作流技术起源于二十世纪七十年代中期办公自动化领域的研刭21,由于当时计算机尚未普及,网络技术水平很低并且缺乏相应的理论基础,这项新技术并未取得成功。1983年至1985年问,在图像处理领域和电子邮件领域出现了早期的含有工作流特征的商用系统IlJ。进入九十年代以后,随着个人计算机、网络技术的普及和推广,以及信息化建设的日益完善,使得工作流技术的研究与开发进入了一个新的热潮。1993年8月,第一个工作流技术标准化的工业组织一工作流管理联盟成立【2】。1994年,工作流管理联盟发布了用于工作流管理系统之间互操作的工作流参考模型,并相继制定了一系列工业标准。与此同时,关于工作流技术的学术研究也十分活跃,许多原型系统在实验室里开发出来。国际工作流管理联盟(WorkflowManagementCoalition,WfMC)的成立标志着工作流技术开始进入相对成熟的阶段【4】。为了实现不同工作流产品之间的互操作,WfMC[1J在工作流管理系统的相关术语、体系结构及应用编程接口等方面制定了一系列标准。工作流管理联盟给出的工作流定义是:工作流是指整个或部分经营过程在计算机支持下的全自动或半自动化。在实 2基于JPBM:I=作流引擎的OA系统设计与实现际情况中可以更广泛地把凡是由计算机软件系统(工作流管理系统)控制其执行的过程都称为工作流。进入二十一世纪以来,工作流技术已被越来越多的人认可,与之相关的标准规范、工作流引擎及商业产品不胜枚举。人们在开发推广工作流产品的同时,更加注重工作流的理论研究,以推动该项技术走向成熟。1.2论文的研究背景及目的现在的企业办公自动化(OfficeAutomation,oA)已经是流程的自动化,所以对流程的处理凸显的很重要,占很大比重,但是由于各个公司的业务有所不同,以及业务变动,对工作流提出了很高的要求。工作流是针对工作中具有固定程序的常规活动而提出的一个概念。通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。工作流技术为企业更好地实现经营目标提供了先进的手段。现在的工作流分为两块:一块是工作流引擎,一块是工作流的应用。一个好的应用是建立在好的工作流引擎基础上的。目前基于J2EE技术的工作流有Willow、OpenWFE、JBPM、0penEbXML、Werkflow、OSWorkflow等。各个工作流引擎都有自己的特有需求,然而,适应性还需要改进。此外,对于应用方面,大都希望工作流可以做到客户自定义,即不用程序员来进行代码,客户可自己来调整或定制一些简单的工作流。这些工作流是已经由程序员实现的,被作为组件来实现,这些部分,在DotNet平台上的已有浪潮公司的产品,J2EE平台主要有普元的PrimetonEOSWorkFlow等。1.3论文主要工作“华美讯达OA"系统是笔者研究生期间参与的一个商业项目,该OA系统包括人事管理、发文管理、会议管理、报表管理、个人信息管理和公共信息管理等。供公司员工使用。本文将以笔者参与开发的华美讯达OA为基础,综合参与开发的“宝盈基金OA”、“中柏Portal"等项目,论述JBPM[4]工作流系统在OA系统中的应用。文章主要工作有:(1)JBPM工作流实施过程总结工作流的JBPM实施包括流程的定义、流程部署、流程执行、流程监控、流程的定义包括从基本的过程定义、任务定义、流程的业务逻辑扩充,包括事件监听扩充、任务分派扩充、节点动作扩充;(2)应用JBPM来解决OA系统中的特殊工作流 第一章绪论3对OA系统中的特殊概念,如“任务回退’’、“会签”、“抄送”等进行了详细的研究;(3)JBPM在华美讯达OA中的应用模块以华美讯达OA系统为背景,主要讲述了JBPM在协同工作中的应用,主要论述了报销流程、请假流程的分析、流程的设计、任务分配类,节点动作的类的设计,最后展示了应用效果。“宝盈基金OA,华美迅达OA以及中柏Portal项目”基础之上的。以上项目由华美迅达深圳分公司研发部完成开发。本人主要针对工作流引擎设计、工作流平台架构以及周边协同功能进行了一些研究,以上研究均不违反公司保密规定,属个人成果。本文研究了工作流平台的体系结构及应用。重点介绍和实现了工作流引擎的核心,也可以称之为WorkflowEn西ne,这是因为工作流引擎是工作流平台的核心所在,在此基础上深入介绍工作流引擎在实际工作中应用的情况。1.4论文章节安排按照论述的内容,本文共分为五章,各章主要内容安排如下:第一章为绪论,主要指出JBPM工作流系统的背景和国内外现状,以及主要工作内容;第二章,基于工作流OA系统的分析,以及基于JBPMI作流的特点分析;’第三章,JBPM流程建模。详细研究了JBPM工作流系统实施过程;第四章,详细研究分析了OA中特殊工作流模式,并在JBPMI作流引擎的基础上加以解决;第五章,JBPM在华美讯达OA中的应用,详细介绍了JBPMI作流如何使用在OA中:第六章,结束语。对工作流中间件的发展做了展望,并提了以后需要改进和注意的地方‘。1.5本章小结本章首先介绍了工作流在自动化办公的需求,产生的原因及应用特点。分析了国内外研究趋势,从而提出对工作流技术进行研究的必要性,引出了论文主题的课题背景,最后对这篇论文的研究内容和章节安排进行了介绍。 第二章基于丁作流的OA系统5第二章基于工作流的OA系统OA系统由很多模块构成,其中应用工作流的模块包括报销审批,请假审批,发文管理,会议管理,财务审批等。其中最常见的是报销审批和请假审批等。2.1基于工作流的OA分析2.1.1OA系统中工作流的主要实现方式办公自动化应用系统的核心包括公文审批流转出来、会议管理,财务审批等。没想工作以流程的形式,由发起者(申请人)发起流程,经本部门以及其他部门的处理(如审批通,驳回,会签等),最终到达流程的终点(如发出信息,流程归档)、工作流程是可以相互衔接、交叉或循环进行的,如果一个工作流的终点就有个可能是另外一个工作流的起点,如上级部门的发文处理就可能引发下一级部门的收文处理。工作流也可以跨部门、跨单位,如发生在组织和组织之间的相关单位。工作流自动化的目标就是要协调组成工作流的四元要素,即人员、资源、事件、状态,推动工作流的发生、发展、完成,实现全过程监控、信息技术不仅应该管理工作流全过程的操作,还应该主动推进工作流成的实现,如及时地收回和赋予不同人员的操作权限、主动提示和催促工作人员实现末一阶段信息处理,从而整体提高工作流处理的效率[3]。工作流自动化有三种模式:(1)基于邮件的;(2)基于共享数据库的;(3)基于邮件和共享数据库模式的。基于邮件的工作流应用就是通过邮件将数据从一个人邮箱传送到另外一个人邮箱。非常简单,但是无法进行实时监控,没有一个管理者可以随时掌握工作流的状态。同时它难以实现自动化处理如通过代理催办、集中归档、统计,满足条件自动执行;数据容易出现多份拷贝,难以控制安全性和准确性;大量的邮件传输易引大量的网络流量。基于共享数据库的工作流应用,可以克服上述邮件工作里的缺点。如信息存储单一、自动处理、安全性好、容易监控等。基于邮件和共享数据库结合模式的工作流应用,结合了上述两者的优点。通过数据库管理工作流信息,同时通过电子邮件来提醒工作任务,即“跟踪一通知" 6基于JPBMjl:作流引擎的OA系统设计与实现模型。基于JBPM的办公自动化系统可以充分利用邮件和数据库的优点。2.1.2JBPM工作流引擎应用于OA的特点JBPM工作流引擎之所以受到广泛的好评,是因为JBPM有着好多其他工作流引擎所没有的优点【3】:(1)JBPM工作流引擎是组件形式的,可以很好的和其他服务集合起来,例如邮件服务【4】;(2)JBPM工作流引擎使用hibernate作为持久层,可以广泛应用于各种数据库[91;(3)基于UML活动图的建模,缩小了业务分析人员和开发人员的实施模型之间的差异【习;(4)容易扩展流程,在解决工作流模型和特殊工作流模型上有一定的优势【6】;(5)标准的JAVA组件,完全支持J2EE开发,支持各种J2EE框架【刀。2.1.3基于JBPM工作流引擎的J2EE系统模型BPM是一个标准的J2EE应用程序,采用J2EE三层架构,即客户端,应用服务层及数据层【8】。图2.1基于JBPM的J2EE系统结构图如上图2.1所示:客户端是web浏览器;引用服务器是开源的JBOSS(也可采用TOMCAT),数据库可以采用各种数据库,如常见的内存数据库DERBY,及其他数据库如MYSQL,SQLSERVER,ORACLE,DB2等,这是由于JBPM采用了优秀的O/RMapping工具HIBERNATE。采用HIBERNATE有很多好处,首先它可以将面向对象的思维方式直接应用于数据库,监护数据库操作,其次它 第二章基于工作流的OA系统7的底层实现对数据库操作提供了许多优化,可以提高数据库执行效掣101。JBPM的整体系统结构可以细分分为五层,分别是浏览器层:通过友好的WEB接口,分别给用户提供不同的业务功能,并提供图形化的显示方式来描述工作流以及工作流的当前执行位置,这里按级别是指权限级别,如管理员,普通用户等不同角色的用户。WEB容器:针对客户端的请求进行处理和相应,包括STRUTSACTION的触发,JSP的编译等。SESSIONBEAN层:使用faqade模式,向上以及绘画EJB的形式提供服务,封装了对数据库的具体操作【l¨。数据库映射层:HIBERNATE提供了对底层数据库的访问和操作。数据库:存储了工作流管理系统的所有信息。各层功能分离非常明确,相邻的层才发生联系。2.2OA中工作流需求办公自动化系统对工作流的依赖是非常强烈的。传统的信息系统和办公自动化使用基于“文档”的数据管理,它认为所有的数据(如表单、日程、文件)都是一份份“文档”,而无法深入了解到数据的内部构造,无法实现这种灵活的工作流控制,更难以与基于“关系表’’的业务系统进行数据沟通。传统“信息系统和办公自动化"的这种局限,使它们无法进一步满足用户在决策支持、流程管理和过程控制等方面的要求。而现代的办公自动化系统就打破了传统表单的文件办公形式,更加深入到数据层,对数据达到精确的掌控。一般OA中的工作流需求除了常见的行政需求,如常见的人事考勤、会议管理、公文管理等;此外还有业务上的工作流需求,如工作职能所决定业务上的流程,常见的如呼叫中心的工作流程,基金公司的工作流程等。业务上的工作流程是一个OA系统中的重心。它的完善程度与否决定了办公自动化仅仅是用来处理日常行政业务还是是否具有处理工作业务的分水岭。根据工作流程的需求不同对工作流进行细化处理,工作流不外乎以下几种模型:(1)回退任务模型在办公过程中,经常碰到申请或已经处理过的业务被退回来重新进行处理,这类需求为回退模式;(2)提醒任务模型在办公过程中,往往会对时间有所要求,比如某件事情必须在某个时间节点给予办理,过期可能会作废,此时就需要对任务根据时间进行提醒。对工作流加上时间约束,是OA的一个实用功能,以前绝大多数工作流引擎不支持时间约束,因为传统工作流系统只讲流程的执行而不关心任务的时间特性。JBPM支持对任务限时; 基y-JPBM工作流引擎的OA系统设计与实现(3)会签任务模型在OA中,有些审批往往需要多个用户共同会签来决定,在财务模块表现的尤为突出。如果参加会签者都投赞成票,这表示通过,否则失败。利用会签,可以有效防止滥用职权、独断专行。或者通过会签来收集所参与人员的意见等。是非常有用的;(4)抄送任务模型在OA中,经常会遇到某些事情已经处理完毕,但是需要将处理结果转发或归档,而转发或归档不影响流程的进程,这类的需求为抄送任务模型;(5)动态任务模型在OA会议管理,秘书行政部安排好会议后,就需要通知与会者,在每次会议管理流程中,与会者并不确定,而是由会议发起人在指定,所以,系统需要动态的根据与会者的情况,生成会议通知任务实例。这种情况下任务实例的个数需要根据实际的需要来生成。2.3工作流介绍2.3.1工作流管理系统介绍工作流管理系统是整个工作流应用的管理系统,主要功能有:开始的工作流程定制,工作流在运行状态的各种任务流转的控制,工作流程在流转过程中的监控。按照WfMC的定义:工作流管理系统(WorkflowManagementSystemWfMS)是一个软件系统,它完成工作流的定义和管理,并按照在计算机中预先定义好的工作流逻辑推进工作流实例的执行。工作流管理系统的图形模型,如图2.2所示:图2.2中可以看到工作流管理系统的总体架构分为三部分:工作流的建立阶段,工作流的运行阶段,人机交互部分。(1)工作流的建立阶段:工作流运用建模工具根据具体流转业务建立相应的应用模型。将实际的业务逻辑转换为软件里可直接识别使用的逻辑模型。为工作流实例提供基本任务流转规则方式。形成相应的文件(比如XML定义文件)或者持久化到数据库进行逻辑信息和数据信息的保存。(2)工作流实例的运行阶段:工作流实例化后会根据步骤信息,角色信息,任务分配信息,任务流转信息形成相应的逻辑实体。这一阶段也是工作流技术中最关键最复杂的环节。由工作流引擎来具体调度,生成,分配各种任务信息和相应任务的控制信息。(3)人机交互:工作流实例在步骤间的传递和工作里实例某环节下业务实例的 第二章基于工作流的OA系统9信息的监控都需要人机交互。人机交互控制的是软件的表现层,但是没有人机交互,工作流引擎里面的任务流转,和其他的控制事件便无法触发。过程定义与设计过程分析建模与定义工具}建立阶段——————————一过程定义卜———————一运行阶段图2.2工作流管理系统功能示意图2.3.1工作流管理系统介绍JBOSSJBPM是一个灵活的、以扩展的工作流引擎,提供标准的JAVAAPI调用方式。应用灵活,可以在标准的JAVA环境中使用[6】。其核心构建是一个普通JAVA(J2SE)库,用来管理流程定义和流程实例执行的运行环境。如图2.3所示,它由流程定制工具jPDLGraphicalDesigner、运行核心库jPDLLibrary组成。运行核心库jPDLLibrary提供流程的运行环境JBPM是一个JAVA库。因此,它可以在人呢和一个JAVA环境上使用。例如:WEB应用、SWING应用、EJB、WEBSERVICE等等。JBPM库也能够当做一个无状态会话EJB打包发布。这样就适合具有极高的吞吐量要求的场合集群部署和伸缩性[12】。’此外JBPM.JPDL.JAR库对其他的第三方库有些依赖。例如:HIBERNATE、DOM4J和其他的库[13】。对于持久化,JBPM内部使用HIBERNATE。除了传统的O/R映射外,HIBERNATE也能解决在不同的数据库之间的SQL方言的差异,使得JBPM可以在目前所有的数据库之间进行迁移。在JBPM中,流程定义被封装成流程文件。流程文件被送到JPDL流程引擎加载以执行。JPDL流程引擎负责遍历流程图、执行流程定义的动作、维持流程状态, lo基y-YPBM。L作流引擎的OA系统设计与实现并记录所有流程时间。JBPM利用状态机作为控制状态的基础,并扩展活动图的建模模型,执行机制采用pertri网算法[1】。.图2.3JPDL套件图该引擎提供以下功能:(1)对过程定义进行解释。(2)控制流程实例的创建、激活、挂起、终止等。(3)控制过程活动间的转换。(4)支持用户操作的界面。(5)维护工作流控制数据和工作流相关数据,在应用和用户间传递工作流相关数据。(6)提供用于激活外部应用程序和访问工作流相关数据的接口。(7)提供控制、管理和监督的功能。2.4基于J2EE的OA开发技术OA系统的设计,使用了许多比较先进的J2EE技术。展现层使用了Struts2框架,该框架的MVC模式分离了模型、试图、控制,提高了软件的清晰度;持久层方面采用了hibernate框架,它极大的提高了开发速度,并优化了数据库操作;在工作流方面选择了jbpm工作流引擎,由于它的建模采用的是uml的活动图形式,因此流程需求的获取和建模可以有机的统一起来,极大的提高了建模速度;此外还采用了和office交互的poi技术,ajax采用了dwr(drectwebremote)快速实现技术,极大的提高了开发的速度以及软件的人性化使用;此外,整个项目使用spring进行管理,所有的bean都由spring进行托管,数据库事务也由spring来进行实行, 第二章基丁二r1:作流的OA系统极大提高了代码效率。2.4.1Struts2概述ApacheStruts2是一个优雅的,可扩展的JAVAEEweb框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。图2.4struts2拦截器原理图如上图2.4所示,struts2通过拦截器,来实现MVC,以及国际化,转换器。校验等。在该OA中,struts2用来进行页面跳转,后台调用。2.4.2Hibernate概述Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。2.4.3Spring概述Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某~层的方案。 12基于JPBM+T:作流引擎的OA系统设计与实现可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。在该OA项目中,采用spring进行托管bean类,并对hibernate进行事务管理。2.4.4Dwr概述DWR(DirectWebRemoting)是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAvA函数,就像它就在浏览器里一样。它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet中获取数据。另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容。DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaSeript代码。这样WEB开发人员就可以在JavaScript里使用Java代码就像它们是浏览器的本地代码(客户端代码)一样;但是Java代码运行在WEB服务器端而且可以自由访问WEB服务器的资源。出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用。这个从JAVA到JavaScript的远程功能方法给DWR的用户带来非常像传统的RPC机制,就像RMI或者SOAP一样,而且拥有运行在WEB上但是不需要浏览器插件的好处。DWR不认为浏览器/WEB服务器协议是重要的,而更乐于保证编程界面的简单自然。对此最大的挑战就是把AJAX的异步特性和正常JAVA方法调用的同步特性相结合。在异步模式下,结果数据在开始调用之后的一段时间之后才可以被异步访问获取到。DWR允许WEB开发人员传递一个回调函数,来异步处理Java函数调用过程。2.5本章小结本章分析了工作流在OA中的应用以及分析了当前OA中工作流的实现方式,提出了JBPM用于OA中的优点并分析了基于JBPM工作流引擎的J2EE系统的模型,并对OA中工作流的需求进行了分析,此外对系统所使用的技术框架做了简要介绍。 第三章华美讯达公司OA需求及系统设计13第三章华美讯达公司OA需求及系统设计本章将着重介绍JBPM工作流系统的基本模块和工作流实施过程,重点分析JBPM的流程定义过程,包括从简单的流程定义,任务开始到流程的扩充。流程的实施过程,主要包括定义、部署、执行、监控,是JBPM应用于OA系统的实施过程。3.1华美迅达OA系统功能需求华美迅达分公司OA系统基于WEB平台构建,采用B/S工作方式。华美讯达深圳分公司的OA采用J2EE技术,使用struts架构。该OA具有综合行政模块、公文流转模块、知识库模块、收发文管理模块、系统管理模块等。其中综合行政模块大量应用了工作流技术。如请销假流程、财务报销流程、考勤流程等一系列流程。本节着重介绍华美迅达OA的系统功能。3.1.1系统管理oA系统瞻综厶口行政模块公文流转模块信息发布模块知识库模块收发文管理模块图3.1OA系统功能模块图系统管理模块系统管理可以对整个系统的组织机构进行设置;对用户账号进行管理,可以新建员工账号、管理帐号;同时通过岗位设定可以对岗位进行设定;权限组设定,设定权限;查看近期用户登录状况等。3.1.2综合行政综合行政包括考勤管理、财务管理、会议管理、车辆管理、办公用品、图书馆里等。对日常行政工作进行处理。 14基丁JPBM丁作流引擎的OA系统设计与实现3.1.1信息发布模块信息发布模块可以进行新闻、公告、通知、电子期刊、大记事的发布管理。有相关权限的人可以发布各种新闻、公告、通知、电子期刊、大记事等,同时在发布前可以设定审批流程、通过审批的才可以发布出去;同时也可以对发布的内容进行范围管理,使得只有被选择的某些人、部门或全体员工可以看到;并且可以删除已发布的内容。3.1.3公文流转在网上起草申请,并发送给相关负责人进行审批,实现无纸化办公。审批人可以在网上直接对申请内容进行修改、审批,注明审批意见,并盖章或签名。申请内容在多个审批人之间按顺序自动流转,审批过程即可以在建立审批模板时设定,也可以由起草者设定。可以在审批管理中根据单位要求设置模板的统一格式,可以设置每个模板的使用者、管理者和修改者。具有使用权限的用户能够使用模板起草申请;具有管理权限的用户能够在表单管理中管理使用该模板起草的申请;具有修改权限的用户能够对模板进行维护。审批的流程即可以采用固定流程,一个模板梆定一个流程的方式,也可以设定允许在流转过程中自定义流程或修改已设定的流程,流程支持直流、分流、并流、条件分支、流程嵌套以及各种协办、联办等复杂流程。在审批中,可以按照角色进行审批的流转,可以通过相对路径找到相应的岗位,如审批者的上级领导,当前审批者的上级领导。流程中可以支持退文的功能,可以退到以前的任何一级,也可以退回到发起人。在审批过程中,支持痕迹保留,电子印章,手写签名、全文批注。可以实现催办,督办,统计。3.1.4知识库管理知识管理:这里是单位各种知识和资源的共享中心,单位可以将各种资料分门别类的存放到这里,便于日后方便的查阅,可以使成功案例、先进经验、技术方法、各种表单、文件资料等资源在这里共享,便于大家共同学习、使用,快速提高。可设置权限以保护机密资料安全。下载中心:单位可以将平时积累的文摘、收集的信息、经常需要使用到的工具、文件、客户资料等各种资源有序的存放在这里进行统一管理,便于需要的时候及时查阅下载,而不必再东寻西找,浪费时间。系统运行中需要下载的OA助 第三章华美讯达公司OA需求及系统设计15手、控件等也在此下载。规章制度:政策法规、人事制度、行政制度、财务制度、管理制度、销售制度等各种制度文件的在线存放、查阅,可以方便的进行管理。知识管理、下载中心、规模制度等模块中,均可以对文档进行按权限的全文检索。包括Word/Excel/PPT/HTM∽DF/R1陌等格式。可以对目录夹设定候修改和访问的权限,只有有权限的员才可以修改目录夹及相关文件,在设定权限时,可以按人来设定,也可以按部门来设定。可以通过设定,对每个人的上传附件的大小进行限制。3.1.5收发文管理A、发文管理是拟稿人根据需要选择行文类别(行文用笺,处理流程,正文模版)起草公文,根据行文类别的流程设定,送交相关人员进行审核,复核,会签、签发、校对等工作,然后由办公室进行发文登记、编号、套头,盖章后进行文件的发放(分发、下发、办结)等工作,最后由公文管理员对办结公文进行归档过程。提供督办、催办功能。在发文的审批中,可以按照角色进行审批的流转,可以通过相对路径找到相应的岗位,如审批者的上级领导,当前审批者的上级领导。发文的流程既可以采用固定流程,一个模板梆定一个流程的方式,也可以设定允许在流转过程中自定义流程或修改已设定的流程,流程支持直流、分流、并流、条件分支、流程嵌套以及各种协办、联办等复杂流程。流程中可以支持退文的功能,可以退到以前的任何一级,也可以退回到发起人。在审批过程中,支持痕迹保留,电子印章,手写签名、全文批注。可以实现催办,督办,统计。B、收文管理是公文到达后,收文登记人选择公文类别,登记公文,送交相关人员进行拟办,根据公文类别的设定流程,送交相关人员进行批示、承办、传阅等工作,也可以自定义下一步相关处理人员。并且在流转过程中,只有待办人员才有权打开批办,其他人都不能打开。最后由公文管理员对公文进行归档。归档时,可采用自动归档和手工归档。由于我们在收发文管理中采用了MSOffice插件的技术,系统可以提供:扫描输入、原文引入、手写笔输入、手工录入、从电子邮件中直接转入多种录入方式。3.2华美讯达公司OA系统设计华美讯达深圳分公司OA采用Apache的开源项目struts架构(MVC架构的一 16基于JPBM:[作流引擎的OA系统设计与实现种实现)、模块化设计。除人事、权限、消息等基本模块外,其余模块互相独立、可以任意添加、删除,通过配置文件像码积木一样组装出不同的产品。在办公个自动化中,特别是办公自动化应用系统的核心应用公文流转处理、会议管理,以及各种审批等。每项工作以流程的形式,由发起者发起流程,经本部门以及其他部门的处理,最终到达流程的终点(发出文件、归档)。工作流可以是互相连接、交叉或循环、嵌套的。如一个工作流的终点可能是另外一个工作流的起点。.基于JBPM工作流引擎的办公自动化系统,从信息技术的角度出发,除了传统的任务方式外,JBPM引擎可以集成邮件系统、短信发送系统作为催办提醒工具,JBPM引擎可以结合“推”、“拉"技术;从工作流建模的角度出发,JBPM引擎对基于UML活动图建模的支持,缩小了业务分析人员的分析模型以及开发人员实施模型之间的差异;从实施的角度出发,JBPM引擎允许直接进行任务分配、节点动作和事件响应的扩充,使得模块功能更加清晰。3.2.1系统技术架构该OA系统主要用于华美讯达深圳分公司日常内部信息资源维护及办公,主要包括考勤,邮件,请销假,及时通信,会议管理等报表管理,收发文等管理。系统采用J2EEB/S结构,用户通过web浏览器访问系统,采用tomcat作为J2EE服务器,遵循MVC模式,表现层采用Struts框架,管理层采用spring。JBPM引擎工作于实体层,实体层采用轻量级的HibernateO/R映射模式,数据库采用Mysql。模型如图3.2。数据库图3.20A系统架构图Struts是一个基于模型(Model).视图(View).控制器(Controller)模型的开源框架,是利用J越厂AServlet和jSp构建web应用的一项非常迅速的技术。用户提交请求后,首先经过页面的脚本语言效验数据是否有效、完整、规范, 第三章华美讯达公司OA需求及系统设计17通过后才能提交到服务器。在服务器通过web.xml转到相应的struts.xml,在struts.xml里找到相应的FormBean和ActionBean。把页面的提交项映射到FormBean里,在ActionBean里完成权限的效验,然后根据结果进行处理。把结果返回给用户。该流程系统实现采用J2EE技术,主要技术框架如图5.1所示:服务器采用J2EE服务器(jboss、tomcat等,可以在linux或win系统上部署),数据库没有严格要求,绝大部分数据库都适用。实现框架采用struts2,ajax采用dwr快速实现,关于持久化采用hibernate来实现;使用spring进行bean托管和dao事务处理。这样的搭配可以极高的提高开发速度。绝大部分数据库都适用。实现框架采用struts2,ajax采用dwr快速实现,关于持久化采用hibernate来实现;使用spring进行bean托管和dao事务处理。这样的搭配可以极高的提高开发速度。3.2.2华美讯达公司OA系统结构根据OA系统功能,其支撑平台分别为工作流管理平台、表单管理平台、权限管理平台、以及报表管理平台和归档管理平台等。如下图3.3所示。网络办公自动化平台I匿丁作流管理-、F厶‘j表茧管理,I,台权限管理jI,厶L.I报表管理j眨厶U!J1梢管理、r厶U图3.3OA平台分解图。通过这些平台管理,可以实现自定义组织机构、自定义数据属性、自定义数据表单格式、自定义流程管理、自定义数据访问权限、自定义报表输出自定义选项设置,充分满足客户功能个性化调整。支持多种复合信息格式。标准功能装配接口,支持客户自定义功能装配。工作流管理平台提供了工作流流程版本的管理以及流程实例的管理;表单管理提供表单的添加、维护、以及表单的查询;权限管理平台提供权限组设定,设定权限,权限;采用了典型的基于角色的访问控制方法(RBAC);报表管理平台,采用了poi技术,可以方便的对office进行操作;归档管理平台对数据进行汇总, 18基丁JPBM丁作流引擎的OA系统设计与实现归档。Web的目录部署如下图3.4所示:其中CSS文件夹用来存放OA的CSS;jS用来存放javascriphhtml用来存放静态页面;pie用来存放该系统中出现的图标等;Web.Inf目录里web.xml,applicationcontent.xml用来存放该系统配置;W曲一IIlf目录里的lib用来存放应用到的类包;Web.Inf目录里的class目录用来存放OA中使用到的类;w曲血f目录里page用来存放jSp代码页面,这样存放在web-inf里面的内容必须通过Servlet跳转才可以访问得到,有效的保证了OA系统的安全。l一-CSSHsOA⋯I一-htmlI一-pieI·-Web-Inf--I|--web.xmlI.-applicationcontent.xmlI--libI--pageI—dass图3.40A平台分解图此外,关于包的命名,采用“com.expressthought.oa"作为顶层包,它的下面分别又pojo包、dao包、action包、service包、dwr包、以及util包等,如下图3.5所示:图3.5OA系统管理模块包图 第二章华美讯达公司OA需求及系统设计19其中包中pojo类用来存放的实体对象类;dao包用来存放系统管理模块数据获取类;action类,用来存放系统管理模块struts2的action实现类;dwr包用来存放系统管理模块动态生成ajax的dwr实现类;service类用来存放系统管理模块提供各种服务的服务提供类,util包用来提供该OA系统管理模块中的常量约定、通用功能类等。其余几个模块的包划分,和系统管理模块类似,完全保证了代码组织的清晰度。3.3本章小结本章首先对获取了华美迅达OA的需求,然后着重研究了该OA所采用的技术架构,并给出了相应支撑平台和系统结构。 第四章华美迅达OA工作流平台设计与实现2l第四章华美迅达OA工作流平台设计与实现OA系统中,典型的办公自动化工作流,包括事务处理和公文管理,其特点是流程类型多种多样,有确定的也有不确定的。工作流在处理中要处理下面这些问题:首先工作流处理对象在流程中状态的动态变化,还有流程结构的修改以及处理人员角色和只能的动态变化。4.1工作流平台需求办公自动化系统的开发要充分考虑这些流程的特点,因此相对于其他软件的开发有特殊的原则和方法,但主要是都必须通过需求分析和系统分析,抽取出其中的通用功能再加以组合,而其基础工作就是抽取元工作流。所谓的流程管理就是要实现:(1)可以看到当前系统中发布了多少个流程;(2)每一个流程产生了多少个流程实例,有哪些流程实例结束了,哪些处于活动状态,哪些挂起了;(3)同时对于每一个流程实例当前走到什么位置了(流程的进度状况)等等。总而言之就是:(1)对流程来说,可以获得当前系统中的流程信息如:流程ID,流程名称,流程当前最新版本;(2)对流程实例来说,可以获得流程实例ID,流程名称,流程版本,创建时间,并且可以看到它当前处于什么状态,有多少个活动的,不活动的,或者挂起的流程实例。通过分析,根据对流程以及流程实例的监控、管理、使用等方面,建立了工作流平台,工作流平台的基本功能如图4.1所示。完整的体现了流程管理以及流程实例管理,通过流程和流程实例管理即可实现所有流程的操作并且完成对整个工作流系统的监控。再深入一步,可以看到某人当前的工作。此时相当于系统管理员,工作流系统中所有流程信息对其都是可见的。工作流平台又由流程管理平台和流程实例管理平台组成,分别对工作流流程和流程实例进行管理。其中流程管理包括流程的发布,版本管理,流程停用和流程查看;流程实例管理包括实例发起,实例查看,实例挂起,结束实例以及实例归档。 基于JPBM1:作流引擎的OA系统设计与实现流程管理模块提供了对流程的操作,往往一个操作有很多种方式来实现,如发布流程,可能通过输入流发布,也可能通过流程定义文件发布,在设计中都留有了对应的公开方法。图4.1工作流平台结构图4.2工作流平台设计实现通过查看JBPM的API发现API里并没有提供实现该功能现成的接口,不过可以通过自己手工编码的方式来拿到需要的监控信息。4.2.1流程管理模块设计实现流程管理平台主要的功能是流程的发布、流程停用、流程查看、流程版本管理。流程的发布,即将xml流程文件发布到数据库中,此动作需要MjbpmI作流引擎的表进行写数据。涉及的表如下表4.1所示: 第四章华美迅达OA工作流平台设计与实现23表4.1流程配置类数据表表名表含义JBPM.._PROCEsSDEFINITION流程模版表JBPM-NODE流程节点表JBPM_TRANSITION流程迁移表JBPM_ACTION流程动作表JBPM-EVENT流程事件表JBPM_DELEGATION流程代理类表(用于实例化JBPM中的action类)JBPM—TASK流程任务表JBPM_TASKCONTROLLER流程任务控制JBPM_VARIABLEACCESS流程变量表JBPM_MODULEDEFINITION流程模块定义表JBPM_EXCEPTIONHANDLER流程异常处理器表JBPM_DECISIONCONDITIONSDECISION节点判断条JBPM_SWIMLANEDECISION节点判断条件表JBPMPROCESSDEFINITIoN表用来存储流程定义,将流程xml解析并存入数据库上述表中。其发布流程的流程如下图4.2所示:解析流程ml,并存入流程数据库1L/,、(结束)\/图4.2流程发布流程图其他各项流程管理功能如流程停用、流程查看、流程版本管理的实现思路和流程发布~致,都是对如表4.1流程配置类数据库操作。通过查看JBPM的表,知道要实现流程监控功能就是把JBPM当中的JBPMPROCESSDEFINITION(已发布的流程表),JBPMPROCESSINSTANCE(流程实例表),JBPMTASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以实现所要的流程停用、流程查看、流程版本管理等监控功能。 基y-JPBM工作流引擎的OA系统设计与实现图4.3流程配置类数据库api调用过程JBPMI作流的的持久层是用Hibernate实现的,因此要实现根据流程定义名称找到所有的处于活动状态下的流程实例要写一段HQL来查找所有的由该流程产生的流程实例,然后对得到的流程实例集合进行过滤,拿到想要的所有处于活动状态下的流程实例。流程管理ProcessMaIla星阻类,设计如下:Processlbnager+deployProcess(infileName:string)+deployprocess(inis:InputStream)+deleteProcessDefinition(inprocessDefinitionId:int)+deleteProcessDefinition(inprocessDefinitionld:ProcessDefinition)+findLatestProcessDefinition(inproeessName:string):List+findLatestProcessDefinitions0:Process+findProcessDefinition(inprocessName:string。inversion:int):Process图4.4流程管理ProccssManagcr类图其公有方法介绍如下表4.2所示:表4.2流程管理类方法介绍表方法名方法说明.deployProcess(stringfi1ename)根据输入流发布流程deployProcess(InputStreamis)根据流程描述文件发布流程deleteProcessDefinition(intpid)根据流程id删除流程deleteProcessDefinition(ProcessDefinitionP)删除指定流程findLatestProcessDefinition(stringprocessName)获得流程最新版本findLatestProcessDefinitions(Processprocess)获得流程最新版本findProcessDefinition根据流程名,流程版本获取流程定义 第四章华美迅达OA:l:作流平台设计与实现对流程的操作,主要是对JBPMPROCESSDEFINrrION(已发布的流程表)表的操作,对该表操作,jbpm工作流引擎提供了印i如图4.3所示:org.jbpm.JbpmConfiguration,根据Configuration类来获得工作流配置,并通过org.jbpm.graph.def.ProcessDefinition类的parseXmllnputStream(is)来获得流程定义,并根据JbpmConfiguration来获得JbpmContext,并使用JbpmContext.deployProcessDefinition(processDefinition)来发布流程。org.jbpm.db.GraphSession是jbpm中一个很重要的类,提供与数据库的交互,它用deleteProcessDefinition方法来删除流程。同样通过它对JBPMPROCESSDEFINITION(已发布的流程表)进行操作,可以对流程进行查询。流程管理平台包括流程的发布,流程版本的管理,流程停用以及流程版本查看等。如上图4.4所示,为其接口设计。4.2.2流程实例管理模块设计实现流程实例管理包括实例发起,实例查看,实例挂起,结束实例以及实例归档。通过查看JBPM的API发现API里并没有提供实现该功能现成的接口,不过可以通过自己手工编码的方式来拿到需要的监控信息。流程实例的监管,llpXffjbpm-E作流引擎流程实例表进行增删改查获,涉及到如下表4.3:表4.3流程运行类数据表表名表含义JBPM_PROCESSINSTANCE流程实例表JBP虬TOKEN流程ToKEN表JBPM.LOG流程日志表JBPM—RUNTIMEACTION流程实时ACTION表JBP虬VARIABLEINSTANCE流程变量实例表JBPM_COMMENT流程备注信息表JBPM_JOB流程J二作表JBPM-TOKENVARIABLEMAP流程TOKEN变量MAP表JBPMMODULEINSTANCE流程模块实例表JBPM_BYTEARRAY流捍模板par文件形式进行存储的实例表JBPM—BYTEBLOCK以二进制形式存储流程模板的表表4.3流程运行类数据表中的JBPM|IPRocEss烈s吖蝌cE表是流程实例主表,其余为附属表,用来记录流程实例的运行状态。 基于JPBM-T作流引擎的OA系统设计与实现根据上面分析设计了流程实例管理接InstanceManager,如图4.5所示:Instancelanager+createInstance(inprocessDefinition:ProcessDefinition):Processlnstance+createlnstance(inprocessDefinition:ProcessDefinition。invariables:llap):ProcessInstance+createInstance(inprocessDefinition:ProcessDefinition,invariables:Map):ProcessInstance+findProcessInstances(inkey:int):List+getProcesslnstance(inprocessDefinitionId:long):Processlnstance+end(inprocessInstanceId:long)+suspend(inprocessInstance:ProcessInstance)+resuse(inprocessInstance:ProcessInstance)+deleteInstance(inprocessInstanceId:long)+deletelnstance(inprocesslnstance:Processlnstance)图4.5流程实例管理InstanceManager类图该流程实例管理类用到Tjbpm的api,通过org.jbpm.db.GraphSession类对JBPM_PROCESSINSTANCE(流程实例表)表进行查找等操作,从而对实例相关数据进行增删改查;并通过org.jbpm.graph.exe.Processlnstance暴露的方法对单个实例进行管理。流程实例管理接ElInstanceManager公有方法说明如下表4.4所示:4.4流程实例管理接口方法说明表方法名方法说明createInstance(ProcessDefinitionp)对给定的流程创建实例createInstance(ProcessDefinitionP,Map对给定的流程创建实例,并传入参数mapv)createInstance(ProcessDefinitionP,Map对给定的流程创建实例,并传入参数mapvariables,Stringkey)findProcessInstances(10nginstanceId)根据流程id返回由该流程所创建的上作流实例getProcessInstance(10nginstanceId)根据实例id返同实例end(ProcessInstancepi)不论该实例处丁什么状态,结束该实例suspend(Processlnstancepi)实例挂起resuse(ProcessInstanceinstance)挂起的实例恢复deleteInstance(10ngprocessInstanceId)根据id删除实例deleteInstance(ProcessInstance删除给定实例instance)4.3本章小结本章首先对OA中工作流平台功能进行了分析,继而给出了流程管理模块以及流程实例管理模块的设计实现。 第五章基于JBPM流程建模的华美迅达OA系统实现第五章华美迅达OA系统实现华美讯达深圳分公司的OA采用J2EE技术,使用struts架构。该OA具有人力资源模块、电子商务、portal模块、财务模块、系统安全模块等。其中人力资源模块大量应用了工作流技术。如请销假流程、财务报销流程、考勤流程等一系列流程。本章着重介绍JBPMT作流在华美讯达OA中的使用。5.1华美迅达OA中J2EE框架配置该OA采用struts、spring、hibernate来实现,其@struts采用struts2,spring采用的sprin92.0,hibernate采用的是3.2版本。这和步骤如下:(1)框架整合前需要拷贝所需要的struts2、sprin92.o以及hibernate3.2的jar包到wcb.in仂ib路径:(2)其次需要在web.xml中添加对各个框架的支持,如5.1.1,5.1.2,5.1.3,5.1.4所示配置;(3)框架整合配置完毕后,针对web的功能模块开发即可开始,springg寸bean类进行托管和对hibernate的事务支持,所以bean类的托管在applicationContext.xml中配置;struts对MVC的支持要求必须在struts.xml中配置action跳转;hibernate需要在hibernate.cfg.xmlq]配置相应的诉苦配置,其次表的映射文件也需要配置;对于dwr来说,必须配置dwr.xml,来说明用于揪速ajax的功能类。5.1.1配置spring配置sp血g,spring提供一个ContextLoaderListener类,该类可以作为W曲应用的Listener使用,它会在Web应用启动时自动查找WEB.INF/下的applicationContext.xml配置文件(SpringieSt.文件),并且根据该文件来创建Spring容器。修改web.xml,添!Jllspring监听器。。i、.j一嘭|。j≈4≈黟;尊’¨粥””皆'i警嚣f彬粥”y掣犯?:’?⋯f=”弘》””‘org.springframework.web。context。ContextLoaderListener<砖istener-class></listener>:,,。,;_:,:~芬。。,群。、,.,*w÷,,、一r,6~⋯蚰“函⋯“⋯v一{·⋯⋯~⋯⋯^⋯^⋯⋯一一c☆一缵秀凄镕鬟霪缓g荔一弩;铲。~汐耪—m影,。∽耘%鬓鬏彩"m魄 28基-1-.JPBM—F作流引擎的OA系统设计与实现配置监听器完毕,当OA服务启动时,spring会自动加载applicationContext.xml配置文件。5.1.2配置strutS2置struts2,为了使struts2和spring能同时工作,struts2提供了一个插件:struts2一spring-plugin,需要在环境中加入只需将struts2一spring-plugin一2.0.11.jar'S_.,,此外还需要在web.xml[fl配置改插件,添力llstruts2过滤器如下:配置struts2的spring托管插件:配置struts2的默认拦截器:配置拦截器映射: 第五章基T-JBPM流稃建模的华美迅达OA系统实现5.1.3配置hibernate由spring托管hib锄ate延迟加载配置,修改web.xml,添加延迟加载配置如下:5.1.4配置dwr修改web.xml,添力Hdwr配置如下:5.2华美迅达OA中工作流和J2EE框架整合JBPM可以轻松的和J2EE框架结合起来。一般情况下可以和流行的框架如WEBWORK,STRUTSl.2,STRUTS2,等web框架结合起来,同时也可以使用SPRING对其进行管理。Web框架结合比较容易,SPRING结合比较困难。JBPM的3.2.1配合SPRINGModuleqb的spring-modules—JBPM31.jar虽1]可实现对jbpm的管理。 基T-JPBM1:作流引擎的OA系统设计与实现需要以下配置的Servlet如下表5.1所示:表5.1jbpmServlet配置表Servlet名称来自apiMapping映射备注JobExecutorServletorg.jbpm.job.executor.J/jobsjbpm3.2任务调度obExecutorServlet配置SchedulerServletorg.jbpm.scheduler.impl/JBPMschedujbpm3.1任务调度.Schedulerservletler配置在JBPM3.2中已经取消了JBPMtimer表,取而代之的是JBPMjob表。可以理解成后台有一个线程在不停的监听着JBPMjob表,如果有需要触发的timer生成了,就按照timer的属性定时或者循环触发它。比较一下两个不同版本的的配置3.1.X里用的是org.jbpm.scheduler.impl.SchedulerServlet,而3.2里用的是org.jbpm.job.executor.JobExecutorServletJ2塞.最明显的不同之处,另外关于扫描表的周期值等相关参数3.1.X是直接设置在servlet里,而3.2里则是配置在JBPM.cfg.xml里。使用spring,需要配置Hibernate的SessionFactory--集spring托管hibernate的方式。该系统设计用至UYstruts2、dwr、spring、hibernate框架以及jbpm-l-作流引擎,有许多结合的地方。该系统用到了许多类,主要分3部分,一类是pojo类,用来处理实体,另一类是dao类,用来进行数据交互;此外采用struts2技术厚的action类,一集采用dwr的action类,这些类用来实现页面后台交互;第四类是service类,用来提供业务服务的。下面主要介绍的是service接口。JBPMService接口,用来提供一些JBPM服务,提供JBPM常用方法如下图5.1所示:<>JBP峪ervice+getBaseDao0:Dao+setBaseDao(indao?Dao)+getfbpmConfiguration0:JBPMService+submitdpplication(inborrowid:int.inactorId:int.inmoney:float)+initJbp$(inUserid:int)+sho嘏orrow(intaskid:int)+aanagerPasstintaskid:int.inresult:string)+bossPass(intasked:int.inresult:string)+findTaskListByUserld0:List+findAllTaskInstanceByUserId(inuserid:int):List+findUserTaskLIstBygserId(inUserid:int):List+findUserMessageByUsernameIinusezwallle:string):List图5.1JBPMService类图如上图5.1所示,JBPMService提供了一些公有方法:getBaseDao和sctBaseDao用来获取和设置spring注入的dao;getJbpmConfiguration和setJbpmConfiguration用来获耿和设置JBPM的运行配置; 第五章基于JBPM流程建模的华美迅达OA系统实现3linitlbpm用来初始化~个流程;submitApplication用来提交申请;findTaskListByUserld,findAllTasklnstanceByUserId、findUserTaskLIstByUserld,fmdUserMessageByUsername等分别是根据用户id来获取当前用户的任务信息等。BaseAction类,继承ActionSupport类,提供更加丰富的Servlet操作,期Action类可以继承其以方便使用,如下图5.2所示:<>Action千(>BaseAction+getJbp衄Service0jJBPHService+setJbpwService(injbp幽Servdce?jBl噬Service)+getErrorMessage0:ErrorJlessage1LsetE27-orhIessage(inerrorMessage?E170rMess港ge)+getRequest07Request+setRequest(inrequest:Request)+getRequestParameters07RequestParameters+getResponse0:Response+getSession0:session+getServletContext0jServ]etContext图5.2BaseAction基础类其他需要实现Action的只需要继承BaseAction就可以了。如图5.2,方法getJbpmService和setJbpmServiee用来获I玟jbpm配置信息;方法getErrorMessage和setErrorMessage用来设置出错信息;getRequest、setRequest方法用来获取web请求;getRequestParameters方法用来获取参数,此#bgetResponse、getSession、以及ServletContext用来获取web请求、session以及ServletContext上下文。5.3OA流程实现在华美迅达公司中,报销是一个经常性的事务,有一定的流程可循。因此在做华美迅达OA时,报销流程采用了工作流。5。3.1报销流程实现(1)流程需求在华美迅达公司中,所有员工都可以填写报销单,然后提交自己直接主管审批;主管审批可以有三种可能:一是主管可以驳回请求,那么报销人需要重填报销单,或者取消报销操作:二是主管不同意请求,请求直接结束;三是主管同意请求,那又存在两种情况,一是如果报销总费用大于1000的话 基于JPBM—I:作流引擎的OA系统设计与实现那么会自动转到老板那里,如果小于1000就直接进入财务处理子流程,老板审批的话有两种可能,一是同意进入财务处理子流程,二是不同意请求直接结束。这里用到业务逻辑如果多变的话可以提取成外部注入或使用规则引擎来实现。财务处理流程里面只有一个Node节点,自动执行一个Action,并没有做什么特殊处理。这里加上这么一个财务处理子流程目的是介绍一下子流程用法。查看待处理任务列表:根据登录用户列出所有等待该用户处理的任务列表,分别列出任务名称、创建时间、任务类型;查看流程:以图形方式查看该流程;处理任务:分配的工作进行处理;查看用户自身发起的业务:可以查看由用户发起的业务,可以查看任务名称、任务创建时间、流程当前状态,进行自己发起的业务回顾;发起流程,由用户发起一个流程实例;(2)报销流程建模<发起报销>:omple'∞rd删◇\./申请人修改报销单1r么\,. 丫To/期I·崔\TOcaiwuTorq嚣uIt财务处理流程●~一1rTo.mdTo∞自动处理申请结果●’r/,、--,一J、一\舶。/图5.1报销处流程图 第五章基于JBPM流程建模的华美迅达OA系统实现33/\/财务审批\\开始/\/’自动财务处理’r(结束)图5.2财务处流程图根据需求建立如图5.1、图5.2模型。下面简要介绍上述模型。报销的角色分析:根据在流程中承担的不同任务进行分类,角色有一下几种:(1)申请发起人:发起报销申请的员工,具有报销申请发起权限;(2)直属部门领导:发起报销申请员工的直属上级,有审批自己部门员工报销的权限;(3)经理:所有大于1000的报销任务必须由经历来审批;角色的定义可以方便授权管理。在本系统中,通过任务分配类来访问组织结构、用户管理模块等来取得任务的用户D。在发文时候,i刍UserAssignment来负责,它实现了AssignmentHandler接口。同样ManagerAssignment、BossAssignment分别对应于直属部门领导以及经理。类图如下:图5.3任务分派实现类类图(3)节点详细分析:报销处理模型:首先由员工发起报销申请,此时StartState需要记录发起申请的员Iid,然后自动流向部门主管的tasknode节点;部门主管节点首先通过AssignmentHandler的实现类(见图5.3)来获得该节点 基丁JPBM工作流引擎的OA系统设计与实现的负责人(根据系统角色定义去数据库中查找),然后根据主管审批意见分别流向不同节点。如果未通过则流向修改报销单节点,修改完成重新审批;如果通过则流向下一个节点,即判断走向的Decision节点。判断走向的Decision节点负责逻辑判断,根据业务逻辑流向不同的节点。该处通过集成DecisionHandler接口,实现decision接口,根据返回结果执行不同的流向。<<接L]>>ActionHandler+executeO△1CaiwuProcessAction+execute()图5.4自动财务处理节点action处理类类图图5.5判断走向decision处理类类图从判断走向的decision节点出来后,根据需求中的业务逻辑,如果报销额度大于1000,则直接去老板审核节点,根据老板意见如果不同意直接进入自动财务处理节点,将处理结果通知申请人,然后进入end节点,结束报销申请;同意则流入财务审核子流程自动节点,进行记账等操作,执行完毕自动流入end节点,完成流程;如果在decision中拒绝申请,则直接进入自动财务处理节点(见图5.4),通知申请未通过,结束流程(见图5.5,在DecisionProcess的decide方法中实现具体逻辑)。(3)报销流程数据库JBPM可以使用任何数据库,JBPM数据库表分为两大类,一类为JBPM数据库系统表,用来记录流程系统信息;另一类为用户表,用来记录用户的业务逻辑数据。JBPM系统表分为三大类:1.流程配置类数据表;2.流程运行类数据表; 第五章基。y-JBPM流程建模的华美迅达OA系统实现353。角色权限数据库表;其中流程配置类数据表可参见5.7节。用户业务表,用户报销业务需求的表:用户采用外部的用户,涉及的表有:用户表(流程中任务的分配)用来存储报销流程id、报销主题、报销备注、以及用户主键等。报销表用来存储报销的详细信息,有项目名称,金额等。报销项目表与报销表之间有一种主从关系,审核意见表是对报销的审批历史记录。下面对涉及到的表做详细介绍:表5.4报销表tbbaoxiao列名数据类型约柬条件含义baoxiao_idInt主键,自增主键baoxiao_titlevarchar(30)报销主题baoxiao_memovarchar(200)备注useridInt外键,引用tb_user主键用户idbaoxiao—.dateDatetime报销时间baoxiao_flagbit(1)0为未处理,1为已处理报销状态表5.5报销表tb-baoxiao_item列名数据类型约束条件含义itemidInt主键、自增主键item_namevarchar(30)项目名称item_moneyFloat项目金额item_memovarchar(200)项目备注baoxiao—.idInt外键,引用tb_baoxiao表主键报销表ID表5.6报销意见表tb_approve列名数据类型约束条件含义approve——idInt主键,自增主键useridInt外键,引用tbuser主键审核人ID外键,引用tbbaoxiao主baoxiao_idInt报销表ID键approve_resultvarchar(30)审核结果approve_memovarchar(200)审核意见approve_dateDatetime审核日期表5.7用户表tb—user 36基TJPBM1:作流引擎的OA系统设计与实现useridint主键,自增用户iduser_namevarchar(30)用户名user_passwordvarchar(30)密码0为普通用户,l为主管,2为user_typeint用户类型老板,3为财务人员(4)报销页面上面做好的流程上传到服务器后就可以使用了。流程如下图5.6所示。图5.6财务流程图申请人刘建蚓部门市场鄯{用途i报销出差费用款额;500|支付方式现金黛}部门主管财务主管{总经理备注图5.7报销发起页面效果图流程发起图页面如图所示5.7所示,在该页面发起报销流程。填写完毕后领导处理完毕会返回信息给申请人。至此报销申请结束。5.3.2请假流程实现请假是公司里最常见的一项事务。一般情况下,首先需要填写请假单,然后要自己的直属领导审批,还需要行政部门审批,然后向有业务关联的同事告知此事,是非常麻烦的。通过该请假流程,可以实现电子快速请假。华美公司OA需求中,部门员工要休假的话需要部门主管的批准。如果休假天 第五章基于JBPM流稃建模的华美迅达OA系统实现37数大于lO天的话,在部门主管的同意后,还必须老板批准。如果是部门主管要休假只要老板批准即可。在休假被批准之前,申请人可以撤销休假申请。图5.8财务流程发起图秘填写该工作的名称或文号。流程说明爰步骤列表步重序粤名森瓷程茸选方冉l当事人申请—+2J—}32部门主管审批—'3·—'l3射务主管审批·t··14息经理审批_5··l5审诗人查硒审批售况结柬j查看漉程设计圈查看表单梗扳每次休假申请结束之后,不管通过未通过或是否取消,都必须记录下来。主管在批复申请之后,系统要将批复结果Email给申请人。对于大于10天的申请,如果部门主管已批准同意而上级主管还未批准,这时申请人撤销申请后,系统应发Email通知部门主管申请已撤销。请假流程建模命名规则:start.state的定义为SS;end.state的定义为ES;task.node的定义为TN:fork的定义为Fork;ioin的定义为Join;task的定义为Task;transition的定义为Tr;action的定义为Ac。 38基于JPBM丁作流引擎的OA系统设计与实现fTLCancelTN_RequestCancelTr_RequestCancel◆ITN—w—tc脚懈tTrJoinTrcancelTr_ApproveTr_NotApprove图5.9请假流程图请假流程的角色分析:(1)部门员工:员工请假,有发起请假的权限; 第五章基于JBPM流程建模的华美迅达OA系统实现39批。(2)部门主管:对员工休假进行审批,也可以提出休假申请;(3)老板:对大于lO天的员工请假进行审批,同时对部门主管的请假进行审角色有利于后面的权限划分以及流程中任务的分派,下面图5.10为它的类图。图5.10请假任务分派类类图其中BossDecideAssignmentHandler为以角色boss至U数据库中查找,找至Uuserid;CancelRequestAssignmentHandler类中撤销请假请求任务可以由请假发起人执行;ChiefDecideAssignmentHandler通过员工的userid得到员工的上级chief是谁;WriteRequestAssignmentHandler类用来获得发起申请的员工id。申请状态,系统存在一个有关申请的状态。系统用流程变量RequestState来存储。共有五个状态。存储在com.myrequest.requestState.java文件中。在用户启动请假流程,完成第一个填写请假申请的任务实例后,此状态置为REQUEST。在完成取消请求任务之后,状态改为CANCEL。等等,读者可以仔细阅读流程定义和对应的代码。要说明的是所有的状态修改都在完成任务之后的边上执行Action中来修改的。这样虽然增加了很多Action,但是状态修改明确。但对于这样的简单问题,前台代码在实际任务完整之后,就可以调用修改此状态变量。此处将这些修改都放在Action里面,也有一定演示的含义。取消请假任务说明,在fork节点后,产生两个并行分支。其中一个TN_RequestCancel任务节点包含一个Task_CancelRequestl拘任务。当此分支执行到这里时,会把这个任务分配给启动流程的用户。在流程没有结束的时候,如果用户执行这个任务,就表示用户要取消请假申请。在这个取消申请的任务会修改请假状态,在此任务结束后,就会首先到达join节点。表示取消了此次申请操作。 基T-JPBM.T作流引擎的OA系统设计与实现图5.11请假任务类类图如图5.11所示:(1)ApproveActionHandler发送邮件给申请人ILscr,告知其请假被批准;(2)老板审批类BossApproveActionHandler,BossNotApproveActionHandler两个类,分别是老板审批通过和不通过处理的actiom(3)CancelActionHandler如果取消的时候,部门主管已经批准过,那么需要给部门主管发送邮件,通知其请假已经取消:(4)ChiefApproveActionHandler和ChiefNotApproveActionHandler两个类,分别是部门主管审批通过和不通过;(5)FinishedActionHandler保存每一次员工请假的信息,无论是否批准还是取消请求;(6)NotApproveActionHandler发送邮件给申请人user,告知其请假没有被批准;(7)R镧ueStCancelActionHandlef撤销请假申请,只有两种情况下,就是部门领导没处理和boss没处理的情况下:(8)WriteLeaveActionHandler发起请假申请; 第五章基丁JBPM流程建模的华美迅达OA系统实现4l图5.12请假Decision类类图对于请假中根据请假申请天数以及是否为部门主管来判断下一步走向,主要有IsChiefHereDecisionHandler、NeedBossDecideDecisionHandlcr、DoSomethingDecisionHandler,它们必须实现DecisionHandler接口。其中IsChiem∞eDecisionHaIldle根据主管是否休假来判断流程走向,如果休假则直接去boss审批;NeedBossDecideDecisionHandler麴]断是否需要boss批准(如图5.12)。5.3.3流程测试流程的测试时一个很重要的环节,可以提早发现流程的问题。有两种测试方法:一种是带数据库实测测试,另外一种是使用内存数据库测试。可以在JBPM配置文件中进行配置。测试使用的是JUqIT4测试组件,需要将JUNIT4的JAR包引入。每个测试前都执行sctu烈)操作,这个操作用来设置流程中两个变量,一个是用户id,另外一个是部门主管是否在岗的状态。可以修改这两个参数,进行不同的测试。尤其是第二个参数,会影响流程的走向,可以分别设置为true和false以观察流程的走向和结果。对请假流程的测试:测试类包含三个测试函数,分别为testl4DayAndBossNotApprove(I)测试员工申请10天假期,部门主管批准,但老板不批准;test4D帅dCllie俄pproVe()测试员工申请10天假期,部门主管批准,(不需要老板批准);test14DayAndChiefApproveAndUserCancel0测试员工申请10天假期,部门主管批准,在老板审批前员工自己撤销申请。在报销申请流程测试类主要包含三个测试函数,分别为test1000BossNotApprove0测试报销费用大于1000而老板不通过审批;test1000FinanceNotApprove0 42基丁JPBM二T:作流引擎的OA系统设计与实现测试报销费用大于1000老板通过而财务不通过;在测试类中还有7个辅助函数。分别为:deployProcessDefinitionO流程部署createProcesslnstance0创建流程实例设置join节点的性质为Discriminator模式(参见流程定义部分)设置流程相关变量启动流程userWriteRequest(intdaycount)模拟申请员工完成TaskchiefDecide(booleanisApprove)模拟部门主管完成TaskChiefDecide任务,参数为部门主管是否批准bossDecide(booleanisApprove)模拟老板完成Task务,参数为老板是否批准.BossDecide任 userCancelO模拟申请员工完成Task_CancelRequest任务checkTasks0检查整个流程中所有的任务的相关信息checkTasksO说明checkTasksO的心是pi.getTaskMgmtlnstance0.getT嬲kInst锄ces();返回流程实例的所有任务实例列表。但要说明的是所返回的任务实例列表和当前流程执行的位置有关,在流程开始处,流程执行中间,和流程执行结束处调用得到的任务实例列表不同。列表包含已经完成的任务实例和当前任务实例。使用Junit澳1]试,达到预期的流程效果。5.3.4流程环境配置及发布流程的配置:‘(1)hibernate配置:在文件夹src/main/config-F有hibernate.c龟.xml配置文件,修改数据库连接方式为目标数据库,需要设置的有数据库连接的url,jdbc驱动,用户名,密码等。(2)JBPM配置:在文件夹src/main/config下有JBPM.cfg.xml配置文件,默认JBPM·configuration留空,会使用系统自带I拘default.jbpm.cfg.xml的配置。默认配置文件没有包括数据库、日志、消息、时间调度等功能模块,只包含了身份人中模块。是一个JBPM最 第五章基于JBPM流程建模的华美迅达OA系统实现43小使用集合。不需修改。(3)JBPM邮件配置:在文件夹src/main/config下有JBPM.mail.templates.xml配置文件,可以自定义变量,可以定义不同的通知,如针对task.assign或者task.reminder不同类型的通知,通知内容主要有actofid、subject以及text节点。其次必须在JBPM.efg.xmlq]配置JBPM.mail.smtp.host,即发信服务器:最后必须定义JBPM.mail.address.resolver,即收信人邮件地址解决类。该类需要集成AddressResolver接口,实现StringresolveAddress(Stringaaofld)方法,通过actorld获得邮件地址。最后还必须在JBPM.efg.xml中配置reSource.mail.templates,一般配鼍为JBPM.mail.templates.xml,即发邮件的模板。经过配置后,工作流系统就可以自动给task分配的人发邮件或在task-reminder中发邮件需要提醒的人员,非常便捷。(4)日志配置在文件夹src/main/config下有有109aj.properties,通过该文件可以配置日志记录规则,比较方便。(5)流程发布:工作流部署包括JBPM数据库的部署及工作流部署。(1)在mysql数据库中建3立JBPM数据库,可以执行JBPM针对mysql的数据库脚本mysql.create.sql;或者通过程序代码JBPMSessionFactory.buildJBPMSessionFaetory().getJBPMSehema0.ereateSchema0来实现工作流数据表的建立;(2)工作流定义的部署由于JBPM提供的GPD适用于JBOSS的自动部署,所以,在这里,流程定义是通过编程实现部署的。执行CommandServlet和时间调度器SchedulerServlet需要部署在web中。先获取流程定义文件,使用ProcessManager:g辱其发布出去。5.4OA中特殊流程模式工作流在企业信息自动化应用过程中,产生了一些特殊工作流程,例如:流程回退,使得不过关的工作能够返回原执行者重做;任务提醒是指在对给定的时间内用户未按规定完成相关活动,则系统自动发出催办通知;联合会签,使得多位领导能够对某一个问题作出决策;任务抄送能够完成某项工作而不用改变流程流向;动态任务中任务实例的个数需要根据实际的需要来生成。这些特殊流程问题,是工作流系统在实际应用中都需要面临的问题。JBPM可扩展的特性,在处理这些问题上有一定优势。 基于JPBMj亡作流引擎的OA系统设计与实现5.4.1任务回退模式如5.3.1节报销流程所示,在报销流程中,当报销发起人填写的报销单被主管驳回,需要重新填写,那么流程就必须回到原先的填写报销单节点处。(见图5.13)此时的回退必须满足:(a)流程必须回退到原始的任务执行者手中;(b)流程数据,相应数据都应该回滚到前一节点的状态,即数据回滚;(c)流程控制数据点必须回退到上一节点的状态;回退算法是工作流引擎中比较复杂的一部分,一般工作流不支持或只支持一级回退。如果想基于这些工作流引擎实现回退,通常方法是在上下文变量中增加一个角色流和任务流的记载,二是通过查询工作流日志,都是非常麻烦的。在JBPM中,泳道就是流程的角色,它是定义流程中的多个任务由相同参与者完成的一种机制,但是泳道也可以用于描述但任务回退。JBPM引擎对泳道的任务分配过程如下:(1)判断task属性里的swimlane实例是否存在,如果存在就会给该tasklnstanee分配swimlane指定的actorld或pooledActors;(2)如果swimlane不存在,则创建swimlane实例,调用assignmentHandler,通过代理类得銎Jactorld或pooledActors,设置task实例的用户。在第一个任务实例被指定泳道创建后,参与者将背被流程记住,以被在同一泳道中的后继任务所使用,所以泳道具有记忆功能,能够记住任务的原始执行者,并在任务再次执行时分配给原始执行者。所以需要定义两个泳道,“员工一角色泳道和“部门领导"角色泳道,并把泳道分配给任务。当给定泳道的第一个任务背创建时,泳道的AssignmentHandler将被调用,用来给任务确定一个具体的用户。给定泳道中的所有任务实例的分配都将背传播到泳道实例,这个行为是背作为默认实现的,因为获取任务进行处理的人在履行某个流程角色,因此所有后续对泳道的任务实例的分配会自动转到用户。 第五章基TJBPM流程建模的华美迅达OA系统实现45通过审批财务审批1rE:结束单图5.13简易的财务审批流程图对泳道的实现如下代码所示: 基T-JPBM.T作流引擎的OA系统设计与实现所以不论单级回退还是多级回退,主要给回退任务加上泳道,就能保证任务回到原始执行者手中,流程状态也可以回到上~节点的状态。在OA系统中,使用泳道就可以满足流程回退到原始的任务执行者手中。5.4.2提醒任务模式在财务审批中,当发起的审批12/b时内没有被处理,系统会自动给用户发任务催办通知。其实现为在流程节点上添加定时器,如下所示:任务超时时,可以通过以下方式来提示:(a)邮件提醒超时后,通过相应类获得当前任务所有者的actorId,然后通过用户管理系统获取用户的邮件信息,将流程信息作为邮件内容,向用户发送提醒邮件。(b)web页面提示web页面提示只需要记录流程实例的taskInstanceId,以及用户的actorId。超时时,只需要在任务页面显示时,将超时任务信息列出来即可。在华美讯达OA中,这两种方式结合起来使用。5.4.3会签任务模式在OA中,有些审批往往需要多个用户共同会签来决定,在财务模块表现的尤为突出。如果参加会签者都投赞成票,这表示通过,否则失败。利用会签,可以有效防止滥用职权、独断专行。会签又两种实现形式:(1)循环会签:一般工作流系统不支持任务实例在运行时动态创建,为了实现会签,做法是让流程在会签节点上循环:下列情况时,下会签结束: 第五章基丁.JBPM流程建模的华美迅达OA系统实现47(a)任何一人选择不同意,会签不通过;(b)全部选择同意;(c)会签结束后,还需要判断会签是否通过,兵选择执行路径。这种方法缺点是控制比较复杂,而且后面的会签是串行进行,有可能导致会签时间过长。(2)运用动态任务来实现会签通过动态任务也可以实现会签,这种方式比较简单,容易控制,也更符合业务流程分析模型。在流程定义中,task-node中定义一个会签任务,在流程实例的执行中,执行到会签任务节点时,会同时动态产生11个任务实例,即n个会签人员,每个用户分配一个任务,所有任务都执行完毕后,节点执行完毕,进入下一个节点。当所有参与会签的人执行完会签任务后,需要对本次会签的结果加以判断。每位会签人员需要作出同意或不同意决定,任务变量控制器除了需要包含必要的信息变量外,还需要一个boolean值用来表示同意是否。任务实例结束的时候,会判断当前会签这的选择,如果当前会签者同意会签任务,不做任何处理,会签自动结束,并选择默认的成功执行路径。如果当前会签者不同意会签,这结束所有会签,选择会签失败的路径执行,结束会签。会签任务定义时,扩充对task-end事件的响应:任务实例结束的时候,引擎会调用TaskCheckAction,TaskCheckAction的execute接口的执行逻辑如下:(1)判断当前会签的选择,如果当前会签不同意通过会签,则结束所有未完成的会签任务,并且选择执行路径为会签失败的路径执行,会签结束;(2)如果当前会签者同意会签任务,不做任何处理。如果所有任务都结束,会签自动结束,并默认选择会签成功的路径执行。task-node”主管会计复核-f贝IJ是需要进行会签的节点。在这个节点设置了几个重要的属性:1)signal=”last-wait",这个属性决定了该节点将在完成该节点内的所有Task的Tasklnstance以后才会进入下一个节点。2)create.tasks=”false",这个属性决定了在进入该节点的时候,不会自动为该节点的任何讹k创建任何的Tasklnstance。因为需要根据会签的人员来自己创建TaskInstance。5.4-4动态任务模式在会议管理中,秘书行政部安排好会议后,就需要通知与会者,在每次会议 基丁JPBMT作流引擎的OA系统设计与实现管理流程中,与会者并不确定,而是由会议发起人在指定,所以,系统需要动态的根据与会者的情况,生成会议通知任务实例,这种模式称为动态任务模式。动态任务事实上是工作流模式中的多实例模式:在一个执行流程实例中,对应同一个活动定义,同时存在多个激活的、运行中的任务实例。针对多实例活动的实例数确定及实例调度问题,从两个角度对多实例活动进行重新分类:(1)根据事例数的确定时间,可以将多实例活动分为两种:(a)建立时多实例活动,指在流程建模时确定实例数;(b)运行时多实例活动,指实例数量到运行时确定。在JBPM中,节点创建任务的方式是可以在定义节点时配置的。流程开发者可以指定任务实例的完成怎样影响流程的继续。下面是可以给任务节点的signal属性设置的值:last:这是默认值。当最后一个任务实例完成时继续执行;当在节点入口处没有任务创建时,继续执行。last.wait:当最后一个任务实例完成时继续执行:当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。first:当第一个任务实例完成时继续执行:当在节点入口处没有任务创建时,继续执行。first.wait:当第一个任务实例完成时继续执行:当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。unsynchronized:总是继续执行,不管任务是否创建和完成。never:执行不再继续,不管任务是否创建和完成。任务实例可以基于运行时的计算创建,需要添加一个ActionhandlcrcreateTasklnstance至lJ任务节点的node-enter事件,并且设置属性create.tasks=”false”,signal=”last.wait”,表示由CreateTasklnstancesAction来动态创建任务,并且节点会等待所有创建的任务执行完毕。 第五章基于JBPM流科建模的华美迅达OA系统实现49注意,进入流程节点的时候,执行ActionHandler接口的实现类ereateTasklnstance,用来动态生成TasklnstanceocreateTasklnstance实现的execute接口的执行逻辑设计如下:(1)取得所有参加会签的用户ID;(2)取得当前的任务定义;(3)为每个用户创建一个任务实例,并放入任务管理器。5.4.5抄送任务模式在财务审批中,领导审批结束,直接进入财务子流程,子流程对其申请进行自动处理,该处理不会影响后面流程,这种方式称谓抄送任务模式。常见的的是,在会议管理系统中,行政部安排了会议时间后,就需要通知与会者,这个时侯,每个与会者都会收到一份会议通知任务,但是与会者是否查看和处理这份通知,并不影响后续任务的执行。抄送的实现在其他工作流引擎中很难实现,因为这些工作流引擎对任务的处理方式是固定的,任务必须处理完毕后,流程才能继续。在JBPM中,节点创建任务的方式是可以在定义节点时配置的。流程开发者可以指定任务实例的完成怎样影响流程的继续。可以给任务节点的signal属性设置的值包括一项uIlsyIlcl啪mzed:总是继续执行,不管任务是否创建和完成。所以对于抄送任务来说,只需要在任务定义时,将任务的signal设置未llIlsvIlchro血zed,如下:5.6系统应用情况该系统采用IIlstall锄",here进行打包,将Java运行环境、tomcat服务器jmysql数据库服务器均打包为一个安装文件,极大方便了用户安装。华美迅达OAI刍2007年9月份一期开发结束,经过客户验收,已经投入到使用中。在使用过程中,受到了客户的好评,一致认为该系统功能全面,灵活度高,使用方便。 基于JPBM.T作流引擎的OA系统设计与实现5.7本章小结本章详细分析实现了基于JBPM流程建模的华美迅达OA系统实现,从流程的需求分析到模型建立,再到设计实现,详细讲述JBPMI作流在J2EEI程中的应用,最后对JBPM流程监控的实现以及和其他J2EE框架进行整合进行了详细的阐述,最后对流程进行了测试。 第入章结束语5l第六章结束语本人在攻读硕士期间,有幸进入了华美讯达深圳分公司进行实习。在实习期间有幸参加了公司的OA开发,宝盈基金公司OA的开发,中柏电脑Portal的开发。在此期间详细研究了osworkflow、JBPM工作流引擎,研究实现自定义工作流,并将其成功运用到所参与的OA项目中。论文研究期间主要做了如下几个方面的工作:1.分析了当前基于工作流的OA以及基于JBPM工作流引擎的OA特点;2.研究并学习了开源的J2EE框架,并深入研究了JBPM工作流引擎;3.设计了华美迅达OA系统,设计了通用的工作流管理平台;4.成功将工作流技术应用到所参与的华美讯达OA项目,宝盈基金项目,形成一套JBPM的包装类,极大提高JBPM使用效率,解决了OA中基于JBPM工作流引擎的特殊工作流模式的实现;5.给自定义工作流设计做好了充分的准备。本文主要的创新点:通过实际项目中对JBPM的使用,解决了基于JBPM的中OA特殊工作流的实现;总结出了一套JBPM通用的封装类,为后继J2EE项目使用工作流引擎提供了便利;通过实际项目中对JBPM的使用,总结出了JBPM工作流引擎和其他web框架的整合方法。同时存在以下问题:1.此外工作流的应用,也是随流程的复杂而日趋困难,这方面经验积累的还不够。这是我以后需要注意的地方。2.自定义工作流的实现还存在一定问题,只能达到部分自定义。 致谢致谢在我的课题和工程硕士论文完成之际,谨向在我攻读硕士学位的过程中曾经指导过我的老师,关心过我的朋友,关怀过我的领导,和所有帮助过我的人们致以崇高的敬意和深深的感谢!首先,要感谢我的学校导师田斌教授:工程硕士课题研究期间,田老师从选题、研究、设计直到撰写论文的各个阶段,都给予我耐心地指导和具体地帮助,投入了大量的精力和心血。田老师高深的学术造诣、丰富的工程经验让我感到由衷地佩服和敬仰,他严谨的治学态度、旺盛的工作热情更是时时刻刻地激励我不断努力。田老师身上所体现出的执著敬业、永不停息的奋斗精神,是我得到的最宝贵的精神财富。其次,要感谢华美讯达深圳分公司研发部总监Eric高级工程师,西安华瀛计算机信息科技有限公司的李景文社长,是他们给予了我最大的支持及关怀,在公司实习期间,正是由于他们对我的关心与指导,才使得我的课题研究和工程硕士论文能顺利完成。此外非常感谢各位老师提出的宝贵意见。衷心感谢所有关心、帮助和支持我的老师、同学和家人。 参考文献55[2】【3】[4】【5】【6】【7】【8】【9】[10】[12】参考文献胡卫军,陈传波.通用工作流管理模式的分析与研究[J】.计算机工程与应用,1999,7(3):32—34.严云涛,杨扬.工作流管理系统中的过程定义模型[J】.微机发展,1999,4(1):28.31.Theworkflowreferencemodel,theworkflowmanagementcoalitionspecification.29-Nov-1994.WFMC-T000-1003.WorkflowManagementCoalition.TerminologyandGlossary.DocumentNumberWFMC—TC-1011Issue3.0,1999,40-45.P.Grefen,K.Aberer,Y.Hoffner,H.Ludwig.CrossFlow:Cross-OrganizationalWorkflowManagementinDynamicVirtualEnterprises[J].InternationalJournalofComputerSystemsScience&Engineering,2000,15(5):277·290.WorkflowManagementCoalition.Theworkflowreferencemodel[Z].Hampshire,U.k:Winchester,1995.SUNRuizhi,SHIMeilin.Aprocessmeta—modelsupportingdynamicchangeofworkflow[J].JournalofSoftware,2003,14(1):62—67梁浩.ResearchofW曲一basedWorkflowManagementSystem[J].HighTechnologyLetters,2001,(01).罗海滨,范玉顺,吴澄等.工作流技术综述.软件学报.2000,11(7):899.907.张晓光,曹健,张申生,牟玉洁.AnExtendedPolicyLanguageforRoleResolutioninProject—OrientedWorkflow[J].JournalofShanghaiJiaotongUniversity,2004,(02).陈卓,骆婷,石磊,洪帆。PertiNet.BasedWorkflowAccessControlModel[J].JournalofShanghaiUniversity,2004,(O1).姜艺,潘燕华,葛世伦,朱俊武.PSL空间关系扩展及其在企业建模中的应用[J】.计算机应用研究,2005,(11)·[13】王文军,仲萃豪.TheDistributedWorkflowManagementSystem—FlowAgent[J].JournalofComputerScienceandTechnology,2000,(04).【14】UsingMobileAgentstoImplementWorkflowSystem[J].WuhanUniversityJournalofNaturalSciences,2004,(05).【15】张立秋,常会友,苏伟强.ERP系统可重构性的分析与控制机制[J】.计算机集成制造系统,2005,11(8):1127.1132.【16】李军怀,张彤,张景,刘海玲.一种基于XML的工作流过程定义语言研究与应用 56基TJPBM工作流引擎的OA系统设计与实现【J】.计算机工程,2005,31(15):53-54.[17】Becker.J,zurMuehlen.M.,Gille.M.WorkflowApplicationArchitectures:ClassificationandCharacteristicsofWorkflowBasedInformationSystems[A].WorkflowHandbook2002[M].2002.39-50.【18】ChristophBussler.TheRoleofB2BProtocolsinInter-EnterpriseProcessExecution[A].ProceedingsoftheWorkshoponTechnologiesforE—Services(TES2001)[C],Rome,Italy,2001,22-35.【l9】刘建勋.AnInter-enterpriseWorkflowModelforSupplyChinandB2BE-commerce[J].HighTechnologyLetters,2002,(02).【20】侯美玲.基于工作流技术的管理信息系统的开发研究[D】.太原:太原理工大学,2006,5.【21】姜新华.基于webservice的工作流引擎集成[D】.内蒙古:内蒙古大学计算机学院,2005,5.【22】李伟平.工作流管理系统的建模方法和实现技术研究[D】.中国科学院沈阳自动化研究所,2002.【23】WorkflowManagementCoalition.ReferenceModel—TheWorkflowReferenteModel.WFMC-TC-1003,Version1.1,19Jan1995.http://www.wtinc.o叫st锄dards/docs/tc003vl1.pal.【24】DavidHollingsworth,ICLA&TC.ACommonObjeaModel.WfMC-TC-1023,March1999.http://www.wfmc.org/standards/docs/TC-1022_common_ObjectModel_Paper.pdfl【25】朱瑜.工作流引擎研究与实现【D】.成都:电子科技大学,2005.1.[26】曹化工,魏末平.工作流管理系统中的版本管理应用研究.华中科技大学学报,2001,29(7):10-12.【27】汪涛,吴耿锋,黄力芹.基于工作流的企业过程的建模和仿真技术研究[J】.清华大学学报(自然科学版),2000,40(1):107-108.【28】李一江.基于.NET的工作流引擎设计与实现[D】.武汉:华中科技大学计算机应用技术,2004.[29】KarlR.P.H.Leungeta1.TheLiaisionWorkflowEngineArchitecture.1n:Procofthe32ndHawaiiInt’lConfonSystemSciences,Hawaii,Jan.1999.http://www.computer.org/proceedings/Hiccs2/.【30】冯锦峰,惠月.LotusDommo/NotesR5应用开发指南【M】.北京:北京希望出版社,2000.【31】DominoApplicationSolutionforEnterprise【M】.北京:北京希望出版社,2000.[32】冯锋,高东娟,王保保.传统办公与OAS结合的设计【J】.电子科技,1999,(17):8—9. 参考文献57[33】ErikT.Ray.LeamingXML,SecondEdition[M].0、Rcilly&Associates,September2003.[34】ChristophBussler.Enterprise—wideworkflowmanagement[J].IEEEConcurrence,July~September1999:32-43.[35】Charlie,Plesums.WorkflowintheworldofBPM[C].In:LaynaFisher,eds.WorkflowHandbook2005.Florida:FutureStrategiesInc,2005:17—22.【36】Chris,Lawrence.IntegratedFunctionandWorkflow[C].In:LaynaFischer,eds.WorkflowHandbook2005.Florida:FutureStrategiesInc,2005:31—52. 基于JBPM工作流引擎的OA系统设计与实现 作者: 刘建建 学位授予单位: 西安电子科技大学 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1668103.aspx 授权使用:北京服装学院(bjfzxy),授权号:dd8802ce-19ce-496b-847a-9dd60151bf20 下载时间:2010年8月18日
还剩57页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf