jbpm开发手册5841.docx

上传人:you****now 文档编号:48160277 上传时间:2022-10-05 格式:DOCX 页数:216 大小:1.42MB
返回 下载 相关 举报
jbpm开发手册5841.docx_第1页
第1页 / 共216页
jbpm开发手册5841.docx_第2页
第2页 / 共216页
点击查看更多>>
资源描述

《jbpm开发手册5841.docx》由会员分享,可在线阅读,更多相关《jbpm开发手册5841.docx(216页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第1章简介1.1.目标读者这个开发指南是为了给有经验的开发者看的, 这样就可以获得jBPM的完全的灵活性。在这个开发文档中提及的特性 可能当前不会被支持到。请自行使用。 1.2.概述述第2章 孵孵化器 解释释了最终会放放到用户手册册中的功能, 它们会成为为支持的一部部分。 要注注意孵化器中中的功能还没没有确保稳定定。 (比如如这里可能主主要的语法或或实现在下一一个版本中被被改变)。 第3章 BBPMN 22.0 介绍绍如何在jBBPM中使用用BPMN 2.0流程程语言。 第5章 流流程虚拟机 到 第9章 高级图形形执行 解释释了jBPMM的核心,流流程虚拟机(PPVM),活活动和事件监监听器

2、是如如何建立在它它上面的。 第10章 配置 到 第18章 Signnavio web建模模器 解释了了jBPM框框架的高级用用法。 1.3.源代代码和WIKKIjBPM的源代代码可以在我我们的SVNN获得:https:/anonnsvn.jjboss.org/rrepos/jbpm/jbpm44/ 这里有一篇关于于如何构建源源代码的wiiki:http:/www.jjboss.org/ccommunnity/ddocs/DDOC-122867 jBPM的WIIKI地址在在:http:/www.jjboss.org/ccommunnity/ddocs/DDOC-111184 1.4.Maaven

3、仓库库你可以使用发布布包中包含的的jBPM和和对应的依赖赖库。发布包包中的jbppm.jarr 包含了许许多jBPMM模块中的泪泪:jbpmm-api, jbpmm-log, jbpmm-testt-basee, jbppm-pvmm, jbppm-jpddl和jbppm-entterpriise。 所所以单独使用用发布包中的的jbpm.jar 不不会在编译时时区分APII类和实现类类。 如果你你想只依赖jjBPM的AAPI,来构构建一个自己己的工程, 可以直接使使用我们的仓仓库。它的地地址在: hhttp:/repoositorry.jbooss.coom/mavven2/oorg/jbbp

4、m/jbbpm4/ 1.5.依赖赖库如果你想在自己己的项目中安安装或部署jjBPM,现现在也比以前前方便了很多多: 只需要要把正确的jjar放到系系统的claasspatth下。 我我们还没有清清理maveen pomm文件中的依依赖描述。所所以我们还不不能给出liib 目录下下,你需要包包含到应用中中的,jarr的最小集合合。 (参考考Jira issuee JBPM-22556 然然后进行投票票,如果你希希望让我们知知道这些问题题对你优先级级很高)。 依赖库的版版本放在liib,是我们们测试过的。 所以我们推推荐你使用llib目录下下的依赖版本本。 为了在在这方面帮助助你,这里有有一个jP

5、DDL当前所用用的maveen依赖的列列表: INFO -INFO Buildding jjBPM 44 - jPPDLINFO taask-seegmentt: deependeency:ttreeINFO -INFO depeendenccy:treeeINFO org.jjbpm.jjbpm4:jbpm-jpdl:jar:44.0INFO +- orrg.jbppm.jbppm4:jbbpm-pvvm:jarr:4.0:compiileINFO | +- org.jbpm.jbpm44:jbpmm-api:jar:44.0:coompileeINFO | | - jjboss:jboss

6、s-j2eee:jar:4.2.22.GA:ccompilleINFO | +- org.jbpm.jbpm44:jbpmm-log:jar:44.0:coompileeINFO | +- org.jbpm.jbpm44:jbpmm-testt-basee:jar:4.0:ccompilleINFO | | - oorg.hiibernaate:hiibernaate-coore:jaar:3.33.1.GAA:comppileINFO | | +- anttlr:anntlr:jjar:2.7.6:ccompilleINFO | | - commmons-colleectionns:comm

7、mons-colleectionns:jarr:3.1:compiileINFO | +- org.apachhe.antt:ant:jar:11.7.0:compiileINFO | | - oorg.appache.ant:aant-laauncheer:jarr:1.7.0:commpileINFO | +- log44j:logg4j:jaar:1.22.14:ccompilleINFO | +- juell:juell:jar:2.1.00:comppileINFO | +- juell:juell-impll:jar:2.1.00:comppileINFO | +- juell:j

8、uell-engiine:jaar:2.11.0:coompileeINFO | +- org.slf4jj:slf44j-apii:jar:1.5.22:comppileINFO | +- org.slf4jj:slf44j-jdkk14:jaar:1.55.2:coompileeINFO | +- org.jbosss.idenntity.idm:iidm-coore:jaar:1.00.0.Beeta1:ccompilleINFO | | +- oorg.jbboss.iidentiity.iddm:idmm-commmon:jaar:1.00.0.Beeta1:ccompilleINF

9、O | | +- oorg.jbboss.iidentiity.iddm:idmm-api:jar:11.0.0.Beta11:comppileINFO | | +- oorg.jbboss.iidentiity.iddm:idmm-spi:jar:11.0.0.Beta11:comppileINFO | | - ccom.suun.xmll.bindd:jaxbb-impll:jar:2.1.88:comppileINFO | | - javvax.xmml.binnd:jaxxb-apii:jar:2.1:ccompilleINFO | | - javaxx.xml.streaam:sta

10、ax-apii:jar:1.0-22:comppileINFO | +- org.jbosss.idenntity.idm:iidm-hiibernaate:jaar:1.00.0.Beeta1:ccompilleINFO | | +- jjavasssist:jjavasssist:jjar:3.4.GA:compiileINFO | | +- oorg.hiibernaate:hiibernaate-cgglib-rrepackk:jar:2.1_33:comppileINFO | | - oorg.sllf4j:sslf4j-log4jj12:jaar:1.55.2:coompileeI

11、NFO | +- org.hiberrnate:hiberrnate-entittymanaager:jjar:3.4.0.GGA:commpileINFO | | +- oorg.hiibernaate:ejjb3-peersisttence:jar:11.0.2.GA:coompileeINFO | | +- oorg.hiibernaate:hiibernaate-coommonss-annootatioons:jaar:3.11.0.GAA:comppileINFO | | +- oorg.hiibernaate:hiibernaate-annnotattions:jar:33.4.0

12、.GA:coompileeINFO | | +- ddom4j:dom4jj:jar:1.6.11:comppileINFO | | | - xmll-apiss:xml-apis:jar:11.0.b22:comppileINFO | | - jjavax.transsactioon:jtaa:jar:1.1:ccompilleINFO | +- org.livettribe:livettribe-jsr2223:jarr:2.0.5:commpileINFO | - javaax.maiil:maiil:jarr:1.4.1:commpileINFO | - jjavax.activvat

13、ionn:actiivatioon:jarr:1.1:compiileINFO +- juunit:jjunit:jar:33.8.1:compiileINFO - hssqldb:hsqlddb:jarr:1.8.0.7:ttestINFO -jboss的iidm依赖在在 org.jbosss.idenntity.idm:*部分,可以以忽略, 包包含org.hiberrnate:hiberrnate-entittymanaager这个列表应该已已经让你开始始选择一个子子集,而不是是从 $jjbpm.hhome/lib目录录下包含所有有依赖库。 第2章孵孵化器这一章介绍了一一些更高级的的jPD

14、L的的活动和功能能, 这些功功能还在开发发中。意味着着这些jPDDL的功能和和活动现在还还没有被支持持。 但是它它们可以让你你尝试使用一一下。 我们们不会为这些些活动和功能能提供已经稳稳定的保证。 所以要自己己承担风险。 2.1.tiimer定时时器 重要提示:定时时器会被修改改,在它们放放到用户手册册之前。 参参考 htttps:/jira.jbosss.org/jira/browsse/JBPPM-23229 一个定时器可以以被指定在ttransiition元元素中 在等等待活动比如如statee, taskk,sub-pprocesss 和grouup中。 当当这个定时器器被触发,那那个

15、流向就会会被执行。 一个定时器可以以被指定在自自定义事件中中,在等待或或东西 比如如statee, taskk,sub-pprocesss 和grouup中。 timmer元素应应该是on元素表示示的事件的第第一个元素。 在这里,事事件根据定时时器的持续时时间被触发。 当进入这个活动动时定时器被被创建。 定定时器可以触触发当流程一一直处于这个个活动,直到到duedaate。 当当流程离开活活动,定时器器就会被取消消。 表2.1.timerr属性:属性类型默认值是否必填描述duedatee持续时间表达式式必填指定什么时候定定时器需要触触发。 比如如:20分钟钟或 3个工作作日。 repeat持续

16、时间表达式式optionaal当定时器触发,这这个属性指定定什么时候定定时器需要再再次触发。 比如:200分钟或 3个工作作日。 2.1.1.持续时间表表达式持续时间表达式式包含下列语语法:quantitty buusinesss ssecondd | seecondss | miinute | minnutes | hhour | hourrs | dday | days | weeek | wweeks | monnth | monthhs | yyear | yearrs这里的quanntity是是一个正整数数。 添加额外的buusinesss意味着 只有工作时时间应该被计计算在持续时时

17、间内。 如如果没有指定定businness,持持续时间会使使用绝对时间间间隔。 关关于如何配置置工作时间的的解释在第2.1.22节 “工作日历”。 2.1.2.工作日历默认的配置会包包含对 jbbpm.buusinesss.callendarr.xml文文件的引用。 那包含了一一个工作时间间的配置,向向下面的配置置格式: 如果默认的工作作日历实现能能够满足你, 你可以直接接在xml配配置里像上面面那样调整时时间。 如果默认实现没没有覆盖你的的用例,你可可以简单重写写自己的实现现 通过实现现 org.jbpm.pvm.iinternnal.caal.BussinesssCalenndar接口口。

18、 比如: public classs CusttomBussinesssCalenndar iimplemments BusinnessCaalendaar publiic Datte addd(Datee datee, Strring dduratiion) if (my next birthhday.equalls(durrationn) GGregorrianCaalendaar greegoriaanCaleendar = neww GreggoriannCalenndar(); ggregorrianCaalendaar.sett(Caleendar.MONTHH, Callenda

19、rr.JULYY); ggregorrianCaalendaar.sett(Caleendar.DAY_OOF_MONNTH, 221); rreturnn greggoriannCalenndar.ggetTimme(); retturn nnull; 如果希望配置jjBPM引擎擎使用自定义义工作日历, 只需要在你你的jbpmm.cfg.xml中添添加如下配置置: 看一下这个 oorg.jbbpm.teest.cuustombbusineesscallendarrimpl.CustoomBusiinessCCalenddarImpplTestt 可以获得得更多信息。 2.1.3.定时器流向向

20、例子 org.jbpm.exampples.ttimer.transsitionn.TimeerTrannsitioonTestt 展示如何何把一个定时时器放到流向向上。图2.1.定时器流向向示例流程 当这个流程的一一个流程实例例被启动, 它会到达gguardeedWaitt状态。 在在那时候,一一个定时器会会被创建,在在十分钟后触触发。 Executiion prrocesssInstaance = execcutionnServiice .starttProceessInsstanceeByKeyy(TimmerTraansitiion);和下面的queery,我们们可以为定时时器查询关联

21、联的流程实例例。 我们知知道这里应该该有一个对应应的这样的定定时器。 Job jobb = maanagemmentSeervicee.creaateJobbQueryy() .timerrs() .proceessInsstanceeId(prrocesssInstaance.ggetId() .uniquueResuult(); 在一个单元测试试中,我们不不会使用JoobExeccutor来来执行定时器器。 相对的的,我们在单单元测试的线线程中直接执执行定时器。 那样很简单单在流程中模模拟一个场景景。 所以在下一步,我我们假设定时时器被处罚了了。 我们通通过编码执行行定时器进行行模拟: m

22、anagemmentSeervicee.execcuteJoob(jobb.getDDbid();在那之后,流程程实例会进入入timeoout流向 并移动到eescalaation状状态。 processsInstaance = execcutionnServiice.fiindExeecutioonByIdd(proccessInnstancce.gettId();assertEEqualss(esccalatiion, proceessInsstancee.getAActiviityNamme();TimerTrransittionTeest的第二二个场景展示示了定时器被被取消, 这这里执

23、行siingal go onn,在定时器器触发之前。 这种情况,流流程会在 nnext sstep结束束。 2.1.4.定时器事件件示例TimerrEventtTest展展示了如何把把定时器放到到自定义事件件中。图2.2.定时器事件件示例流程 这里,如果流程程没有在开始始以后10分分钟内执行ssingall, 事件ttimeouut就会被触触发 事件监监听器orgg.jbpmm.exammples.timerr.evennt.Esccalatee 将被触发发。 再一次,如果gguardeedWaitt活动在100分钟内被结结束, 然后后定时器就会会被取消, Escallate事件件监听器也不不

24、会执行。 2.1.5.定时器工作作时间示例TimerrBusinnessTiimeTesst展示工作作定时器如何何工作。图2.3.定时器工作作时间示例流流程 试想一个新的TTimerBBusineessTimme流程实例例在周二的上上午11:330启动。 默认配置好好的工作日历历指定工作时时间在9:000-12:00和122:30-117:00。 所以9个工工作小时以后后, 结果的的真实持续时时间是周三的的下午13:00。 当我们不知道什什么时候TiimerBuusinesssTimeeTest将将执行时,我我们只能在测测试里验证 真实的计划划定时器的持持续时间最少少是24小时时以上。 2.1

25、.6.定时器重复复示例TimerrRepeaatTestt展示了如何何把定时器重重复执行。 定时器里的的repeaat属性将导导致定时器重重新自动安排排 在它执行行以后。 图2.4.定时器重复复示例流程 当启动一个新流流程,一个定定时器被创建建,持续时间间是20分钟钟。 当定时时器触发,在在10秒之内内一个新定时时器会被创建建。 当定时时器触发,在在10秒之内内一个新定时时器会被创建建。 一直这这样持续着。 每次定时器触发发。新定时器器就会被创建建,直到 gguardeedWaitt状态活动被被signaal结束。 当guarrdedWaait 状态态活动结束, 定时器就就会被取消。 2.2.

26、grroup活动动group会包包括流程中的的一系列活动动。包含的组组必须是被内内嵌的。 一一个组就对应应着一个BPPMN的子流流程。 表2.2.groupp元素:元素数目描述any acttivityy0.*包含的活动。 transittion0.*对于groupp活动的向外外转移。 2.2.1.简单grouup这个实例场景演演示了一个ggroup的的基本操作。 图2.5.简单grooup实例流流程 下面的代码片段段展示了一个个测试环境, 当第一次到到达colllect ffeedbaack时,会会拒绝一个文文档。 然后后它会到达uupdatee docuument, disttributt

27、e doccumentt 然后返回回colleect feeedbacck。 第二二次,它会被被接收。所有有调用的活动动都是等待sstate。 ProcesssInstaance pprocesssInsttance = exeecutioonServvice .starrtProccessInnstancceByKeey(GrroupSiimple);String pid = proccessInnstancce.gettId();assertEEqualss(disstribuute doocumennt, pprocesssInsttance.getAcctivittyNamee();p

28、rocesssInstaance = execcutionnServiice.siignalEExecuttionByyId(piid);assertEEqualss(colllect feedbback, proccessInnstancce.gettActivvityNaame();processsInstaance = execcutionnServiice.siignalEExecuttionByyId(piid, rrejectted);assertEEqualss(upddate ddocumeent, proceessInsstancee.getAActiviityNamme()

29、;processsInstaance = execcutionnServiice.siignalEExecuttionByyId(piid);assertEEqualss(disstribuute doocumennt, pprocesssInsttance.getAcctivittyNamee();processsInstaance = execcutionnServiice.siignalEExecuttionByyId(piid);assertEEqualss(colllect feedbback, proccessInnstancce.gettActivvityNaame();proc

30、esssInstaance = execcutionnServiice.siignalEExecuttionByyId(piid, aapprovved);assertEEqualss(pubblish documment, proccessInnstancce.gettActivvityNaame();2.2.2.groupp定时器图2.6.groupp定时器实例例流程 下面的代码片段段演示了一个个测试场景,定定时器会在eevaluaate doocumennt 这个ggroup活活动完成的时时候触发。 ProcesssInstaance pprocesssInsttance = exeecutioonServvice .starrtProccessInnstancceByKeey(GrroupTiimer);Executiion appproveeExecuution = proocessIInstannce .finddActivveExeccutionnIn(aapprovve);assertNNotNulll(appproveEExecuttion);List joobs = managgementtServiice .creaateJobbQ

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 电力管理

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁