no swimlane or assignment sepcified for task

最近在学习jbpm 以前搞过shak也搞过公司自己开发的小工作流引擎,想研究下比较下^_^
当然还是从例子入手
在调试别人的例子的时候,JUnit测试时候抛了个异常如下:
   org.jbpm.jpdl.JpdlException: [[ERROR] line 7: cvc-complex-type.2.4.a: Invalid content was found starting with element 'variable'. One of '{"urn:jbpm.org:jpdl-3.1":assignment, "urn:jbpm.org:jpdl-3.1":controller, "urn:jbpm.org:jpdl-3.1":event, "urn:jbpm.org:jpdl-3.1":timer}' is expected., [WARNING] warning: no swimlane or assignment specified for task '<task xmlns="urn:jbpm.org:jpdl-3.1" blocking="false" signalling="true" priority="normal">
<variable name="name" access="read,write"/>
<variable name="day" access="read,write"/>
<variable name="note" access="read,write"/>
</task>']
at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:163)
at org.jbpm.graph.def.ProcessDefinition.parseXmlInputStream(ProcessDefinition.java:172)
at com.sample.DeployProcessTest.testDeployProcessDefinition(DeployProcessTest.java:22)
。。。

分析了下 Invalid content was found starting with element 'variable'和warning: no swimlane or assignment specified for task 我觉得是在我的流程定义文件的task中variable 出了问题
回头看了下发现的确是我的定义文件写的不对
<start-state>
<task>
<variable name="name" />
<variable name="day" />
<variable name="note" />
</task>
<transition name="to_confirm" to="confirm">
<action name="requestAction" class="cn.com.nobody.jbpm.RequestAction">
<reason>我要请假</reason>
</action>
</transition>
</start-state>
应该是
<start-state>
<task>
                  <controller>
<variable name="name" />
<variable name="day" />
<variable name="note" />
                  </controller> 
</task>
<transition name="to_confirm" to="confirm">
<action name="requestAction" class="cn.com.nobody.jbpm.RequestAction">
<reason>我要请假</reason>
</action>
</transition>
</start-state>
是我的task下少了个controller ^_^ 够粗心
这里把这个异常拿出来 这样以后出现类似的错误就好处理了
改了以后还是不对,看了下JUnit里面的异常信息说我的测试代码中有空指针,看了下是说我的jbpmContext.deployProcessDefinition(processDefinition);
这一行中有控指针,断点看了下是说jbpmContext为null,往上看
//从jbmp.cfg.xml中取得jbpm的配置
JbpmConfiguration config=JbpmConfiguration.getInstance();
//创建一个jbpm容器
JbpmContext jbpmContext=config.createJbpmContext();
问题在第二句上 开始的时候我是ocnfig.getCurrentJbpmContext();这么写的,它返回的是null,应该使用createJbpmContext();前面那个方法在新版本中已经不支持了。
试了下,ok了^_^
附概念:
ProcessDefinition
定义了流程的业务逻辑,包含业务节点和流转。是有向图结构
ProcessInstance
ProcessDefinition 执行期间的体现. 包含了流程定义被解释之后的一些信息,诸如开始时间,结束时间和其他相关联的信息
Task
是ProcessDefinition的组成部分,定义了活动的具体内容
TaskInstance
Task被解释执行时的信息,有开始时间,结束时间,参与者等
有create start end 三种状态
Actor
活动的参与者
jBPM目前只需要actor的Id,对actor的具体解释是由业务应用层负责
任务创建时可以指定任务的参与者,也可以不指定
Token
是一个指针(运行期的概念),代表着一条执行路径,指向当前流程中正在执行的节点
在实例的运行期间,tokens 可能是一树形结构同一时刻,可能存在多个token,
但是只有一个root token

你可能感兴趣的:(xml,工作,jbpm,JUnit,活动)