jbpm工作流全程笔记_第1页
jbpm工作流全程笔记_第2页
jbpm工作流全程笔记_第3页
jbpm工作流全程笔记_第4页
jbpm工作流全程笔记_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、蔼1. 工作流版拌 工作流皑皑(Workfl版版ow):就是自自皑动运作的业务过过埃程部分或整体,邦邦表现为参与者对对按文件、信息或任任拔务按照规程采取取拜行动,并令其在在跋参与者之间传递递百。简单地说,工工搬作流就是一系列列袄相互衔接、自动动百进行的业务活动动疤或任务。工作流流板是针对工作中具具矮有固定程序的常常瓣规活动而提出的的办一个概念。通过过啊将工作活动分解解搬成定义良好的任任埃务、角色、规则则靶和过程来进行执执肮行和监控,达到到俺提高生产组织水水八平和工作效率的的盎目的。罢白 工作流流笆就是工作流程的的氨计算机化,即将将败工作流程中的工工敖作如何前后组织织胺在一起的逻辑和和巴规则在计

2、算机中中艾以恰当的模型进进熬行表示并对其实实胺施计算。工作流流肮要解决的主要问问挨题是:为实现某某挨个业务目标,在在办多个参与者之间间鞍,利用计算机,艾艾按某种预定规则则斑自动传递文档、背信息或者任务。案案颁 通俗的的版说,就是多个人人哀在一起合作完成成搬某件事情。扒懊 工作流流捌可实现业务或公公艾文的申请、审批批芭、会签、登记、按操作等环节的管管按理,可将工作过过熬程进行记录,便便盎于日后检查。并并阿实现数据的规范范案化录入、查询、笆统计和存档。O半半A(办公自动化化佰)主要技术之一一吧就是工作流。半2. 工作流管罢理系系统(Wor扮kflow M鞍鞍anageme懊懊nt Syst耙耙em

3、, WfM挨挨S)按埃 主要功功耙能是通过计算机机鞍技术的支持去定定盎义、执行和管理理捌工作流,协调工工般作流执行过程中中霸工作之间以及群群胺体成员之间的信信版息交互。工作流流半需要依靠工作流流矮管理系统来实现现吧。懊矮 工作流流叭管理系统是定义义敖、创建、执行工工奥作流的系统,应应蔼能提供以下三个个败方面的功能支持持把:埃疤版 定义工作流:颁包括具体的活动动靶、规则等;吧艾熬 运行控制功能能哀:在运行环境中中挨管理工作流过程程矮,对工作流过程程艾中的活动进行调调疤度;扒稗拜 运行交互功能能八:指在工作流运运俺行中,WfMS袄袄与用户(活动的的案参与者)及外部部胺应用程序工具交交白互的功能。俺

4、3. JBPM柏,全全称是Jav矮a Busin拔拔ess Pro班班cess Ma吧吧nagemen暗暗t爸 JBP岸岸M是一种基于J挨挨2EE的轻量级级昂工作流管理系统统百,jBPM是公公搬开源代码项目,碍碍 官方主页为: HYPERLINK /jbossjbpm 氨http:/阿www.jbo挨挨/哎jbossjb霸霸pm岸 Jbp隘隘m的使用班* 步骤胺* 编写流程定定疤义(定义规则)罢罢;霸* 部署流程定定拔义到系统中;背* 执行流程(哎哎使用指定的流程程吧定义);熬i。肮背 编写流程定义耙举例例:员工报销昂费用的流程描述述半:员工需要先填填哀写报销单据;交交啊给其经理进行审审哎批;

5、审批(通过过鞍)后到财务去领领扳款。芭z。败以上流程由三个翱步骤骤组成,每个按步骤即是一个任任盎务,分别由一个个耙角色执行。应该该办使用jBPM提提哀供的JPDL(埃埃jBPM Pr按按ocess D靶靶efiniti啊啊on Lang隘隘uage)来描描袄述这个流程,这这熬样使用了jBP啊啊M的系统才能看看八的懂。氨x。扮jPDL:是一爸种直直观的流程语佰言,可以使用任任般务、等待状态、阿定时器、自动化化摆动作等等图形化化鞍地表示流程。j颁颁PDL认为一个个暗商务流程可以被被半看作是一个UM埃埃L状态图。背jPDL就是详详芭细定义了这个状状澳态图的每个部分分摆,如起始、结束束拔状态,状态之间

6、间跋的转傲换等。(就是写写皑一个xml文件件般)唉I。耙扮 使用 jbp扮m 提供的 j斑bpm con按按sole we氨氨b 应用程序测测柏试/使用流程拜jBPM Co佰佰nsole w拔拔eb 是由 j版版BPM 提供的的翱一个web应用用氨。它是一个管理理捌和监控流程的控控八制台,用于检查查拔和操纵运行的流流耙程实例。癌k。扒双击 serv把er/star俺t.bat 启启扮动jbpm提供供隘的jboss服服邦务器,要访问地地罢址为:http绊绊:/loca鞍鞍lhost:8瓣瓣080/jbp伴伴m-conso胺胺le/办2。斑部署流程定义到俺 jbpm-c蔼onsole 扳中时的注意

7、事项项傲:耙A)要求流程定定哎义文件的名字为为暗process胺胺definit岸岸ion.xml扮扮,并且在一个z巴巴ip压缩文件的的敖根目录中;熬B)存放流程定定癌义的zip文件件板所在的路径中不不八能含有中文(因因安为jbpm-c办办onsole应应颁用没有处理中文文百)。叭z。版凹 执行流程坝部署流程程定义后背,就可以使用这这瓣个流程定义了(稗稗执行流程)。在在稗开始一个流程后后扮,要先进入到 盎tokens 百页面中点击 S岸岸ignal 链链扒接,这样才能使使袄流程离开开始状状叭态,以后的步骤骤疤中都不需再做这这伴个操作。当流程程奥执行到有任务的的白节点时,就可以以瓣看到当前节点中

8、中挨定义的任务了。熬熬任务的办理分为为瓣两步:开始和结结跋束。吧* 流程实例通通埃过Token的的熬维护当前正在执执拔行的节点胺Jbpm是怎么么凹知道一个流程实实邦例现在走到哪个个岸节点了呢?每个个暗流程实例都有一一办个指针,指向当当罢前正在执行的节节扒点,在当前节点点埃执行完后,到达达扒了下一个节点,版版就是让这个指针针把指向下一个节点点澳。这个指针叫做做鞍Token(也也绊叫做令牌)。袄Y。吧Token是运矮行时时的概念,用靶来维护指向图结结捌点的指针。To氨氨ken需要一个个摆信号(sign皑皑al)来让流程程捌向前执行。当一一扳个signal凹凹来到的时候,T百百oken就会通通岸过t

9、ransi啊啊tion离开当当啊前的结点走到下下瓣一个结点。拌M。吧4. jBPM芭提供供了一个图形霸化的流程设计器器巴,是一个ecl背背ipse插件。扒扒 使用插插岸件设计流程定义义邦还可以生成图片片扒,这样就可以实实拔现流程的图形化化捌监控。伴t。八 使用插袄件设设计完流程定瓣义并保存后,会会罢有三个文件:A安安)proces氨氨sdefini艾艾tion.xm白白l,流程定义文文瓣件;B)pro蔼蔼cessima捌捌ge.jpg,哎哎流程图片;C)按按gpd.xml版版,保存流程图片片埃中的各个节点的的澳坐标信息。斑Y。芭 插件安阿装方方法:在Ec芭lipse安装装坝目录下的lin扮扮k

10、s目录中新建建颁一个文本文件,哎哎把扩展名改为.笆笆link,并且且啊修改内容为pa胺胺th=$插件件霸中的eclip案案se文件夹所在在板的路径。吧R。盎 使用插俺件时时会遇到的几跋个问题啊矮 插件在ecl傲傲ipse3.3绊绊的版本上才能正正颁常工作,所以m哎哎yeclips阿阿e5.1(ec挨挨lipse3.扳扳2)不能使用这这岸个插件。耙B。吧懊 安装插时,如笆果 Mysec板lipse安装装隘目录下的ecl斑斑ipse目录中中挨没有links芭芭目录,可以手工工哀创建一个。还要要凹注意指定的插件件昂的路径中不能含含岸有中文。熬u。巴熬 使用插件设计肮流程程定义时,如拔果再点击插件下下

11、靶方的 Sou柏柏rce 选项项氨卡修改生成的p斑斑rocessd柏柏efiniti坝坝on.xml,艾艾会出现突然少了了芭一些内容或多出出疤一些内容等情况况白,这是插件的问问盎题。如果想修改改拌流程定义源文件件耙,可以使用普通通翱的xml编辑器器半打开进行修改,八八方法是在文件上上按点击右键 -拌 Open W爸爸ith - 般MyEclip碍碍se XML 翱Editor。搬搬g。昂八 如果节点的名靶字中中有中文,则斑生成的gpd.癌癌xml中的节点点肮名字会出现乱码码霸,这会导致不能能搬正确的进行图形形按化监控。修正方方阿法:在部署流程程凹定义前把gpd吧吧.xml文件的的拜编码改为GB

12、K拜拜(改为本地编码码懊,也要修改xm白白l文件中的en扮扮coding的的奥值为GBK)。斑斑要注意如果修改改背并保存了一下流流爸程定义,就会重重凹新生成proc肮肮essimag暗暗e.jpg和g跋跋pd.xml文文埃件,这时gpd疤疤.xml中的e靶靶ncoding八八又变成了UTF绊绊-8,应再改为为哀GBK。(这是是扳一个Bug)。傲傲d。绊今天,在课堂上霸,汤汤阳光老师教稗我们大家熟悉了了昂Jbpm,并实实皑现了一个简单的的傲办公流程事例,板板以下是课堂总结结柏和相关实现代码码般。凹c。阿1. 概念案 流程定颁义:预先定义的的安业务流转逻辑。按 流程实半例(proce百ss ins

13、t佰佰ance):业业唉务的一次实际流流扒转过程。(是流流扮程定义执行期间间班的体现,包含了了靶流程定义被解释释板之后的一些信息息版,诸如开始时间间柏、结束时间和其其案他相关联的信息息奥)。斑m。疤 任务实蔼例(task 邦instanc蔼蔼e): 组成流流靶程实例的元素。扒扒(Task被解解巴释执行时的信息息哀,碍有开始时间、结结凹束时间、参与者者埃等,有crea拜拜te、star霸霸t、end 三三斑种状态)。瓣T。班2. 搭建环境拌:敖敖* Jbpm的的敖API:爸流程有关的所有有耙信息都是要保存存败到数据库中的。案案jBPM的其中中俺一个特色就是它它佰使用Hiber盎盎nate来管理理

14、坝它的数据库。这这白样,jBPM就就岸将数据的管理职职皑能分离出去,自自巴己则专注于商务务鞍逻辑的处理。摆 添加j疤疤ar包:熬袄jbpm-jp爸爸dl.jar(班班核心);安半jbpm-id疤疤entity.百百jar(可选,爸爸组织机构);百皑bsh.jar搬搬(BeanSh扮扮ell脚本);颁班jboss-j半半2ee.jar碍碍;矮I。扒板hiberna扮te3.jar板板(Hibern靶靶ate);板皑antlr-2瓣瓣.7.6.ja懊懊r(Hiber板板nate);哀拔asm.jar俺俺(Hibern蔼蔼ate);爸唉cglib.j拔拔ar(Hibe熬熬rnate);傲澳dom4j

15、.j败败ar(Hibe氨氨rnate);搬败commons板板-collec安安tions.j斑斑ar(Hibe昂昂rnate);哀半commons白白-loggin癌癌g.jar(H凹凹ibernat皑皑e);拌4。芭奥hsqldb.扮jar(可可选,办纯Java写的的啊数据库);耙叭log4j.j把把ar(可选,日日氨志记录);胺0。哀奥Junit4(邦单元元测试);芭 添加配皑置文文件(在jb蔼pm-jpdl班班-3.2.2/俺config目目摆录中):唉办jbpm.cf板板g.xml;斑暗hiberna捌捌te.cfg.百百xml;半颁log4j.p啊啊roperti耙耙es(可选,l

16、伴伴og4j配置文文俺件);碍修改数据库库连连笆接信息,如果使使扳用的不是Hsq埃埃lDB数据库,稗稗还应添加相应的的版jdbc驱动。斑斑我们选用mys蔼蔼ql数据库驱动动扳mysql-c稗稗onnecto背背r-java-胺5.1.7-b鞍鞍in.jar。背背w。扒 生成数半据库库表。笆选用单元测试的的熬方式生成数据库库扒表,以下是测试试蔼类代码:澳public 班void cr邦邦eateSch摆摆ema() 般癌/ 读取配置置罢文件并创建数据据拔库奥傲new Con柏柏figurat佰佰ion().c唉唉onfigur哀哀e().bui靶靶ldSessi跋跋onFacto拌拌ry();瓣

17、凹r。斑3. 编写流程瓣定义义阿员工报销,由其其盎经理审批。审批批昂通过后,此员工工按到财务去领款,隘隘流程结束;如果果熬未经理审批通过过半,流程结束。经经罢理在审批的时候候唉应能看到这个员员拔工要报销的金额额傲,拜根据金额做出是是扳否通过的决定。蔼蔼e。版* 编程步骤,艾要实实现的功能有氨:凹绊a 部署流程程傲定义。哎蔼b 启动流程程版。岸疤c 获取任务务碍列表。班俺d 开始任务务鞍。岸斑e 结束任务务肮。背鞍其中编写流程定定八义和步骤a是添添板加流程定义到系系氨统中;步骤b,啊啊c,d,e是使使伴用系统中存在的的岸某个流程定义执执扒行流程;步骤c癌癌,d,e是办理理伴一个任务的过程程百,流

18、程的执行就就熬是一次次办理任任邦务的过程。袄扒有两个重要的类类扮:JbpmCo跋跋nfigura柏柏tion和Jb盎盎pmConte扳扳xt。Jbpm颁颁Configu摆摆ration是是搬jBPM的相关关拌配置信息,并有有埃创建JbpmC阿阿ontext的的白功能,可以把J哎哎bpmConf摆摆igurati澳澳on想像成Hi懊懊bernate颁颁中的Confi颁颁guratio按按n与Sessi奥奥onFacto哎哎ry的结合体。拜拜使用JbpmC摆摆onfigur拌拌ation.g爸爸etInsta斑斑nce()方法法岸创建一个Jbp斑斑mConfig瓣瓣uration稗稗对象,这会使用

19、用肮默认的jbpm巴巴配置文件:在c般般lasspat板板h根目录中,并并半且名字为jbp耙耙m.cfg.x柏柏ml。或者是使使坝用getIns碍碍tance(S俺俺tring c靶靶onfigFi靶靶lePath)耙方法,用指定的的瓣配置文件构造。拌拌跋Jbpm中几乎乎哎所有的操作都是是佰通过JbpmC拌拌ontext完完颁成的,可以把他他扒想像成Hibe罢罢rnate中的的疤Session俺俺。他是通过Jb凹凹pmConfi般般guratio氨氨n.creat袄袄eJbpmCo绊绊ntext()邦方法创建的,J唉唉bpmCont盎盎ext中包装有有傲一个Hiber八八nate的Se绊绊ss

20、ion(通通伴过他做的数据库库岸操作)。使用完完癌JbpmCon芭芭text后一定定凹要调用他的cl案案ose()方法法凹,否则所有信息息笆都不会持久化到到稗数据库当中。因因霸为在调用Jbp傲傲mConfig靶靶uration瓣瓣.create肮肮JbpmCon坝坝text()方方拜法时会创建一个个盎Hiberna蔼蔼te的Sess凹凹ion并开始事事肮务;在调用Jb岸岸pmConte扒扒xt.clos癌癌e()方法时会会绊提交事务并且关关傲闭所关联的Se绊绊ssion。如如邦果在执行Jbp绊绊mContex爸爸t.close啊啊()之前调用方方暗法jbpmCo背背ntext.s俺俺etRol

21、lb颁颁ackOnly氨氨(),则在Jb俺俺pmConte扳扳xt.clos唉唉e()时会回滚滚阿事务。氨s。暗4. 部署流程盎定义义吧这个过程就是把把艾流程定义的相关关扒信息保存到jB暗暗PM的数据库中中阿。拔w。笆解析流程定义大板致有有三种方式,疤所使用的方法都都胺在Proces挨挨sDefini般般tion中,并并啊且都是stat稗稗ic的:斑3。哎1)parse班XmlReso扳扳urce,pa癌癌rseXmlI澳澳nputStr按按eam和par白白seXmlRe罢罢ader,是解解袄析一个xml的的澳流程定义文件;疤B。搬2)parse拔XmlStri肮肮ng,是解析一一唉个字符串

22、;板3)parse拜ParReso霸霸urce与pa搬搬rseParZ佰佰ipInput隘隘Stream是是办解析一个par邦邦包。哎F。扮Process安Definit败败ion.par拜拜seXmlRe班班source(澳xmlReso疤疤urce)接受受笆的参数是流程定定般义文件的路径,扳扳这个路径是相对对懊于classp八八ath的根路径径袄的一个相对路径径阿。邦V。阿Process阿 archiv拔拔e(par),班班流程档案文件,阿阿是一个zip文文柏件。必须要有一一爸个流程定义文件件跋,名字为pro哀哀cessdef稗稗inition拔拔.xml,流程程般档案也可以包含含安其他的

23、相关文件件懊,如proce柏柏ssimage案案.jpg,gp碍碍d.xml或c办办lasses(艾类的字节码文件件袄)等等,(流程程唉定义中使用到的的坝class要放放颁到classp盎盎ath中;或者者颁是放到流程档案案靶的/class岸岸es文件夹中,摆摆这样就会被流程程般类装载器来装载载版)。爸以下是部署流程程把的实现相关代码码敖:白Test稗public 百void de跋跋ployPro凹凹cessDef昂昂inition癌癌() 昂拜/ 1, 从从斑文件到实体艾把/昂把Process扒扒Definit懊懊ion pd 凹= Proce爸爸ssDefin捌捌ition.p把把ars

24、eXml罢罢String(皑xml);班佰/ 接受流程程艾定义文件矮凹/班邦Process凹凹Definit板板ion pd 伴= Proce鞍鞍ssDef碍inition搬搬.parseX伴伴mlInput蔼蔼Stream(坝inputSt般般ream);懊拜/挨碍Process懊懊Definit跋跋ion pd 扒= Proce背背ssDefin瓣瓣ition.p唉唉arseXml百百Reader(鞍reader)败;跋斑/吧叭Process白白Definit般般ion pd 安= Proce隘隘ssDefin败败ition.p板板arseXml敖敖Resourc伴伴e(firs俺俺t/p

25、roce佰佰ssdefin皑皑ition.x昂昂ml);疤疤/ 接受流程程矮定义文档八奥/哎傲Process碍碍Definit跋跋ion pd 扒= Proce拔拔ssDefi熬nition.昂昂parsePa哀哀rZipInp爸爸utStrea凹凹m(zipIn岸岸putStre皑皑am);霸案Process捌捌Definit敖敖ion pd 芭= Proce暗暗ssDefin碍碍ition.p岸岸arsePar扒扒Resourc隘隘e(firs安安tPD.zip败败);伴艾/ 2, 从从般实体到数据库肮阿JbpmCon佰佰figurat挨挨ion jbp芭芭mConfig般般uration

26、按按 = Jbpm唉唉Configu绊绊ration.颁颁getInst矮矮ance();哀翱JbpmCon澳澳text jb俺俺pmConte埃埃xt = jb巴巴pmConfi罢罢guratio矮矮n.cr版eateJbp半半mContex耙耙t();巴胺/ sess隘隘ion邦岸try 案扒jbpmCon矮矮text.de澳澳ployPro耙耙cessDef罢罢inition佰佰(pd);败昂 catch柏柏 (Excep扮扮tion e)瓣 俺八jbpmCon俺俺text.se哀哀tRollba伴伴ckOnly(摆);懊艾/ 告诉Jb笆笆pmConte稗稗xt在clos霸霸e的时候回滚

27、凹鞍throw n八八ew Runt班班imeExce跋跋ption(e哎哎);盎懊 final半半ly 袄哎jbpmCon拜拜text.cl肮肮ose();哎拜板笆八流程定义不应该该办改变,因为预测测背流程变化带来的的白所有可能的影响响拌是非常困难的(颁颁或者说是不可能能爸的)。围绕这个个白问题,jBPM八八有一个明智的流流爸程版本机制。版版扮本机制允许在数数百据库中多个同名名蔼流程定义共存,熬熬流程实例以当时时盎的最新版本来启启哎动,并且在它的的稗整个生命周期中中氨将保持以相同的的氨流程定义执行。扒扒当一个新的版本本隘被部署,新的流流胺程实例以新版本本百启动,而老的流流昂程实例则以老的的翱

28、流程定义继续执执班行。斑b。啊安部署流程定义时柏,如如果存在同名叭的流程定义,则则班版本自动累加(班班加1);如果不不啊存在,则版本为为肮1。傲E。案鞍在部署到jBP熬M数数据库之后改办变流程定义有很很瓣多潜在的缺陷,柏柏因此非常不鼓励励艾这样做。可以直直肮接部署为一个新新胺的版本。捌5。败5. 执行流程版半半流程实例可以通通捌过Proces案案sDefini翱翱tion.cr氨氨eatePro俺俺cessIns背背tance()斑方法创建,或者者熬是使用new 碍Process艾艾Instanc哀哀e(Proce罢罢ssDefin把把ition p扳扳d)并传递一个个拜流程定义来创建建哎,总

29、之创建的流流拔程实例一定是要要拔是属于(使用)哎哎某个流程定义的的岸。启动流程后不不斑要忘了使用Pr拌拌ocessIn埃埃stance.笆笆signal(扒)方法离开开始始凹状态。阿J。啊拌注意:流程定义绊的名名字是pro斑cessdef伴伴inition白白.xml文件中中背的根元素的na胺胺me属性的值,把把不是流程定义文文罢件的名字!败a。埃八任务列表:当前捌需要要办理(未完笆成)的任务集合合傲。可以通过Ta澳澳skMgmtS霸霸ession获获霸得。按I。背叭开始任务的方法俺为:TaskI昂nstance颁颁.start(啊);结束任务为为懊:TaskIn跋跋stance.办办end(

30、),T笆笆askInst摆摆ance.en扳扳d(Strin拌拌g trans瓣瓣itionNa翱翱me);无参的的皑end()方法法绊是使用第一个t八八ransiti罢罢on离开节点;八第二个方法是指指阿定完成任务后使使班用指定的tra巴巴nsition鞍鞍离开节点。一个个稗任务实例只能开开阿始和结束一次(俺俺再次开始或结束束瓣会抛异常)。笆下面是执行流程程半的相关代码:扒Test败public 唉void st皑皑artProc跋跋essInst挨挨ance() 皑颁爸JbpmCon霸霸figurat翱翱ion jbp傲傲mConfig背背uration罢罢 = Jbpm佰佰Configu

31、邦邦ration.翱翱getInst伴伴ance();耙爸JbpmCon伴伴text jb伴伴pmConte胺胺xt = jb傲傲pmConfi盎盎guratio跋跋n.creat疤疤eJbpmCo盎盎ntext()碍;八霸/ sess搬搬ion背半Process隘隘Definit芭芭ion pd 搬= jbpmC案案ontext.颁颁getGrap啊啊hSessio稗稗n().fin扮扮dLate澳stProce瓣瓣ssDefin半半ition(敖first)袄;皑笆/瓣巴Process版版Instanc佰佰e pi = 吧new Pro版版cessIns霸霸tance(p氨氨d);版翱Pr

32、ocess懊懊Instanc哎哎e pi = 板pd.crea佰佰teProce蔼蔼ssInsta跋跋nce();昂拜jbpmCon翱翱text.sa败败ve(pi);暗拌/ sign半半al班熬pi.getR鞍鞍ootToke班班n().sig拔拔nal();扒胺jbpmCon百百text.cl啊啊ose();靶鞍Test扮Suppre罢罢ssWarni按按ngs(un矮矮checked拜拜)盎public 伴void ge柏柏tTaskLi百百st() 俺霸JbpmCon熬熬figurat办办ion jbp柏柏mConfig阿阿uration奥奥 = Jbpm俺俺Configu唉唉rati

33、on.袄袄getInst白白ance();柏扳JbpmCon安安text jb癌癌pmConte板板xt = jb胺胺pmConfi安安guratio拔拔n.creat拌拌eJbpmCo靶靶ntext()把;哀懊/ sess扳扳ion澳矮String 背actorId疤疤 = 员工张张般三;稗澳/ Stri办办ng acto佰佰rId = 碍经理李四;拌按List ta艾艾skList 袄= jbpmC版版ontext.盎盎getTask哀哀List(ac埃埃torId);啊凹System.班班out.pri俺俺ntln(爸n-靶-皑-熬- 霸 + acto芭芭rId + 翱的任务列表)巴;把

34、奥for (Ta百百skInsta碍碍nce ti 班: taskL皑皑ist) 袄扒System.摆摆out.pri百百ntln(i碍碍d= + 阿ti.getI凹凹d()/疤板+ ,nam肮肮e= + t瓣瓣i.getNa巴巴me()/挨邦+ ,act坝坝orId= 埃+ ti.ge按按tActorI艾艾d()/肮班+ ,cre坝坝ate= +按 ti.get暗暗Create(碍)/罢拌+ ,sta隘隘rt= + 暗ti.getS稗稗tart()/盎/昂唉+ ,end半半= + ti瓣瓣.getEnd昂昂();摆哎暗扒System.皑皑out.pri阿阿ntln();昂般jbpmCon敖敖

35、text.cl笆笆ose();昂敖Test巴public 班void st翱翱artTask佰佰() 阿按JbpmCon败败figurat阿阿ion jbp百百mConfig氨氨uration斑斑 = Jbpm办办Configu霸霸ration.蔼蔼getInst熬熬ance();颁百JbpmCon霸霸text jb芭芭pmConte版版xt = jb傲傲pmConfi疤疤guratio澳澳n.creat奥奥eJbpmCo邦邦ntext()碍; / se八八ssion疤罢TaskIns半半tance t芭芭i = jbp半半mContex耙耙t.getTa疤疤skInsta案案nce(3);把

36、坝ti.star埃埃t();办笆jbpmCon扳扳text.cl盎盎ose();颁碍Test扒public 俺void en霸霸dTask()坝 拔邦JbpmCon稗稗figurat班班ion jbp芭芭mConfig半半uration拌拌 = Jbpm般般Configu傲傲ration.啊啊getInst稗稗ance();绊拜JbpmCon拔拔text jb敖敖pmConte巴巴xt = jb熬熬pmConfi岸岸guratio鞍鞍n.creat案案eJbpmCo败败ntext()瓣;般扒/ sess澳澳ion伴搬TaskIns昂昂tance t袄袄i = jbp颁颁mContex懊懊t.g

37、etTa败败skInsta矮矮nce(3);案蔼/ ti.e阿阿nd();叭搬ti.end(氨to end班班);般e。氨扒jbpmCon氨text.cl俺俺ose();背扒叭在员工填写报销销皑单任务完成前,埃埃应把业务数据凹报销金额与流流扳程关联起来,可可俺以通过设置流程程懊变量实现。流程程百变量是与流程实实阿例关联的,并且且靶会持久化到数据据氨库中。不同的流流拜程实例是互不相相奥干的,就好比w隘隘eb中的ses坝坝sion,在其其疤中设置变量(s俺俺etAttri白白bute)是跟跟半其它的sess背背ion中的变量量哀无关的。蔼氨利用变量动态的的斑设置参与者。在在搬流程定义中指定定唉参与

38、者(act绊绊or-id)时时捌,可以使用变量量碍,变量是以#俺俺开头,以叭结束,中间间瓣的是变量名。这这背里的变量引用的的办是在执行流程时时埃设置的流程变量量按。氨罢流程实例有了结结罢束时间(end背背!=null)版就表示这个流程程艾实例结束了。任任背务实例如果开始始般时间不为nul翱翱l(start鞍鞍!=null)皑,表示已经开始始疤了,即已对其调调氨用了start熬熬()方法;同样样柏在调用任务实例例柏的end()方方碍法时,结束时间间邦被填充(end澳澳!=null表表八示任务实例已结结凹束)。按G。袄以下是一些实体斑与表表的对应关系唉:按+-敖-扳-+霸-鞍-拌-奥-+-稗-叭|

39、跋败PO氨把|扒隘table按俺|罢邦实体把+-翱-巴-+袄-拔-叭-搬-+-哎-半|Proces蔼蔼sDefini扳扳tion碍暗|jbpm_p百百rocessd昂昂efiniti爸爸on|叭凹流程定义扮+-捌-按-+疤-般-拌-班-+-般-柏|Proces佰佰sInstan胺胺ce昂叭|jbpm_p稗稗rocessi半半nstance霸霸叭|翱伴流程实例颁+-隘-疤-+霸-艾-办-把-+-袄-翱|TaskIn靶靶stance拌敖|jbpm_t败败askinst扒扒ance摆背|靶耙任务实例皑+-拜-捌-+按-佰-埃-芭-+-安-扮|Variab佰佰leInsta俺俺nce疤颁|jbpm_v

40、把把ariable罢罢instanc懊懊e |邦哎流程变量扮+-哎-板-+坝-靶-翱-埃-+-跋-佰r。芭敖在Jbpm中,傲标识识各个节点的胺类型是不同的,氨氨功能也各不相同同瓣。今天,在课堂堂安上,汤老师重点点熬为我们讲解了各各熬个节点的作用及及办用法。斑H。爸1. 节点班不同的节节点类型岸代表不同的行为为瓣。捌 sta啊rt白-state岸搬开始节点,标识识板流程开始边界。胺胺开始状态有且只只板有一个,就是说说跋流程中不能有任任搬何昂transit昂昂ion指向开始始挨节点。佰颁在流程实例被创创坝建后(启动),艾艾RootTok笆笆en(根令牌)凹凹就指向star凹凹t-state拔拔,并

41、且处于等待待吧状态,需要给T吧吧oken发信号号柏(signal氨氨)才能使流程继继昂续执行。癌I。埃 end摆-state邦翱结束节点,标识识霸流程的结束边界界扒。不需要tra盎盎nsition矮矮元素。鞍j。氨 tas稗k-node敖疤任务节点,可以以扒包含任意数量的的挨Task(任务务疤)。当执行到一一班个任务节点的时时啊候,将会根据这这奥个task-n般般ode中的ta板板sk的定义,创创斑建相同数量的T敖敖askInst癌癌ance(为每每笆一个Task都都叭创建一个任务实实拔例,并且分配给给澳任务定义中指定定绊的参与者)。然然熬后,这个tas鞍鞍k-node一一皑直处于等待状态态扳

42、,等到这些任务务瓣实例都被完成后后罢,才会离开当前前翱的节点,到达下下氨一个节点。绊般调用TaskI罢罢nstance霸霸.end(St柏柏ring tr八八ansitio半半nName)时时岸,如果这个任务务啊实例不是当前任任啊务节点中的最后后版完成的那个,那那暗这个方法就只是是吧完成任务而已,挨挨并不会使用这指指阿定的trans氨氨ition离开开袄节点。就是说:埃只有当这个任务务吧实例完成后,T阿阿oken就要离离瓣开当前节点,到到吧达下一个节点时时按,指定的tra傲傲nsition半半Name才有作作爸用。蔼艾如果一个tas挨挨k-node中中熬没有定义任务,疤疤执行时,一进入入敖这个

43、节点就会马马肮上离开,即To哎哎ken不会在这这般个task-n阿阿ode上停留,耙耙因为他发现所有有俺的任务实例都执执扮行完了(任务实实案例的数量为0)熬熬。挨Z。白 sta般te癌巴状态节点,这是是癌一个等待节点。颁颁当执行到达这个个坝节点的时候,就就摆会处于等待状态态疤,须给toke袄袄n发一个信号(败败signal)案案才能使流程继续续邦执行。靶z。版 dec稗ision吧奥决策节点,用于于捌计算流向。有两两爸种计算方式:疤伴1) 在dec颁颁ision中使使斑用Decisi皑皑onHandl摆摆er,或使用一一爸个表达式。肮哀(都是返回要使使熬用的trans巴巴ition的n吧吧am

44、e);扒艾2) 在dec般般ision中的的把transit耙耙ion元素中使使板用boolea埃埃n表达式。这样样隘将使用表达式计计俺算结果为真的那那啊个transi癌癌tion离开节节碍点。昂胺拜 只有deci半半sion节点中中百的transi翱翱tion元素的的邦的condit皑皑ion可以计算算扳。在其他节点是是艾不起作用的!背稗邦 如果有多个t昂昂ransiti捌捌on的cond翱翱ition计算算隘为true,将将凹会使用第一个结结霸果为true的的隘transit般般ion(按定义义按中的顺序);搬般败 如果所有的t靶靶ransiti碍碍on的cond扒扒ition的值值吧都为

45、false肮肮,则使用第一个个搬。疤G。八隘如果以上方法同埃时使使用,调用的岸顺序为:奥肮如果有deci把把sionDel疤疤egation昂昂,则使用它的计计爸算结果。否则,颁颁瓣如果有deci翱翱sionExp柏柏ression靶靶,则使用它的计计敖算结果。否则,啊啊癌如果使用dec霸霸isionCo哎哎ndition爸爸s(trasn伴伴ition中的的疤表达式)的计算算哀结果。搬q。摆 exp颁ression熬熬(表达式)耙和我们在jsp百百中使用的el表表巴达式相似,只是是捌$改为#氨。肮5。板表达式中可以直熬接使使用已设置的袄流程变量,并且且熬可以直接使用以以挨下变量:疤捌task

46、Ins捌捌tance拌版process艾艾Instanc背背e柏背process扒扒Definit皑皑ion吧翱token罢鞍taskMgm懊懊tInstan昂昂ce版靶context瓣瓣Instanc唉唉e埃y。奥 for罢k / joi疤n半柏分支节点与合并并袄节点。分支节点点半的作用是将单个个按执行流程分裂成成靶多个并发的执行行靶流程。默认的行行俺为是为每个子流流懊程生成一个子令令岸牌,并建立子令令伴牌和主流程令牌牌皑之间的父子关系系扳。此时,父令牌牌暗指向fork节节胺点,子令牌指向向霸各个分支节点。熬熬坝合并节点将分支支岸收拢。当所有的的澳分支(从同一个个笆fork中出来来安的)都到

47、达该节节拔点的时候,jo阿阿in结点将结束束叭这些分支上的子子暗token,并并翱通给他们的父T捌捌oken发一个个佰信号离开joi巴巴n节点。如果只只拔有分支中的部分分拜token到达达安时,join结结扳点将处于等待状状澳态。爸罢需要注意的是:把fork和jo按按in节点要成对对板的出现。肮罢fork节点中中摆的transi佰佰tion都要指指稗定名字。否则。扮扮用程序运行没有有罢问题,用jbp般般m-conso按按le运行时执行行摆到这个fork肮肮节点的时候就会会疤抛空指针异常。隘隘T。稗 nod板e笆笆矮可定制的节点。肮肮可以在node般般元素中指定一个个癌Action子子啊元素,可

48、以指定定鞍一个实现了Ac傲傲tionhan啊啊dler接口的的按类,用这个类可可靶定制这个节点的的把行为。这时,如如颁是果想让流程继继矮续执行,需要给给笆token发一一隘个信号。拜傲如果node中中傲没有actio捌捌n子元素,他的的拜默认行为是一到到背达就离开了,不不佰作停留。邦q。斑2. Acti绊on岸板动作,是一段代代耙码,在指定的情情巴况下被执行。阿m。袄柏属性:坝背class败哀:指定处理类;拌皑name碍柏:action奥奥的名字;斑吧ref-nam罢罢e:所引用的a坝坝ction的名名霸字;般Z。矮般一个actio袄n是是一段jav白a代码,用来引引拌入附加的处理逻逻捌辑。可

49、以放在n把把ode节点中,白白也可以放在ev拔拔ent(事件)疤疤中,用来辅助当当八前节点完成业务务败逻辑。肮E。傲扮Action是敖一种种在图形表示把之外增加更多技技办术细节的机制。稗稗可以让java哎哎代码在不修改图图隘结构的情况下和和岸图关联起来。肮H。岸3. scri按pt 与 be澳anshell吧吧拔beanshe按按ll,可以直接接颁使用java类类袄。声明变量时可可斑以不指定类型而而癌直接使用。可以以澳在写脚本时当成成按是写Java代代安码(可以透明的的白使用Java的的奥API)。靶w。皑爸script就安是使使用的bea白nshell。伴伴script也也霸可以指定一个n斑

50、斑ame属性,可可埃以在配置act颁颁ion元素的时时阿候指定ref-皑name为此s靶靶cript的n氨氨ame,代表引引阿用这个动作。绊h。摆以下变量在Sc败ript中中可以佰直接引用:扮背executi啊啊onConte扮扮xt斑阿token翱捌node扮矮task半敖taskIns傲傲tance埃s。懊提示:能使用a罢ction的的地巴方一般也能使用用拔script;昂案配置scrip艾艾t时可用包围内容容吧。扳h。拔4. even懊t八八跋事件。挨按每个事件有一个跋动作作(acti翱on)清单。当当挨jBPM引擎产产癌生一个事件,动动扮作(actio笆笆n)清单就会被被白执行. 不同

51、的的百节点支持的事件件板类型不同,是由由鞍event元素素扮所在的节点的类类哎型决定的,例如如矮transit板板ion只有一个个阿事件。可以在e氨氨vent元素用用搬可以指定一个动动隘作,当指定的事事霸件发生时,这个个叭动作被执行。可可熬以给同一个事件件癌指定多个动作,叭叭当这个事件触发发碍的时候,这些动动碍作执行的顺序和和氨定义先后顺序是是败一致的。百v。白板不同元素支持不芭同的的事件类型:矮一般的节点都具具笆有的事件:no癌癌de-ente癌癌r,node-挨leave;昂start-s按按tate只有n阿阿ode-lea板板ve;巴end-sta敖敖te只有nod柏柏e-enter翱翱

52、;笆transit柏柏ion只有一个个疤执行转换的事件件癌(taking扒扒 a tran邦邦sition)瓣叭(所以配置时不不艾用写event百百元素,而直接配配按置Action靶靶)跋task有ta白白sk-crea按按te,task案案-assign盎盎,task-s熬熬tart,ta扒扒sk-end。斑斑B。案关于哪些元素支扒持哪哪些事件,可芭以通过文档的1耙耙8.4节中的x佰佰ml文件的写法法版中获得。澳O。氨如果配置的事件拔类型型不存在,不艾会报错,也不会会半执行。哀注意:在事件中爸定义义的动作不应百该影响流程的执执扮行。即不要在事事般件的动作中给瓣token发信信坝号,否则会抛异

53、异拌常。跋i。笆task-no隘de的的sing巴al属性可取的的办值:搬last: 默默班认值.当las半半t实例被完成时时哀候获得执行.当当把在这个入口没有有捌任务被生成时候候奥,执行继续.坝first: 巴当first实实稗例被完成时候获获斑得执行. 当在在奥这个入口没有任任坝务被生成时候,胺胺执行继续.隘never: 奥执行永远不继续续奥, 不管任务是是霸否建立或依然没没搬有完成.肮unsynch傲傲ronized奥奥: 执行一直继继奥续,不管任务是是拌否没建立或依然然唉没有完成.唉last-wa搬搬it: 当la按按st实例被完成成挨时候获得执行.案案当这个节点入口口唉没有任务被建立

54、立埃时,任务节点执执啊行等待直到任务务氨被建立.矮first-w叭叭ait: 当f八八irst实例被被熬完成时候获得执执啊行.当在这个入入胺口没有任务被生生芭成时候,执行继继搬续.矮v。芭last-wa敖it和和firs搬t-wait的的奥wait是分开开摆来理解的,wa案案it是指的等待待按任务实例的创建建靶,而巴到达task-颁node后有任任昂务实例被创建了了蔼,wait就没没办有影响了,这时时熬task-no芭芭de的行为碍就是wait前前傲面那个fir百百st或la爸爸st决定了,拜拜即执行完第一个个霸任务实例就离开开搬节点埃还是所有任务实实柏例都执行完才离离跋开节点.耙o。俺在演示

55、last般-wait时时,皑要用creat阿阿e-tasks拜拜属性配合(设置置扳他的值为fal按按se,就是不创创扒建任务实例).扳扳在设置为las斑斑t-wait或或蔼first-w霸霸ait时,在t佰佰ask-nod芭芭e元素中没有配配靶置任务,流程执执把行到这个节点时时办也会等待.背Z。案5. 动态的创碍建不不确定数量的按任务实例班实现任务分配给给奥多个人,需要做做办以下工作:癌1, 阻止jB哎哎PM自动创建任任搬务实例(设置t罢罢ask-nod敖敖e的creat白白e-tasks扮扮=false隘隘);扮2,在流程定义义按中定义的相应的的瓣任务,不指定参参办与者;傲3,在node办办

56、-enter事事叭件中定义一个动动扳作指定用于创建建矮TaskIns暗暗tance的类类啊。暗p。凹创建任务实例要罢调用用方法:八绊TaskMgm阿阿tInstan安安ce.crea扳扳teTaskI胺胺nstance摆摆(Task, 挨Executi安安onConte癌癌xt);扒其中的Task巴巴 是任务的定义义跋,可以先得到当当罢前的节点:扮扮TaskNod摆摆e taskN斑斑ode = (挨TaskNod霸霸e) exec蔼蔼utionCo矮矮ntext.g颁颁etNode(安);凹然后通过任务的的拔名字得到任务的的鞍定义:版鞍Task ta俺俺sk = ta扳扳skNode.摆摆g

57、etTask把把(审批);扳d。班今天,在课堂上艾,汤汤老师做了一敖个工作流的实际际盎应用,以下是D背背emo的环境搭搭阿建和分析及组织织挨与人员管理模块块百的具体实现总结结矮。爸E。奥1. 搭建环境拌: strut白s1.2.9 罢+ jstl1蔼蔼.1 + hi氨氨bernate熬熬3 + jbp岸岸m3.2.2癌八 拷贝j昂昂ar包与配置文文凹件.安岸罢 其中stru版版ts和jstl般般的jar包:引引啊用了eclip霸霸se提供的st翱翱ruts1.2肮肮的jar;捌靶扮 jbpm3.鞍鞍2.2的jar矮矮:其中里面包含含佰了hibern伴伴ate3.ja碍碍r,对lib文文艾件夹下

58、的jar啊啊进行了简单的挑挑百选,其中ser暗暗vlet-ap哎哎i.jar是T暗暗omcat自带带坝的,不用添加,胺胺还有junit敖敖.jar也不用用哀添加,因为我们们坝选用的是ecl拌拌ipse提供的的捌junit4.半半jar。白M。把瓣 修改数安据库库连接信息与叭创建数据库.以以背下是hiber叭叭nate.cf安安g.xml文件件邦中数据库配置的的扳主要内容:霸啊org.hib案案ernate.跋跋dialect哀哀.MySQL5白白Dialect凹凹笆com.m挨挨ysql.jd胺胺bc.Driv佰佰er碍蔼jdbc:my疤疤sql:/瓣itcasto巴巴a-捌ro稗稗ot哎12

59、耙耙34拌o挨挨rg.hibe背背rnate.c八八ache.Ha颁颁shtable肮肮CachePr袄袄ovider拜up柏柏date哎rnate.c八八onnecti绊绊on.driv板板er_clas安安scom.啊啊mysql.j吧吧dbc.Dri澳澳ver瓣皑jdbc:my坝坝sql:/澳itcasto傲傲a-背ro办办ot哎12扮扮34扒o笆笆rg.hibe唉唉rnate.c邦邦ache.Ha八八shtable碍碍CachePr捌捌ovider办up柏柏date案I。昂2, 完成组织隘与人人员管理:拜八 分析实实绊体(Depar拜拜tment, 瓣User, R敖敖ole), 各各

60、暗实体的属性及之之佰间的关联关系.隘隘下面是UML图图蔼:扮暗 写出映映唉射文件, 并创创背建数库数表; 傲然后检查表结构构捌是否正确.摆安傲 Depart笆笆ment.hb扮扮m.xml:凹艾败芭叭癌矮吧搬疤拜敖敖笆阿败暗邦蔼袄拔懊扮癌按暗背般靶绊笆懊澳澳 Role.h耙耙bm.xml:啊瓣霸八矮办邦颁跋盎叭背啊扮案 User.h捌捌bm.xml:败癌奥佰肮懊搬俺坝胺碍澳安碍袄扮X。扳啊澳奥按扮奥翱碍般稗跋 部门(芭Departm扳扳ent)操作的的板功能分析(增,氨氨删,改,查),敖敖 列出Acti挨挨on方法, A稗稗ctionFo爸爸rm, 与业务务吧方法.耙敖白 Depart挨挨me

温馨提示

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

评论

0/150

提交评论