1.JPDL分析JPDL的文件格式以及流程定义.?xmlversion=1.0encoding=UTF-8?processname=Purchaseorderxmlns==Verifysupplier//startstatename=Verifysuppliertransitionname=Supplierokto=Checksupplierdata/transitionname=Suppliernotokto=Error//statedecisionname=Checksupplierdatatransitionname=nokto=Error/transitionname=okto=Completed//decisionendname=Completed/endname=Error//process1.1.ProcessProcess属性列表:属性类型默认值可选/必选?描述namestring必选流程在用户交互中显示名称或标签key数字字符和下划线如果省略,key会根据name替换所有不是数字的子符和下划可选区分不同流程定义的属性.一个流程定义有多个版本可以使用相同的key.在多个版本中key:name结构必属性类型默认值可选/必选?描述线.须相同.versioninteger由1开始,新版本比当前最高版本的version要高.optional流程版本号Process嵌套标签列表:标签描述description描述activities(下面的所有标签)一系列类型节点可以嵌套到里面.至少有一个start节点.1.2.JPDL节点标签介绍1.2.1.全局标签1.2.1.1.tns:onon中的属性:属性类型默认值是否可选描述continuetns:continueTypesync|async|exclusivesync可选指定同步,异步或互斥的.eventstring可选指定的Event.start,end,task或者其他的customevent.on中可以嵌套的标签(可选):标签描述timer计时器,当计时器发动的时候,所有引用该timer的eventlisteners将会被通知.event-listenereventlistener的实现对象.(userguide6.5.1)hql定义HQLquery读取数据库并将结果保存到processvariable中.sql定义SQLquery读取数据库并将结果保存到processvariable中.java配置当前运行节点运行的class.assign将接收到的value分配到目标位置.script执行一个script.mail指定发送email的内容,以及多个接收者.1.2.1.1.tns:transitiontransition中的属性:属性类型默认值是否可选描述gtns:continueTypesync|async|exclusivesync可选使用流程设计工具时,图象大小和坐标信息.namestring可选该transition的名称tostring可选该transition的目的地.transition中可以嵌套的标签(可选):标签描述description描述event-listenereventlistener的实现对象.(userguide6.5.1)hql定义HQLquery读取数据库并将结果保存到processvariable中.sql定义SQLquery读取数据库并将结果保存到processvariable中.java配置当前运行节点运行的class.assign将接收到的value分配到目标位置.script执行一个script.mail指定发送email的内容,以及多个接收者.1.3.Usercode在JPDL中,许多标签引用一个对象,其中的接口将会被调用。用户代码的配置:属性类型默认值是否可选描述classstring{class|expr}其中之一是必须的全类名。初始化只会进行一次,用户对象会被作为流程定义的一部分进行缓存。exprstring{class|expr}其中之一是必须的表达式的值会当做目标对象被获得。表达式会在每次使用时被执行。用户代码的配置中的元素(可选)元素数目描述field0…*描述一个配置值,在用户类使用之前注入到成员变量中。property0…*描述一个配置值,在用户类使用之前通过一个setter方法进行注入。field和property的属性属性类型默认值是否可选描述namestring必填名称field和property包含的元素:field和property元素都拥有一个子元素,表示将被注入的值。元素数目描述string0…1ajava.lang.Stringint0…1ajava.lang.Integerlong0…1ajava.lang.Longfloat0…1ajava.lang.Floatdouble0…1ajava.lang.Doubletrue0…1Boolean.TRUEfalse0…1Boolean.FALSEobje0…1会通过反射初始化的对象基本类型string,int,long,floatanddouble的属性:属性类型默认值是否可选描述valuetext必填text值会被解析成期望的类型1.3.1.custom调用用户代码,以实现自定义行为的活动。custom的属性:属性类型默认值是否可选描述auto-writestring可选指明是否根据propertyname,type跟objectname,type自动绑定memberfield和setterproperty.cachetrue|on|enabled|false|off|disable可选指明usercode是否应该缓存.classstring可选class名称.continuetns:continueTypesync|async|exclusive可选指定同步,异步或互斥的.exprstring可选提供object的表达式factorystring可选factoryobject的名称.gstring可选使用流程设计工具时,图象大小和坐标信息.langstring可选声明语言methodstring可选factorymethod名称namestring可选节点名称,名称应该在整个流程中是唯一的.custom嵌套的标签标签描述description描述.factory描述factoryobect.constructor描述非默认的constructor的输入参数.argfactory方法的输入参数.field向object注入成员字段的值.property通过setter方法注入一个值.一个子标签必须定义它的值.invoke调用一个方法.on全局标签,定义某个节点的在on可以嵌套的标签的功能(timer,hql,event-listener等等).transition全局标签,向外的转移exampleprocessname=Customxmlns==printdots//startcustomname=printdotsclass=org.jbpm.examples.custom.PrintDotstransitionto=end//customendname=end//process从Custom节点的PrintDos行为类,可以看出custom节点可以在实现custom节点行为的时候,控制流程.在这种情况下,PrintDots节点在打印后会在等待,知道收到信号为止.publicclassPrintDotsimplementsExternalActivityBehaviour{privatestaticfinallongserialVersionUID=1L;publicvoidexecute(ActivityExecutionexecution){StringexecutionId=execution.getId();Stringdots=...;System.out.println(dots);execution.waitForSignal();}publicvoidsignal(ActivityExecutionexecution,StringsignalName,MapString,?parameters){execution.take(signalName);}}1.3.2.event-listenerevent-listener是用户代码,所以它可以像第2.3.1节“custom”中一样进行配置。任何自动活动(包括event-listener)在事件中,可以指定下面的额外属性:属性类型默认值是否可选描述propagationenabled|disabled|true|false|on|offdisabled可选指定事件监听器应该也被传播的事件调用。envnt-listener嵌套的标签标签描述description描述.factory描述factoryobect.constructor描述非默认的constructor的输入参数.argfactory方法的输入参数.field向object注入成员字段的值.property通过setter方法注入一个值.一个子标签必须定义它的值.invoke调用一个方法.example流程图如下:processname=EventListenerxmlns==startevent-listenerclass=org.jbpm.examples.eventlistener.LogListenerfieldname=msgstringvalue=startonprocessdefinition//field/event-listener/onstarttransitionto=wait//startstatename=waitonevent=startevent-listenerclass=org.jbpm.examples.eventlistener.LogListenerfieldname=msgstringvalue=startonactivitywait//field/event-listener/ononevent=endevent-listenerclass=org.jbpm.examples.eventlistener.LogListenerfieldname=msgstringvalue=endonactivitywait//field/event-listener/ontransitionto=parkevent-listenerclass=org.jbpm.examples.eventlistener.LogListenerfieldname=msgstringvalue=taketransition//field/event-listener/transition/statestatename=park//processLogListener维护一系列的日志:publicclassLogListenerimplementsEventListener{//valuegetsinjectedfromprocessdefinitionStringmsg;publicvoidnotify(EventListenerExecutionexecution){ListStringl