版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 工作流 工作流(Workflow):就是自动运作的业务过程部分或整体,表现为参与者对文件、信息或任务按照规程采取行动,并令其在参与者之间传递。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。工作流是针对工作中具有固定程序的常规活动而提出的一个概念。通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。 工作流就是工作流程的计算机化,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传
2、递文档、信息或者任务。 通俗的说,就是多个人在一起合作完成某件事情。 工作流可实现业务或公文的申请、审批、会签、登记、操作等环节的管理,可将工作过程进行记录,便于日后检查。并实现数据的规范化录入、查询、统计和存档。OA(办公自动化)主要技术之一就是工作流。2. 工作流管理系统(Workflow Management System, WfMS) 主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。 工作流管理系统是定义、创建、执行工作流的系统,应能提供以下三个方面的功能支持: 定义工作流:包括具体的活
3、动、规则等; 运行控制功能:在运行环境中管理工作流过程,对工作流过程中的活动进行调度; 运行交互功能:指在工作流运行中,WfMS与用户(活动的参与者)及外部应用程序工具交互的功能。3. JBPMM,全称是JJava BBusineess Prrocesss Manaagemennt JBPM是是一种基于JJ2EE的轻轻量级工作流流管理系统,jBPM是是公开源代码码项目, 官官方主页为: HYPERLINK /jbossjbpm http:/g/jbosssjbpmm JJbpm的使使用* 步步骤* 编写写流程定义(定定义规则);* 部署流流程定义到系系统中;* 执行流程(使使用指定的流流程定义
4、); 编写流程定定义举例:员员工报销费用用的流程描述述:员工需要要先填写报销销单据;交给给其经理进行行审批;审批批(通过)后后到财务去领领款。以上流程由三个个步骤组成,每每个步骤即是是一个任务,分分别由一个角角色执行。应应该使用jBBPM提供的的JPDL(jjBPM PProcesss Deffinitiion Laanguagge)来描述述这个流程,这这样使用了jjBPM的系系统才能看的的懂。jPDL:是一一种直观的流流程语言,可可以使用任务务、等待状态态、定时器、自自动化动作等等等图形化地地表示流程。jjPDL认为为一个商务流流程可以被看看作是一个UUML状态图图。jPDLL就是详细定定义
5、了这个状状态图的每个个部分,如起起始、结束状状态,状态之之间的转换等等。(就是写写一个xmll文件) 使用 jbbpm 提供供的 jbppm connsole web 应应用程序测试试/使用流程程jBPM Consoole weeb 是由 jBPM 提供的一个个web应用用。它是一个个管理和监控控流程的控制制台,用于检检查和操纵运运行的流程实实例。双击 servver/sttart.bbat 启动动jbpm提提供的jbooss服务器器,要访问地地址为:htttp:/locallhost:8080/jbpm-consoole/部署流程定义到到 jbpmm-conssole 中中时的注意事事项:A
6、)要要求流程定义义文件的名字字为proccessdeefinittion.xxml,并且且在一个ziip压缩文件件的根目录中中;B)存放放流程定义的的zip文件件所在的路径径中不能含有有中文(因为为jbpm-consoole应用没没有处理中文文)。 执行流程部部署流程定义义后,就可以以使用这个流流程定义了(执执行流程)。在在开始一个流流程后,要先先进入到 ttokenss 页面中点点击 Siggnal 链链接,这样才才能使流程离离开开始状态态,以后的步步骤中都不需需再做这个操操作。当流程程执行到有任任务的节点时时,就可以看看到当前节点点中定义的任任务了。任务务的办理分为为两步:开始始和结束。*
7、 流程实例例通过Tokken的维护护当前正在执执行的节点JJbpm是怎怎么知道一个个流程实例现现在走到哪个个节点了呢?每个流程实实例都有一个个指针,指向向当前正在执执行的节点,在在当前节点执执行完后,到到达了下一个个节点,就是是让这个指针针指向下一个个节点。这个个指针叫做TToken(也也叫做令牌)。Token是运运行时的概念念,用来维护护指向图结点点的指针。TToken需需要一个信号号(signnal)来让让流程向前执执行。当一个个signaal来到的时时候,Tokken就会通通过trannsitioon离开当前前的结点走到到下一个结点点。4. jBPMM提供了一个个图形化的流流程设计器,是
8、是一个ecllipse插插件。 使用插件件设计流程定定义还可以生生成图片,这这样就可以实实现流程的图图形化监控。 使用插插件设计完流流程定义并保保存后,会有有三个文件:A)proocessddefiniition.xml,流流程定义文件件;B)prrocesssimagee.jpg,流流程图片;CC)gpd.xml,保保存流程图片片中的各个节节点的坐标信信息。 插件安安装方法:在在Eclippse安装目目录下的liinks目录录中新建一个个文本文件,把把扩展名改为为.linkk,并且修改改内容为paath=$插件中的eeclipsse文件夹所所在的路径。 使用插插件时会遇到到的几个问题题 插件
9、在eeclipsse3.3的的版本上才能能正常工作,所以myeeclipsse5.1(eclippse3.22)不能使用用这个插件。 安装插时,如如果 Mysseclippse安装目目录下的ecclipsee目录中没有有linkss目录,可以以手工创建一一个。还要注注意指定的插插件的路径中中不能含有中中文。 使用插件设设计流程定义义时,如果再再点击插件下下方的 SSourcee 选项卡卡修改生成的的proceessdeffinitiion.xmml,会出现现突然少了一一些内容或多多出一些内容容等情况,这这是插件的问问题。如果想想修改流程定定义源文件,可可以使用普通通的xml编编辑器打开进进行修
10、改,方方法是在文件件上点击右键键 - OOpen WWith - MyEEclipsse XMLL Edittor。 如果节点的的名字中有中中文,则生成成的gpd.xml中的的节点名字会会出现乱码,这这会导致不能能正确的进行行图形化监控控。修正方法法:在部署流流程定义前把把gpd.xxml文件的的编码改为GGBK(改为为本地编码,也也要修改xmml文件中的的encodding的值值为GBK)。要要注意如果修修改并保存了了一下流程定定义,就会重重新生成prrocesssimagee.jpg和和gpd.xxml文件,这这时gpd.xml中的的encodding又变变成了UTFF-8,应再再改为GB
11、KK。(这是一一个Bug)。今天,在课堂上上,汤阳光老老师教我们大大家熟悉了JJbpm,并并实现了一个个简单的办公公流程事例,以以下是课堂总总结和相关实实现代码。1. 概念 流程定定义:预先定定义的业务流流转逻辑。 流程实实例(proocess instaance):业务的一次次实际流转过过程。(是流流程定义执行行期间的体现现,包含了流流程定义被解解释之后的一一些信息,诸诸如开始时间间、结束时间间和其他相关关联的信息)。 任务实实例(tassk insstancee): 组成成流程实例的的元素。(TTask被解解释执行时的的信息,有开开始时间、结结束时间、参参与者等,有有creatte、sta
12、art、ennd 三种状状态)。2. 搭建环境境:* Jbbpm的APPI:流程有有关的所有信信息都是要保保存到数据库库中的。jBBPM的其中中一个特色就就是它使用HHibernnate来管管理它的数据据库。这样,jjBPM就将将数据的管理理职能分离出出去,自己则则专注于商务务逻辑的处理理。 添加jarr包:jbpm-jpdl.jar(核核心);jbpm-identtity.jjar(可选选,组织机构构);bsh.jjar(BeeanSheell脚本);jbosss-j2eee.jar;hibernnate3.jar(HHibernnate);antlrr-2.7.6.jarr(Hibeern
13、atee);asm.jjar(Hiibernaate);cglibb.jar(HHibernnate);dom4jj.jar(HHibernnate);commoons-coollecttions.jar(HHibernnate);commoons-looggingg.jar(HHibernnate);hsqldbb.jar(可可选,纯Jaava写的数数据库);log4jj.jar(可可选,日志记记录);Junit44(单元测试试); 添加配配置文件(在在jbpm-jpdl-3.2.22/conffig目录中中):jbpm.cfg.xxml;hiberrnate.cfg.xxml;pperti
14、ees(可选,llog4j配配置文件);修改数据库库库连接信息息,如果使用用的不是HssqlDB数数据库,还应应添加相应的的jdbc驱驱动。我们选选用mysqql数据库驱驱动mysqql-connnectoor-javva-5.11.7-biin.jarr。 生成数数据库表。选选用单元测试试的方式生成成数据库表,以以下是测试类类代码:puublic void creatteScheema() / 读取取配置文件并并创建数据库库new CConfigguratiion().confiigure().buiildSesssionFFactorry();3. 编写流程程定义员工报报销,由其经经理审批
15、。审审批通过后,此此员工到财务务去领款,流流程结束;如如果未经理审审批通过,流流程结束。经经理在审批的的时候应能看看到这个员工工要报销的金金额,根据金金额做出是否否通过的决定定。* 编程步骤,要要实现的功能能有:a 部署署流程定义。b 启动流程。c 获取任务列表。d 开始任务。e 结束任务。其中编写流程定义和步骤a是添加流程定义到系统中;步骤b,c,d,e是使用系统中存在的某个流程定义执行流程;步骤c,d,e是办理一个任务的过程,流程的执行就是一次次办理任务的过程。有两个重要的类:JbpmConfiguration和JbpmContext。JbpmConfiguration是jBPM的相关配置
16、信息,并有创建JbpmContext的功能,可以把JbpmConfiguration想像成Hibernate中的Configuration与SessionFactory的结合体。使用JbpmConfiguration.getInstance()方法创建一个JbpmConfiguration对象,这会使用默认的jbpm配置文件:在classpath根目录中,并且名字为jbpm.cfg.xml。或者是使用getInstance(String configFilePath)方法,用指定的配置文件构造。Jbpm中几乎所有的操作都是通过JbpmContext完成的,可以把他想像成Hibernate中的S
17、ession。他是通过JbpmConfiguration.createJbpmContext()方法创建的,JbpmContext中包装有一个Hibernate的Session(通过他做的数据库操作)。使用完JbpmContext后一定要调用他的close()方法,否则所有信息都不会持久化到数据库当中。因为在调用JbpmConfiguration.createJbpmContext()方法时会创建一个Hibernate的Session并开始事务;在调用JbpmContext.close()方法时会提交事务并且关闭所关联的Session。如果在执行JbpmContext.close()之前调用方
18、法jbpmContext.setRollbackOnly(),则在JbpmContext.close()时会回滚事务。4. 部署流程程定义这个过过程就是把流流程定义的相相关信息保存存到jBPMM的数据库中中。解析流程定义大大致有三种方方式,所使用用的方法都在在ProceessDeffinitiion中,并并且都是sttatic的的:1)parseeXmlReesourcce,parrseXmllInputtStreaam和parrseXmllReadeer,是解析析一个xmll的流程定义义文件;2)parseeXmlSttring,是是解析一个字字符串;3)parseeParReesourcc
19、e与parrseParrZipInnputSttream是是解析一个ppar包。ProcesssDefinnitionn.parsseXmlRResourrce(xmmlResoource)接受的参数数是流程定义义文件的路径径,这个路径径是相对于cclassppath的根根路径的一个个相对路径。Processs archhive(ppar),流流程档案文件件,是一个zzip文件。必必须要有一个个流程定义文文件,名字为为proceessdeffinitiion.xmml,流程档档案也可以包包含其他的相相关文件,如如proceessimaage.jppg,gpdd.xml或或classses(类的
20、的字节码文件件)等等,(流流程定义中使使用到的cllass要放放到classspathh中;或者是是放到流程档档案的/cllassess文件夹中,这这样就会被流流程类装载器器来装载)。以下是部署流程的实现相关代码:Testpublic void deployProcessDefinition() / 1, 从文件到实体/ProcessDefinition pd = ProcessDefinition.parseXmlString(xml);/ 接受流程定义文件/ProcessDefinition pd = ProcessDefinition.parseXmlInputStream(inputS
21、tream);/ProcessDefinition pd = ProcessDefinition.parseXmlReader(reader);/ProcessDefinition pd = ProcessDefinition.parseXmlResource(first/processdefinition.xml);/ 接受流程定义文档/ProcessDefinition pd = ProcessDefinition.parseParZipInputStream(zipInputStream);ProcessDefinition pd = ProcessDefinition.parsePar
22、Resource(firstPD.zip);/ 2, 从实体到数据库JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();/ sessiontry jbpmContext.deployProcessDefinition(pd); catch (Exception e) jbpmContext.setRollbackOnly();/ 告诉JbpmContext在close的时候回滚th
23、row new RuntimeException(e); finally jbpmContext.close();流程定义不应该改变,因为预测流程变化带来的所有可能的影响是非常困难的(或者说是不可能的)。围绕这个问题,jBPM有一个明智的流程版本机制。版本机制允许在数据库中多个同名流程定义共存,流程实例以当时的最新版本来启动,并且在它的整个生命周期中将保持以相同的流程定义执行。当一个新的版本被部署,新的流程实例以新版本启动,而老的流程实例则以老的流程定义继续执行。部署流程定义义时,如果存存在同名的流流程定义,则则版本自动累累加(加1);如果不存在在,则版本为为1。在部署到jBBPM数据库库之后
24、改变流流程定义有很很多潜在的缺缺陷,因此非非常不鼓励这这样做。可以以直接部署为为一个新的版版本。5. 执行流程程流程实例可可以通过PrrocesssDefinnitionn.creaateProocessIInstannce()方方法创建,或或者是使用nnew PrrocesssInstaance(PProcesssDefiinitioon pd)并传递一个个流程定义来来创建,总之之创建的流程程实例一定是是要是属于(使使用)某个流流程定义的。启启动流程后不不要忘了使用用ProceessInsstancee.signnal()方方法离开开始始状态。注意:流程定定义的名字是是proceessdef
25、finitiion.xmml文件中的的根元素的nname属性性的值,不是是流程定义文文件的名字!任务列表:当当前需要办理理(未完成)的的任务集合。可可以通过TaaskMgmmtSesssion获得得。开始任务的方方法为:TaaskInsstancee.starrt();结结束任务为:TaskIInstannce.ennd(),TTaskInnstancce.endd(Striing trransittionNaame);无无参的endd()方法是是使用第一个个transsitionn离开节点;第二个方法法是指定完成成任务后使用用指定的trransittion离开开节点。一个个任务实例只只能开始
26、和结结束一次(再再次开始或结结束会抛异常常)。下面是是执行流程的的相关代码:Testtpubliic voiid staartProocessIInstannce() JbpmCConfigguratiion jbbpmConnfigurrationn = JbbpmConnfigurrationn.getIInstannce();JbpmCContexxt jbppmConttext = jbpmmConfiigurattion.ccreateeJbpmCContexxt();/ seessionnProceessDeffinitiion pdd = jbbpmConntext.getGrr
27、aphSeessionn().fiindLattestPrrocesssDefinnitionn(firrst);/ProceessInsstancee pi = new ProceessInsstancee(pd);ProceessInsstancee pi = pd.ccreateeProceessInsstancee();jbpmCContexxt.savve(pi);/ siignalpi.geetRoottTokenn().siignal();jbpmCContexxt.cloose();TesttSupppressWWarninngs(uuncheccked)publiic voi
28、id gettTaskLList() JbpmCConfigguratiion jbbpmConnfigurrationn = JbbpmConnfigurrationn.getIInstannce();JbpmCContexxt jbppmConttext = jbpmmConfiigurattion.ccreateeJbpmCContexxt();/ seessionnStrinng acttorId = 员工工张三;/ Sttring actorrId = 经理李四四;List ttaskLiist = jbpmCContexxt.gettTaskLList(aactorIId);Sys
29、teem.outt.prinntln(n- + acttorId + 的任任务列表);for (TaskIInstannce tii : taaskLisst) Systeem.outt.prinntln(id= + ti.getIdd()/+ ,nname= + tii.getNName()/+ ,aactorIId= + ti.ggetActtorId()/+ ,ccreatee= + ti.geetCreaate()/+ ,sstart= + tti.gettStartt()/+ ,eend= + ti.getEnnd();Systeem.outt.prinntln();jbpmCCon
30、texxt.cloose();Testtpubliic voiid staartTassk() JbpmCConfigguratiion jbbpmConnfigurrationn = JbbpmConnfigurrationn.getIInstannce();JbpmCContexxt jbppmConttext = jbpmmConfiigurattion.ccreateeJbpmCContexxt(); / seessionnTaskIInstannce tii = jbbpmConntext.getTaaskInsstancee(3);ti.sttart();jbpmCContexxt
31、.cloose();Testtpubliic voiid enddTask() JbpmCConfigguratiion jbbpmConnfigurrationn = JbbpmConnfigurrationn.getIInstannce();JbpmCContexxt jbppmConttext = jbpmmConfiigurattion.ccreateeJbpmCContexxt();/ seessionnTaskIInstannce tii = jbbpmConntext.getTaaskInsstancee(3);/ tii.end();ti.ennd(too end);jbpmC
32、oontextt.closse();在员工填写写报销单任务务完成前,应应把业务数据据报销金额额与流程关关联起来,可可以通过设置置流程变量实实现。流程变变量是与流程程实例关联的的,并且会持持久化到数据据库中。不同同的流程实例例是互不相干干的,就好比比web中的的sessiion,在其其中设置变量量(setAAttribbute)是是跟其它的ssessioon中的变量量无关的。利用变量动动态的设置参参与者。在流流程定义中指指定参与者(aactor-id)时,可可以使用变量量,变量是以以#开开头,以结束,中中间的是变量量名。这里的的变量引用的的是在执行流流程时设置的的流程变量。流程实例有了结束时间(
33、end!=null)就表示这个流程实例结束了。任务实例如果开始时间不为null(start!=null),表示已经开始了,即已对其调用了start()方法;同样在调用任务实例的end()方法时,结束时间被填充(end!=null表示任务实例已结束)。以下是一些实体体与表的对应应关系:+-+-+-|PO|tablee|实体+-+-+-|ProocessDDefiniition|jbpmm_proccessdeefinittion|流程定义+-+-+-|PProcesssInsttance|jbpmm_proccessinnstancce|流程实例+-+-+-|TTaskInnstancce|jb
34、pmm_taskkinstaance|任务实例+-+-+-|VVariabbleInsstancee|jbpmm_variiableiinstannce |流程变量+-+-+-在Jbpm中中,标识各个个节点的类型型是不同的,功功能也各不相相同。今天,在在课堂上,汤汤老师重点为为我们讲解了了各个节点的的作用及用法法。1. 节点不同同的节点类型型代表不同的的行为。 staart-sttate开始节点,标标识流程开始始边界。开始始状态有且只只有一个,就就是说流程中中不能有任何何transsitionn指向开始节节点。在流程实例例被创建后(启启动),RoootTokken(根令令牌)就指向向start
35、t-statte,并且处处于等待状态态,需要给TToken发发信号(siignal)才才能使流程继继续执行。 endd-statte结束节点,标标识流程的结结束边界。不不需要traansitiion元素。 tassk-nodde任务节点,可可以包含任意意数量的Taask(任务务)。当执行行到一个任务务节点的时候候,将会根据据这个tassk-nodde中的taask的定义义,创建相同同数量的TaaskInsstancee(为每一个个Task都都创建一个任任务实例,并并且分配给任任务定义中指指定的参与者者)。然后,这这个taskk-nodee一直处于等等待状态,等等到这些任务务实例都被完完成后,才
36、会会离开当前的的节点,到达达下一个节点点。调用TasskInsttance.end(SStringg trannsitioonNamee)时,如果果这个任务实实例不是当前前任务节点中中的最后完成成的那个,那那这个方法就就只是完成任任务而已,并并不会使用这这指定的trransittion离开开节点。就是是说:只有当当这个任务实实例完成后,TToken就就要离开当前前节点,到达达下一个节点点时,指定的的transsitionnName才才有作用。如果一个ttask-nnode中没没有定义任务务,执行时,一一进入这个节节点就会马上上离开,即TToken不不会在这个ttask-nnode上停停留,因为
37、他他发现所有的的任务实例都都执行完了(任任务实例的数数量为0)。 staate状态节点,这这是一个等待待节点。当执执行到达这个个节点的时候候,就会处于于等待状态,须须给tokeen发一个信信号(siggnal)才才能使流程继继续执行。 deccisionn决策节点,用用于计算流向向。有两种计计算方式:1) 在ddecisiion中使用用DecissionHaandlerr,或使用一一个表达式。(都是返回要使用的transition的name);2) 在decision中的transition元素中使用boolean表达式。这样将使用表达式计算结果为真的那个transition离开节点。 只有d
38、ecision节点中的transition元素的的condition可以计算。在其他节点是不起作用的! 如果有多个transition的condition计算为true,将会使用第一个结果为true的transition(按定义中的顺序); 如果所有的transition的condition的值都为false,则使用第一个。如果以上方法法同时使用,调调用的顺序为为:如果有deecisioonDeleegatioon,则使用用它的计算结结果。否则,如果有decisionExpression,则使用它的计算结果。否则,如果使用decisionConditions(trasnition中的表达式)的
39、计算结果。 exppressiion(表达达式)和我们们在jsp中中使用的ell表达式相似似,只是$改为#。表达式中可以直直接使用已设设置的流程变变量,并且可可以直接使用用以下变量:taskIInstannceproceessInsstanceeproceessDeffinitiiontokenntaskMMgmtInnstancceconteextInsstancee forrk / jjoin分支节点与与合并节点。分分支节点的作作用是将单个个执行流程分分裂成多个并并发的执行流流程。默认的的行为是为每每个子流程生生成一个子令令牌,并建立立子令牌和主主流程令牌之之间的父子关关系。此时,父父令牌
40、指向ffork节点点,子令牌指指向各个分支支节点。合并节点将将分支收拢。当当所有的分支支(从同一个个fork中中出来的)都都到达该节点点的时候,jjoin结点点将结束这些些分支上的子子tokenn,并通给他他们的父Tooken发一一个信号离开开join节节点。如果只只有分支中的的部分tokken到达时时,joinn结点将处于于等待状态。需要注意的是:fork和join节点要成对的出现。fork节点中的transition都要指定名字。否则。用程序运行没有问题,用jbpm-console运行时执行到这个fork节点的时候就会抛空指针异常。 nodde可定制的节节点。可以在在node元元素中指定一
41、一个Actiion子元素素,可以指定定一个实现了了Actioonhanddler接口口的类,用这这个类可定制制这个节点的的行为。这时时,如是果想想让流程继续续执行,需要要给tokeen发一个信信号。如果nodde中没有aactionn子元素,他他的默认行为为是一到达就就离开了,不不作停留。2. Actiion动作,是一一段代码,在在指定的情况况下被执行。属性:cllass:指定处理理类;name:actiion的名字字;ref-nname:所所引用的acction的的名字;一个actiion是一段段java代代码,用来引引入附加的处处理逻辑。可可以放在noode节点中中,也可以放放在evenn
42、t(事件)中中,用来辅助助当前节点完完成业务逻辑辑。Actionn是一种在图图形表示之外外增加更多技技术细节的机机制。可以让让java代代码在不修改改图结构的情情况下和图关关联起来。3. scriipt 与 beansshellbeansshell,可可以直接使用用java类类。声明变量量时可以不指指定类型而直直接使用。可可以在写脚本本时当成是写写Java代代码(可以透透明的使用JJava的AAPI)。scriptt就是使用的的beansshell。sscriptt也可以指定定一个namme属性,可可以在配置aactionn元素的时候候指定reff-namee为此scrript的nname,代
43、代表引用这个个动作。以下变量在Sccript中中可以直接引引用:execuutionCContexxttokennnodetasktaskIInstannce提示:能使用aactionn的地方一般般也能使用sscriptt;配置scrript时可可用包包围内容。4. evennt事件。每个事件有一一个动作(aactionn)清单。当当jBPM引引擎产生一个个事件,动作作(actiion)清单单就会被执行行. 不同的的节点支持的的事件类型不不同,是由eevent元元素所在的节节点的类型决决定的,例如如transsitionn只有一个事事件。可以在在eventt元素用可以以指定一个动动作,当指定定
44、的事件发生生时,这个动动作被执行。可可以给同一个个事件指定多多个动作,当当这个事件触触发的时候,这这些动作执行行的顺序和定定义先后顺序序是一致的。不同元素支持持不同的事件件类型:一般般的节点都具具有的事件:node-enterr,nodee-leavve;staart-sttate只有有node-leavee;end-statee只有nodde-entter;trransittion只有有一个执行转转换的事件(takinng a ttransiition)(所以配置置时不用写eevent元元素,而直接接配置Acttion)ttask有ttask-ccreatee,taskk-assiign,t
45、aask-sttart,ttask-eend。关于哪些元素支支持哪些事件件,可以通过过文档的188.4节中的的xml文件件的写法中获获得。如果配置的事件件类型不存在在,不会报错错,也不会执执行。注意:在事件中中定义的动作作不应该影响响流程的执行行。即不要在在事件的动作作中给tokken发信号号,否则会抛抛异常。task-noode的siingal属属性可取的值值:lastt: 默认值值.当lasst实例被完完成时候获得得执行.当在在这个入口没没有任务被生生成时候,执执行继续.ffirst: 当firrst实例被被完成时候获获得执行. 当在这个入入口没有任务务被生成时候候,执行继续续.nevee
46、r: 执行行永远不继续续, 不管任任务是否建立立或依然没有有完成.unnsynchhronizzed: 执执行一直继续续,不管任务务是否没建立立或依然没有有完成.laast-waait: 当当last实实例被完成时时候获得执行行.当这个节节点入口没有有任务被建立立时,任务节节点执行等待待直到任务被被建立.fiirst-wwait: 当firsst实例被完完成时候获得得执行.当在在这个入口没没有任务被生生成时候,执执行继续.last-waait和fiirst-wwait的wwait是分分开来理解的的,waitt是指的等待待任务实例的的创建,而到到达taskk-nodee后有任务实实例被创建了了,
47、waitt就没有影响响了,这时ttask-nnode的行行为就是waait前面那那个firrst或last决定了,即即执行完第一一个任务实例例就离开节点点还是所有任任务实例都执执行完才离开开节点.在演示lastt-waitt时,要用ccreatee-taskks属性配合合(设置他的的值为fallse,就是是不创建任务务实例).在在设置为laast-waait或fiirst-wwait时,在taskk-nodee元素中没有有配置任务,流程执行到到这个节点时时也会等待.5. 动态的创创建不确定数数量的任务实实例实现任务务分配给多个个人,需要做做以下工作:1, 阻止止jBPM自自动创建任务务实例(设
48、置置task-node的的creatte-tassks=ffalse);2,在在流程定义中中定义的相应应的任务,不不指定参与者者;3,在nnode-eenter事事件中定义一一个动作指定定用于创建TTaskInnstancce的类。创建任务实例要要调用方法:TaskMMgmtInnstancce.creeateTaaskInsstancee(Taskk, ExeecutioonConttext);其中的Taask 是任任务的定义,可以先得到到当前的节点点:TaskNNode ttaskNoode = (TaskkNode) execcutionnConteext.geetNodee();然后后
49、通过任务的的名字得到任任务的定义:Task task = tasskNodee.getTTask(审批);今天,在课堂上上,汤老师做做了一个工作作流的实际应应用,以下是是Demo的的环境搭建和和分析及组织织与人员管理理模块的具体体实现总结。1. 搭建环境境: strruts1.2.9 + jstll1.1 + hibeernatee3 + jjbpm3.2.2 拷拷贝jar包包与配置文件件. 其中sttruts和和jstl的的jar包:引用了ecclipsee提供的sttruts11.2的jaar; jbpmm3.2.22的jar:其中里面包包含了hibbernatte3.jaar,对liib
50、文件夹下下的jar进进行了简单的的挑选,其中中servllet-appi.jarr是Tomccat自带的的,不用添加加,还有juunit.jjar也不用用添加,因为为我们选用的的是ecliipse提供供的juniit4.jaar。 修改改数据库连接接信息与创建建数据库.以以下是hibbernatte.cfgg.xml文文件中数据库库配置的主要要内容:orrg.hibbernatte.diaalect.MySQLL5Diallectcom.mmysql.jdbc.Driveerjjdbc:mmysql:/ittcastooa-0900513roott12234org.hiberrnate.cac
51、hee.HashhtableeCacheeProviideruupdateernatte.connnectiion.drriver_classscomm.mysqql.jdbbc.Driiverjdbcc:mysqql:/itcasstoa-00905133rooot1234orrg.hibbernatte.cacche.HaashtabbleCaccheProoviderrupdaate2, 完成组织织与人员管理理: 分分析实体(DDeparttment, Userr, Rolle), 各各实体的属性性及之间的关关联关系.下下面是UMLL图: 写写出映射文件件, 并创建建数库数表; 然后检查
52、查表结构是否否正确. Depaartmennt.hbmm.xml: Rolee.hbm.xml: Userr.hbm.xml: 部部门(Deppartmeent)操作作的功能分析析(增,删,改,查), 列出Acction方方法, AcctionFForm, 与业务方法法. DepaartmenntActiion中的方方法publiic ActtionFoorwardd listt(ActiionMappping mappiing, AActionnForm form, HttppServlletReqquest requeest,HttpSServleetRespponse respoonse
53、) throwws Excceptioon DeparrtmenttForm deptFForm = (DeppartmeentForrm) foorm;int pparenttId = deptFForm.ggetParrentIdd();Deparrtmentt pareent = deparrtmenttServiice.geetDeptt(pareentId);List deptts = ddeparttmentSServicce.finndDeptts(parrent);/ 准备备数据requeest.seetAttrributee(deppts, deptss);requeest.
54、seetAttrributee(parrent, pareent);returrn mappping.findFForwarrd(liist);publiic ActtionFoorwardd treee(ActiionMappping mappiing, AActionnForm form, HttppServlletReqquest requeest,HttpSServleetRespponse respoonse) throwws Excceptioon List deppts = deparrtmenttServiice.fiindDeppts(nuull);/ 准备备数据requee
55、st.seetAttrributee(deppts, deptss);returrn mappping.findFForwarrd(trree);publiic ActtionFoorwardd saveeUI(AcctionMMappinng mappping, ActiionForrm forrm, HtttpSerrvletRRequesst reqquest,HttpSServleetRespponse respoonse) throwws Excceptioon DeparrtmenttForm deptFForm = (DeppartmeentForrm) foorm;Deparr
56、tmentt deptt = deepartmmentSeervicee.getDDept(ddeptFoorm.geetId();if (ddept != nulll) deptFForm.ssetId(dept.getIdd();deptFForm.ssetNamme(deppt.gettName();deptFForm.ssetParrentIdd(deptt.getPParentt() = nulll ? 0 : deppt.gettParennt().ggetId();returrn mappping.findFForwarrd(saave);publiic ActtionFoorw
57、ardd savee(ActiionMappping mappiing, AActionnForm form, HttppServlletReqquest requeest,HttpSServleetRespponse respoonse) throwws Excceptioon DeparrtmenttForm deptFForm = (DeppartmeentForrm) foorm;Departtment parennt = ddeparttmentSServicce.gettDept(deptFForm.ggetParrentIdd();Deparrtmentt deptt = dee
58、partmmentSeervicee.getDDept(ddeptFoorm.geetId();if (ddept = nulll) dept = neww Depaartmennt();dept.ssetNamme(depptFormm.getNName();dept.setPaarent(parennt);deparrtmenttServiice.saave(deept);returnn mappping.ffindFoorwardd(shoowDeptts);publiic ActtionFoorwardd del(ActioonMappping mmappinng, AcctionFForm fform, HttpSServleetRequuest rrequesst,HttpSServleetRespponse respoonse) throwws Excce
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年数字运传燃气表、水表、电表项目申请报告
- 2024年1420MM五机架冷连轧机项目提案报告
- 2024-2030年中国球化剂市场产销量预测及发展可行性分析报告
- 2024-2030年中国玻璃器皿行业发展前景预测及创新模式分析报告
- 2024-2030年中国玉米淀粉糖市场销售渠道及竞争策略分析报告
- 2024-2030年中国特种火柴行业未来发展预测竞争策略分析报告
- 2024-2030年中国物流信息化行业发展创新及投资运作模式分析报告版
- 2024-2030年中国焊接钢筋项目可行性研究报告
- 2024-2030年中国烘焙油脂行业竞争趋势及投资盈利预测报告
- 《天津JC互联网科技有限公司物流成本控制研究》
- 第十周国旗下演讲稿(教师) 传承红色基因,争做时代新人,讲红色故事
- 山东省临沂市罗庄区2023-2024学年四年级上学期11月期中英语试题
- 《心肌梗死诊治流程》课件
- 2024届上海市风华中学物理高一第一学期期中综合测试试题含解析
- OBE理念下的课程目标设计
- 部编人教版六年级上册语文全册课文教学课堂实录
- 计量箱使用说明书
- 人教版一年级起点小学四年级英语上册全套教案
- 人教版小学音乐二年级下册(简谱)火车开啦-教学课件
- 自动体外除颤仪(AED)培训教材-2
- 五年级主题班会 家长会 课件(共28张PPT)
评论
0/150
提交评论