流程启动方法
流程启动方法
1、初始化:websale中jbpmContext的创建是在filter中完成的,其类为org.jbpm.webapp.filter.JbpmContextFilter。该filter在init方法中初始化jbpmConfigurationResource及jbpmContextName两个string。每个http request,均由filter创建jbpmContext,代码为:
JbpmConfiguration jbpmConfiguration=getJbpmConfiguration();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(jbpmContextName);
bean中通过JbpmContext.getCurrentJbpmContext()获取当前的JbpmContext实例。比如HomeBean初始化代码:
...
public HomeBean() {
this.jbpmContext = JbpmContext.getCurrentJbpmContext();
this.graphSession = jbpmContext.getGraphSession();
this.taskMgmtSession = jbpmContext.getTaskMgmtSession();
}
...
2、启动流程
启动流程执行HomeBean的startProcessInstance方法:
public String startProcessInstance() {
// 从http request获取processDefinitionId参数,装载流程定义(jsfHelper是一个工具类,集合了一些jsf常用的功能)
long processDefinitionId = JsfHelper.getId("processDefinitionId");
ProcessDefinition processDefinition = graphSession.loadProcessDefinition(processDefinitionId);
// 创建新的流程实例
ProcessInstance processInstance = new ProcessInstance(processDefinition);
// 创建任务实例
TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance();
// 保存流程实例和任务实例
jbpmContext.save(processInstance);
// 设置taskBean
taskBean.initialize(taskInstance);
//跳转到task.jsp
return "task";
}
其中taskBean.initialize(taskInstance)做了如下工作:
a、初始化taskBean,并生成TaskFormParameter对象,设置TaskFormParameter对象属性并将该对象添加入taskFormParameters的LIST对象中。而taskFormParameters对象则设置到session中。
b、获取jbpm转换,如果有转换,设置相应的数据。