51CTO下载-jBPM44API中文整理文档_第1页
51CTO下载-jBPM44API中文整理文档_第2页
51CTO下载-jBPM44API中文整理文档_第3页
51CTO下载-jBPM44API中文整理文档_第4页
51CTO下载-jBPM44API中文整理文档_第5页
已阅读5页,还剩19页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、工作流基础础工作流相关关概念工作流(WWorkfflow),就是“业务过程程的部分或或整体在计计算机应用用环境下的的自动化”,它主要要解决的是是“使在多个个参与者之之间按照某某种预定义义的规则传传递文档、信息或任任务的过程程自动进行行,从而实实现某个预预期的业务务目标,或或者促使此此目标的实实现”。工作流管理理系统(WfMSS,Worrkfloow Maanageementt Sysstem)的的主要功能能是通过计计算机技术术的支持去去定义、执执行和管理理工作流,协协调工作流流执行过程程中工作之之间以及群群体成员之之间的信息息交互。工工作流需要要依靠工作作流管理系系统来实现现。工作流流管理系统

2、统是定义、创建、执执行工作流流的系统,应应能提供以以下三个方方面的功能能支持:定义工作流流:包括具具体的活动动、规则等等运行控制功功能:在运运行环境中中管理工作作流过程,对对工作流过过程中的活活动进行调调度运行交互功功能:指在在工作流运运行中,WWfMS与与用户(活活动的参与与者)及外外部应用程程序工具交交互的功能能。定义工作流流执行工作流流采用工作流流管理系统统的优点提高系统的的柔性,适适应业务流流程的变化化实现更好的的业务过程程控制,提提高顾客服服务质量降低系统开开发和维护护成本工作流框架架有:Jbbpm、OOSWorrkfloow、AcctiveeBPELL、YAWWL等OA(办公公自动

3、化)主主要技术之之一就是工工作流。开源工作流流jBPMM4.4介介绍jBPM 即javva Buusineess PProceess MManaggemennt,是基基于javva的业务务流程管理理系统。jjBPM是是市面上相相当流行的的一款开源源工作流引引擎,引擎擎底层基于于Actiive DDiagrram模型型。jBPPM4.44使用了hhiberrnatee(3.33.1版),因因此可以很很好的支持持主流数据据库。jBBPM4.4共有118张表。jBPM官官方主页: HYPERLINK /jbpm httpp:/g/jbppm准备jBPPM4.44环境jBPM44.4所需需环境jBPM

4、 requuiress a JJDK (stanndardd javva) vversiion 55 or highher. HYPERLINK /javase/downloads/index.jsp httpp:/javaase/ddownlloadss/inddex.jjsp To exxecutte thhe annt sccriptts, yyoulll neeed aapachhe annt veersioon 1.7.0 or hhigheer: HYPERLINK /bindownload.cgi hhttp:/g/binndownnloadd.cgii下载相关资资源jBPM下下

5、载地址: HYPERLINK /projects/jbpm/files/ httpp:/ssourcceforrge.nnet/pprojeects/jbpmm/filles/Eclippse下载载地址( Ecliipse IDE for Javaa EE Deveelopeers (163 MB),VVersiion:33.5 ): HYPERLINK /downloads/download.php?file=/technology/epp/downloads/release/galileo httpp:/wwww.eeclippse.oorg/ddownlloadss/dowwnloaad

6、.phhp?fiile=/techhnoloogy/eepp/ddownlloadss/relleasee/gallileoo安装流程设设计器(GGPD,EEclippse插件件)GPD(GGraphhicall Proocesss Dessigneer)是一一个Ecllipsee插件。安装方法说说明(jBBPM4.4Useer Guuide, 2.111.2. Insstalll thee GPDD pluugin intoo ecllipsee):Help - Insttall New Softtwaree. Clickk Addd. In diialogg Addd Sitte diia

7、logg, cllick Archhive Naviggate to iinstaall/ssrc/ggpd/jjbpm-gpd-sitee.zipp andd cliick Openn Clickking OK inn thee Addd Sitte diialogg willl brring you backk to the diallog Insttall Selecct thhe jPPDL 44 GPDD Upddate Sitee thaat haas apppearred Clickk Nexxt andd theen Fiinishh Approove tthe llicenn

8、se Restaart eeclippse wwhen thatt is askeed查看是否成成功安装了了插件:WWindoowPreefereence中中是否有JJbosss jBPPM项。在Ecliipse中中添加jPPDL4.4 Scchemaa校验流程定义文文件的xssd文件的的路径为:JBPMM_HOMME/srrc/jppdl-44.4.xxsd。添加到Ecclipsse中的方方法为(jjBPM44.4 UUser Guidde, 22.11.5. AAddinng jPPDL 44 schhema to tthe ccatallog):Clickk Winndow - Pref

9、ferennces Selecct XMML XMML Caataloog Clickk Addd The Add XML Cataalog Entrry ddialoog oppens Clickk thee buttton withh thee mapp-icoon neext tto loocatiion aand sselecct FFile Systtem In thhe diialogg thaat oppens, sellect filee jpddl-4.4.xsdd in the src direectorry off thee jBPPM innstalllatiion r

10、root. Clickk Oppen and closse alll thhe diialoggs准备jBPPM4.44的开发环环境添加jBPPM4.44的jarr包$JBPPM_HOOME/jbpmm.jarr(核心包包)JBPM_HOMEE/libb/*.jjar,不不添加以下下jar包包:serrvlett-apii.jarr, juunit.jar。其中juunit.jar一一定不要添添加,因为为是3.88.2版本本,与我们们使用的jjunitt4有冲突突。所使用的数数据库对应应的驱动的的jar包包(第2步步所添加的的jar包包中已包含含mysqql的jddbc驱动动jar包包)。添加

11、并定制制配置文件件配置文件可可以从JBBPM_HHOME/exammpless/srcc/中拷贝贝:jbppm.cffg.xmml、loogginng.prroperrtiess、jbppm.hiibernnate.cfg.xml。修改opertties中中的日志输输出级别在java.util.logging.Level的javadoc中列出了可配置的所有输出级别为(由高到低):SEVERE (highest value) WARNING INFO CONFIG FINE FINER FINEST (lowest value) 为为WARNNING: javaa.utiil.loogginng

12、.CoonsolleHanndlerr.levvel=WWARNIING修改jbppm.hiibernnate.cfg.xml中中的数据库库连接信息息。如果使使用MySSql,使使用的方言言一定要是是org.hibeernatte.diialecct.MyySQL55InnooDBDiialecct如使用MySQLDialect,就会在流程实例结束时抛异常:com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign ke

13、y constraint fails (jbpm44_20101028/jbpm4_execution, CONSTRAINT FK_EXEC_INSTANCE FOREIGN KEY (INSTANCE_) REFERENCES jbpm4_execution (DBID_)。数据库连接接编码一定定要是UTTF-8。否则可能能会在部署署含有中文文字符的流流程定义时时会抛异常常,说sqql语法错错误。说明:如果果要改变jjbpm.hibeernatte.cffg.xmml的文件件名称,需需要做:1、从JBBPM_HHOME/src/中拷贝jjbpm.tx.hhiberrnatee.cfgg.x

14、mll放到工程程的srcc/下,然然后进行修修改。2、修改jjbpm.tx.hhiberrnatee.cfgg.xmll中的hiibernnate主主配置文件件的路径配配置(指定定的是相对对于claasspaath的相相对路径)。初始化数据据库方法一:执执行sqll脚本文件件$JBBPM4.4_HOOME/insttall/src/db/ccreatte/jbbpm.*.creeate.sql方法二:使使用Hibbernaate的自自动建表,在在jbpmm.hibbernaate.ccfg.xxml中配配置:hiibernnate.hbm22ddl.autoo=upddate。核心概念与与相关

15、APPI(Servvice API)概念:Prrocesss deefiniitionn, prrocesss innstannce , exxecuttionProceess ddefinnitioonProceessDeefiniitionn,流程定定义:一个流程的的步骤说明明。如一个个请假流程程、报销流流程、借款款流程等,是一个个规则。例:Proceess iinstaanceProceessInnstannce,流流程实例:代表流程定定义的一次次执行。如张三昨天天按请假流流程请了一一次假。一一个流程实实例包括了了所有运行行阶段, 其中最典典型的属性性就是跟踪踪当前节点点的指针。Exec

16、uutionnExecuutionn,执行:一般情况下下,一个流流程实例是是一个执行行树的根节节点。 使用树状结结构的原因因在于, 这一概念念只有一条条执行路径径, 使用用起来更简简单。 业业务APII不需要了了解流程实实例和执行行之间功能能的区别。 因此, API里里只有一个个执行类型型来引用流流程实例和和执行。假设汇款和和存档可以以同时执行行,那么主主流程实例例就包含了了2个用来来跟踪状态态的子节点点:ProceessEnnginee与Serrvicee APIIConfiiguraationn与ProocesssEngiineInterractiing wwith jBPMM occcu

17、rs throough servvicess. Thhe seervicce innterffacess cann be obtaainedd froom thhe PrrocesssEnggine whicch iss buiild ffrom a Coonfiggurattion. A ProocesssEngiine iis thhreadd saffe annd caan bee stoored in aa staatic membber ffieldd.使用默认的的配置文件件(jbppm.cffg.xmml)生成成Conffigurratioon并构建建ProccessEEnginn

18、e:ProceessEnnginee proocesssEngiine = neww Connfiguuratiion().buiildPrrocesssEnggine();或是使用如如下代码获获取使用默默认配置文文件的、单单例的PrrocesssEnggine对对象:ProceessEnnginee proocesssEngiine = Connfiguuratiion.ggetPrrocesssEnggine();或是使用指指定的配置置文件(要要放到cllassPPath下下):ProceessEnnginee proocesssEngiine = neww Connfiguuratiio

19、n() .seetRessourcce(mmy-owwn-coonfiggurattion-filee.xmll) .buuildPProceessEnnginee();jBPM Servvice APIjBPM所所有的操作作都是通过过Servvice完完成的,以以下是获取取Servvice的的方式:RepossitorrySerrvicee repposittorySServiice = proocesssEngiine.gettRepoositoorySeervicce();ExecuutionnServvice execcutioonSerrvicee = pproceessEnngin

20、ee.gettExeccutioonSerrvicee();TaskSServiice ttaskSServiice = proocesssEngiine.gettTaskkServvice();HistoorySeervicce hiistorrySerrvicee = pproceessEnnginee.gettHisttorySServiice();ManaggemenntSerrvicee mannagemmentSServiice = proocesssEngiine.gettManaagemeentSeervicce();各个Serrvicee的作用:RepossitorrySer

21、rvicee管理流程定定义ExecuutionnServvice管理执行的的,包括启启动、推进进、删除EExecuutionn等操作TaskSServiice管理任务的的HistoorySeervicce历史管理(执执行完的数数据管理,主主要是查询询)IdenttitySServiicejBPM的的用户、组组管理ManaggemenntSerrviceeAPI风格格方法调用链链每一个方法法都是流程程有关的一一个业务操操作,默认认是一个独独立的事务务。查询的有关关API(风风格)功能说明相应的查询询API查询“流程程定义”ProceessDeefiniitionnQuerry proccessD

22、DefinnitioonQueery = proocesssEngiine.ggetReeposiitoryyServvice().crreateeProccessDDefinnitioonQueery();查询“执行行对象”(流程实例例)ProceessInnstannceQuuery proccessIInstaanceQQueryy = proocesssEngiine.ggetExxecuttionSServiice() /.crreateeProccessIInstaanceQQueryy();查询“任务务”TaskQQueryy taskkQuerry = /proocesssEn

23、giine.ggetTaaskSeervicce()/.crreateeTaskkQuerry();查询“执行行历史”(流程实例例历史)HistooryPrrocesssInsstancceQueery histtoryPProceessInnstannceQuuery = proocesssEngiine.ggetHiistorrySerrvicee().crreateeHisttoryPProceessInnstannceQuuery();查询“任务务历史”HistooryTaaskQuuery histtoryTTaskQQueryy = proocesssEngiine.ggetHii

24、storrySerrvicee().crreateeHisttoryTTaskQQueryy();以上列出的的Querry对象有有:ProceessDeefiniitionnQuerryProceessInnstannceQuueryTaskQQueryyHistooryPrrocesssInsstancceQueeryHistooryTaaskQuuery这些Queery对象象的使用方方法都是一一致的,如如下所示:添加过滤条条件:调用用其中的有有关方法指指定条件即即可。如:proceessDeefiniitionnQuerry.prrocesssDeffinittionKKey(请假)是指定

25、查查询keyy为”请假”的流程定定义;taskQQueryy.asssigneee(张张三)是指定办办理人为”张三”的任务。添加排序条条件:调用 xxxQuerry.orrderAAsc(ppropeerty),表示按按某属性升升序排列调用 xxxQuerry.ordeerDessc(proppertyy),表示按按某属性降降序排列可指定多个个排序条件件,就是代代表第1顺顺序,第22顺序等。属性名在各各自的Quuery对对象(接口口)中有常常量定义,如如:ProceessDeefiniitionnQuerry.PROPPERTYY_IDProceessDeefiniitionnQuerry.P

26、ROPPERTYY_KEYYTaskQQueryy.PROPPERTYY_NAMMETaskQQueryy.PROPPERTYY_ASSSIGNEEE指定分页有有关信息:调用方法xxxQueery.ppage(firsstRessult, maxxResuults);这是指定ffirstt与maxx的值(就就是Hibbernaate中的的Querry.seetFirrstReesultt()与QQueryy.settMaxRResullts())如果没有调调用这个方方法,代表表要查询出出符合条件件的所有记记录。查询得到结结果:调用方法xxxQueery.llist(); 表表示查询列列表调用方

27、法 xxQuuery.uniqqueReesultt(); 表示查询询唯一的结结果调用方法xxxQueery.ccountt(); 表示查询询符合条件件的记录数数量管理流程定定义没有更新功功能部署流程定定义注意区分DDeplooymennt与ProccessDDefinnitioon示例代码11:流程定定义有关文文件在cllassppath中中Strinng deeployymenttId = proocesssEngiine.ggetReeposiitoryyServvice().crreateeDeplloymeent().adddRessourcceFroomClaasspaath(pr

28、occess/testt.jpddl.xmml).addRResouurceFFromCClassspathh(prrocesss/teest.ppng).deplloy();示例代码22:一次添添加多个流流程定义有有关文件(要要先打成zzip包)Strinng deeployymenttId = proocesssEngiine.ggetReeposiitoryyServvice().crreateeDeplloymeent().adddRessourccesFrromZiipInpputSttreamm(zippInpuutStrream).deeployy();说明.addRResouu

29、rceFFromCClassspathh(ressourcce); 可以调用用多次以添添加多个文文件。文件件重复添加加也不会报报错。.addRResouurceFFromIInputtStreeam(rresouurceNName, inpputSttreamm)添加一一个文件(使使用InpputSttreamm).addRResouurcessFrommZipIInputtStreeam(zzipInnputSStreaam)添加加多个文件,里里面也可以以有文件夹夹。以上方法可可以在一起起调用。删除流程定定义示例代码11:删除流流程定义,如如果有关联联的流程实实例信息则则报错repossit

30、orrySerrvicee.delleteDDeplooymennt(deeployymenttId);示例代码22:删除流流程定义,并并删除关联联的流程实实例与历史史信息repossitorrySerrvicee.delleteDDeplooymenntCasscadee(depploymmentIId);查询流程定定义相关查询AAPI说明明:ProocesssDefiinitiionQuueryRepossitorrySerrvicee.creeatePProceessDeefiniitionnQuerry()示例代码11:查询所所有流程定定义/ 1,构构建查询ProceessDeefin

31、iitionnQuerry pddQuerry = proccessEEnginne.geetRepposittorySServiice() .crreateeProccessDDefinnitioonQueery()/ .orrderAAsc(PProceessDeefiniitionnQuerry.PRROPERRTY_NNAME)/.orrderDDesc(ProccessDDefinnitioonQueery.PPROPEERTY_VERSSION);/ 2,查查询出总数数量与数据据列表long counnt = pdQuuery.counnt();List llist = pddQu

32、erry.paage(00, 1000).llist();/ 分页:取出前1100条记记录/ 3,显显示结果Systeem.ouut.prrintlln(coount);for (ProccessDDefinnitioon pdd : llist) Systtem.oout.pprinttln(id= + ppd.geetId()/+ ,deeployymenttId= + ppd.geetDepploymmentIId()/+ ,naame= + ppd.geetNamme()/+ ,veersioon= + pd.ggetVeersioon()/+ ,keey= + pdd.gettKey

33、(); /示例代码22:查询所所有最新版版本的流程程定义列表表/ 1,查查询,按verrsionn升序排序序,则最大大版本排在在最后面List aall = proocesssEngiine.ggetReeposiitoryyServvice()/.crreateeProccessDDefinnitioonQueery()/.orrderAAsc(PProceessDeefiniitionnQuerry.PRROPERRTY_VVERSIION).liist();/ 2,过过滤出所有有不同Keey的最新新版本(因因为最大版版本在最后后面)Map maap = new HHashMMap();

34、/ map的的key是是流程定义义的keyy,mapp的vlaaue是流流程定义对对象for (ProccessDDefinnitioon pdd : aall) map.put(pd.ggetKeey(), pd);Colleectioon ressult = maap.vaaluess();/ 3,显显示结果for (ProccessDDefinnitioon pdd : rresullt) Systtem.oout.pprinttln(deplloymeentIdd= + pd.getDDeplooymenntId()/ + ,tt id= + pd.ggetIdd()/ 流程定定义的i

35、dd,格式:keyy-vversiion+ ,tt namme= + pdd.gettNamee()+ ,tt keyy= + pd.getKKey()+ ,tt verrsionn= + pd.getVVersiion();获取部署对对象中的文文件资源内容/ 资源源的名称,就就是 jbbpm4_lob 表中的 NAMEE_ 列表表值Strinng deeployymenttId = 900001;Strinng reesourrceNaame = teest.ppng; InputtStreeam iin = proccessEEnginne.geetRepposittorySServiic

36、e().getRResouurceAAsStrream(deplloymeentIdd, reesourrceNaame);获取流程图图中某活动动的坐标Strinng prrocesssDeffinittionIId = tesst-1; / 流流程定义的的idStrinng acctiviityNaame = sttart11; / 活活动的名称称ActivvityCCoorddinattes cc = pproceessEnnginee.gettRepoositoorySeervicce().ggetAcctiviityCooordiinatees(prrocesssDeffinittio

37、nIId, aactivvityNName);Systeem.ouut.prrintlln(xx= + c.ggetX() + ,yy= + c.ggetY() + ,wwidthh= + c.ggetWiidth() + ,hheighht= + c.getHHeighht();执行流程实实例启动流程实实例说明:流程程实例创建建后,直接接就到开始始活动后的的第一个活活动,不会会在开始活活动停留。示例代码11:使用指定定key的的最新版本本的流程定定义启动流流程实例ProceessInnstannce ppi = proccessEEnginne.geetExeecutiionSeervicc

38、e().sstarttProccessIInstaanceBByKeyy(proocesssDefiinitiionKeey);示例代码22:使用指定定key的的最新版本本的流程定定义启动流流程实例,并并设置一些些流程变量量/ 准备备流程变量量Map vvariaabless = nnew HHashMMap();variaabless.putt(申请人, 张三);variaabless.putt(报销金额, 10000.000);/ 启动动流程实例例,并设置置一些流程程变量ProceessInnstannce ppi = proccessEEnginne.geetExeecutiionSee

39、rvicce().sttartPProceessInnstannceByyKey(proccessDDefinnitioonKeyy, vaariabbles);向后执行一一步(Siignall)示例代码11:向后执执行一步,使使用唯一的的outccome离离开活动proceessEnnginee.gettExeccutioonSerrvicee().ssignaalExeecutiionByyId(eexecuutionnId);示例代码22:向后执执行一步,使使用唯一的的outccome离离开活动,并并设置一些些流程变量量Map vvariaabless = nnew HHashMMap(

40、);variaabless.putt(审批结果果, 同意);proceessEnnginee.gettExeccutioonSerrvicee().signnalExxecuttionBById(execcutioonId, varriablles);示例代码33:向后执执行一步,使使用指定的的outccome离离开活动Strinng ouutcomme= too endd1;proceessEnnginee.gettExeccutioonSerrvicee().signnalExxecuttionBById(execcutioonId, outtcomee);示例代码44:向后执执行一步,使

41、使用指定的的outccome离离开活动,并设置一些流程变量Strinng ouutcomme= too endd1;Map vvariaabless = nnew HHashMMap();variaabless.putt(审批结果果, 同意);proceessEnnginee.gettExeccutioonSerrvicee().signnalExxecuttionBById(execcutioonId, outtcomee, vaariabbles);查询任务查询个人任任务列表方式1:TTaskSServiice.ffindPPersoonalTTaskss(useerId);方式2:LLi

42、st liist = tasskSerrvicee.creeateTTaskQQueryy().assiigneee(useerId).listt();/ 显示示任务信息息for (Taskk tassk : taskkListt) Systtem.oout.pprinttln(id= + ttask.getIId()/ 任务务的id+ ,namme= + taask.ggetNaame()/ 任任务的名称称+ ,asssigneee= + taask.ggetAsssignnee()/ 任任务的办理理人+ ,creeateTTime= + taskk.gettCreaateTiime() /

43、 任务的创创建(生成成)的时间间+ ,exeecutiionIdd= + tassk.geetExeecutiionIdd();/ 任任务所属流流程实例的的id查询组任务务列表方式1: taskSServiice.ffindGGrouppTaskks(usserIdd);方式2: Listt llist = prrocesssEnggine.getTTaskSServiice()/.ccreatteTasskQueery()/.ccandiidatee(useerId)/.llist();完成任务正常完成任任务(也可可以同时设设置一些流流程变量)Strinng taaskIdd = 42000

44、01;proceessEnnginee.gettTaskkServvice().coompleeteTaask(ttaskIId);proceessEnnginee.gettTaskkServvice().coompleeteTaask(ttaskIId, ooutcoome);proceessEnnginee.gettTaskkServvice().coompleeteTaask(ttaskIId, ooutcoome, variiablees);自行控制任任务完成后后是否可向向后流转Strinng taaskIdd = 4200001;/ 1,设置为为falsse代表:办理完任任务后不向向

45、后移动(默默认为trrue)TaskIImpl taskkImpll = (TaskkImpll) prrocesssEnggine.getTTaskSServiice().gettTaskk(tasskId);taskIImpl.setSSignaallinng(faalse); / 2,办办理完任务务proceessEnnginee.gettTaskkServvice().coompleeteTaask(ttaskIId);拾取任务TaskSServiice.ttakeTTask(taskkId, userrId),拾拾取组任务务到个人任任务列表中中,如果任任务有asssignnee,则则

46、会抛异常常。proceessEnnginee.gettTaskkServvice().asssignnTaskk(tasskId, useerId),转交任任务给其他他人,(如如果任务有有assiigneee,则执行行这个方法法代表重新新分配。也也可以把aassiggnee设设为nulll表示组组任务没有有人办理了了)设置与获取取流程变量量设置流程变变量方式1:根根据 execcutioonId 设置或获获取流程变变量ExecuutionnServvice.setVVariaable(execcutioonId, namme, vvaluee);Objecct obbj = execcutio

47、onSerrvicee.gettVariiablee(exeecutiionIdd, 请请假人);方式2:根根据 taaskIdd 设置或或获取流程程变量TaskSServiice.ssetVaariabbles(taskkId, variiablees); / 一一次设置多多个变量Objecct obbj = execcutioonSerrvicee.gettVariiablee(exeecutiionIdd, 请请假人);流程变量所所支持的值值的类型(jBPMM Useer Guuide,7.2. Varriablle tyypes)7.2.Variiablee typpesjBPM su

48、ppportss folllowiing JJava typees ass proocesss varriablles:java.langg.Strring java.langg.Lonng java.langg.Douuble java.utill.Datte java.langg.Boooleann java.langg.Chaaractter java.langg.Bytte java.langg.Shoort java.langg.Inttegerr java.langg.Flooat byte (bbyte arraay) char (cchar arraay) hiberrnate

49、e enttity withh a llong id hiberrnatee enttity withh a sstrinng idd seriaalizaableFor ppersiistennce oof thhese variiablee, thhe tyype oof thhe vaariabble iis chheckeed inn thee ordder oof thhis llist. Thee firrst mmatchh willl deetermmine how the variiablee is storred. 直接结束流流程实例(自自己手工结结束)Strinng pr

50、rocesssInsstancceId = tesst.100001;proceessEnnginee.gettExeccutioonSerrvicee().endPProceessInnstannce(pproceessInnstannceIdd, PrrocesssInsstancce.STTATE_ENDEED);jBPM44.4的流流程定义语语言(设计计流程)proceess(流流程)是.jpddl.xmml的根元元素,可以以指定的属属性有:属性名作用说明name流程定义的的名称,用用于显示。key流程定义的的key,用用于查询。如未指定,则则默认为nname的的值。versiion版

51、本,如果果指定,则则不能与已已有的流程程定义的版版本重复;如未指定定,则此kkey的流流程定义的的第1个为为版本1,以以后的是版版本递增(每每次加1)Transsitioon(连线线、转移、流转)一个活动中中可以指定定一个或多多个Traansittion(SStartt中只能有有一个,EEnd中没没有)。开始活动中中只能有一一个Traansittion。结束活动中中没有Trransiitionn。其他活动中中有1条或或多条Trransiitionn如果只有一一个,则可可以不指定定名称(名名称是nuull);如果有多多个,则要要分别指定定唯一的名名称。流转控制活活动startt(开始活活动)代表

52、流程的的开始边界界,一个流流程有且只能有有一个Sttart活活动。开始始活动只能能指定一个个Trannsitiion。在在流程实例例启动后,会会自动的使使用这个唯唯一的Trransiitionn离开开始始活动,到到一下个活活动。end、eend-eerrorr、endd-canncel(结结束活动)代表流程的的结束边界界,可以有有多个,也也可以没有有。如果有有多个,则则到达任一一个结束活活动,整个个流程就都都结束了;如果没有有,则到达达最后那个个没有Trransiitionn的活动,流流程就结束束了。statee(状态活活动)功能:等待待。task(任任务活动)分配任务:actorr=#SSt

53、rinng型的变变量AssiggnmenntHanndlerr,需要在在元素素中写子元素素。指定的类要要实现AsssignnmenttHanddler接接口在其中可以以使用Asssignnablee.settAssiigneee(Strring),分配个个人任务。decission(判判断活动)1,使用eexpreessioon,如:exprr=#to statte22,使用HHandller,要要实现DeecisiionHaandleer接口3,如果同同时配置了了exprressiion与HHandller,则则exprressiion有效效,忽略HHandller。fork、joinn(分

54、支聚合活动动)这是多个分分支并行(同同时)执行行的,并且且所有的分分支Exeecutiion都到到Joinn活动后才才离向后执执行。自定义活动动(Cusstom)1,在元素素中指定cclasss属性为指指定的类。2,这个类类要实现EExterrnalAActivvityBBehavviourr接口,其其中有两个个方法:1,exxecutte(AcctiviityExxecuttion),节点的的功能代码码2,siignall(ActtivittyExeecutiion, Striing, Map),在当前前节点等待待时,外部部发信号时时的行为3,在eexecuute()方法中,可可以调用以以下

55、方法对对流程进行行控制1,AActivvityEExecuutionn.waiitForrSignnal(),在当前前节点等待待。2,AActivvityEExecuutionn.takkeDeffaulttTrannsitiion(),使用默默认的Trransiitionn离开,当当前节点中中定义的第第一个为默默认的。3,AActivvityEExecuutionn.takke(Sttringg traansittionNName),使用指指定的Trransiitionn离开4,AActivvityEExecuutionn.endd(),结结束流程实实例4,也可可以实现AActivvityB

56、Behavviourr接口,只只有一个方方法exeecutee(ActtivittyExeecutiion),这这样就不能能等待,否否则siggnal时时会有类转转换异常。事件在根元素中中,或在节节点元素中中,使用元素指定定事件,其其中eveent属性性代表事件件的类型。在中用子元元素,指定定处理的类类,要求指指定的类要要实现EvventLListeener接接口事件类型型:元元素放在根根元素()中,可可以指定eeventt为staart或eend,表表示流程的的开始与结结束。元元素放在节节点元素中中,可以指指定eveent为sstartt或end,表表示节点的的进入与离离开在Starrt节点

57、中中只有ennd事件,在在End节节点中只有有starrt事件。在元素中直直接写,就就是配置事事件。(因因为在这里里只有一个个事件,所所以不用写写on与类类型)在元素素中还可以以配置asssignn事件,是是在分配任任务时触发发的。jBPM44.4应用用与Spriing集成成(jBPPM4.44 Devveloppers Guidde, CChaptter 117. SSprinng Inntegrratioon)在jbpmm.cfgg.xmll中1,删除配配置:2,增加配配置:在appllicattionCConteext.xxml中配配置测试Testt / 测试PrrocesssEnggi

58、nepubliic vooid ttestPProceessEnnginee() ProccessEEnginne prrocesssEnggine = (PProceessEnnginee)ac.getBBean(proocesssEngiine);Asseert.aasserrtNottNulll(proocesssEngiine);注意事项如果做了JJBPM44.4与SSprinng整合(使使用了jbbpm.ttx.sppringg.cfgg.xmll),则在在程序中就就一定要使使用Sprring注注入ProocesssEngiine,千千万不能使使用Connfiguuratiion.g

59、getPrrocesssEnggine()生成PProceessEnnginee,因为这这时内部的的代码有以以下逻辑:如果整合合了Sprring但但没有ApppliccatioonConntextt,就默认认读取apppliccatioonConntextt.xmll创建ApppliccatioonConntextt实例并从从中获取名名为”ProccessEEnginne”的对象。而这时如如果把pee = CConfiiguraationn.gettProccessEEnginne()写写成某Sppringg中管理的bbean的的初始化代代码,就会有无无限循环,不不停的创建建Appllicat

60、tionCConteext了!自行控制事事务修改 jbbpm.ttx.hiibernnate.cfg.xml不让jBPPM自行管管理事务:去掉让Jbpmm使用SeessioonFacctoryy.gettCurrrentSSessiion():修改为为 配置可以使使用SesssionnFacttory.getCCurreentSeessioon(),在在jbpmm.hibbernaate.ccfg.xxml 中中配置:threead要使用同一一个SesssionnFacttory,且且都要使用用 SesssionnFacttory.getCCurreentSeessioon() 获取 SSes

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论