今天在做JBPM时发现一个问题。因为JBPM的信息不够全面,所以我又建了一个扩展的ProcessDefinition实体Workflow,里面有创建时间、创建人等一些相关信息,然用了一个“一对一”和JBPM里的ProcessDefinition进行了关联,使用了懒加载策略。Workflow实体如下:
public class Workflow(){
private ....
.....
private ProcessDefinition processDefinition
}
当然是一对一的单向关联。当通过Workflow实例取processDefinition的信息时没什么问题,如是当直接用workflow.getProcessDefinition()的实例去创建ProcessInstance的实例时问题就出现了。如ProcessInstance processInstance = new ProcessInstance(workflow.getProcessDefinition())。显示的是session is closed。然后我又直接通过JBPM的context.getGrahSession.findProcessDefinition获得了一个同样的实例,发现又没问题。通过equal进行对比,两个实例是一样的。这让我百思不得其解。
我没看JBPM的代码,这里给出一个草率的定论:当需要对流程实例化时,需要打开另一个Session,而这个Session就是通过context.getGrahSession得。如果不通过这个Session获得流程定义,流程实例的Session和程序中的Session是两个不同的Session,因此会出现Session关闭的现象。所要必须要通过context.getGrahSession来获得一个流程,才能对此流程实例化。
当然,如果我说的不对,肯请大家指正。看看有没有什么方法可直接通过关联的ProcessDefinition进行实例化。
public class Workflow(){
private ....
.....
private ProcessDefinition processDefinition
}
当然是一对一的单向关联。当通过Workflow实例取processDefinition的信息时没什么问题,如是当直接用workflow.getProcessDefinition()的实例去创建ProcessInstance的实例时问题就出现了。如ProcessInstance processInstance = new ProcessInstance(workflow.getProcessDefinition())。显示的是session is closed。然后我又直接通过JBPM的context.getGrahSession.findProcessDefinition获得了一个同样的实例,发现又没问题。通过equal进行对比,两个实例是一样的。这让我百思不得其解。
我没看JBPM的代码,这里给出一个草率的定论:当需要对流程实例化时,需要打开另一个Session,而这个Session就是通过context.getGrahSession得。如果不通过这个Session获得流程定义,流程实例的Session和程序中的Session是两个不同的Session,因此会出现Session关闭的现象。所要必须要通过context.getGrahSession来获得一个流程,才能对此流程实例化。
当然,如果我说的不对,肯请大家指正。看看有没有什么方法可直接通过关联的ProcessDefinition进行实例化。