下面搞一个简单的jbpm例子
由于我没有使用向导创建而仅使用的是普通web工程的创建,所以,不要忘了把jbpm产品解压缩下来的包里面的config目录里面4个配置文件放到src下
hibernate.cfg.xml (这个不用多讲了,你自己看着改)
jbpm.cfg.xml,主文件
jbpm.mail.templates.xml,邮件模板配置文件
log4j.properties放到src里面(就是所谓的classpath目录)
这里要说明的是在这个hibernate.cfg.xml,启动的时候jbpm会去classpath目录下面找这个文件如果找不到了,就会去
使用默认的default.jbpm.cfg.xml(此文件在你导入的jar包jbpm-jpdl.jar下面的org.jbpm包下,感兴趣的可以去看看)
1 首先是流程的定义
2(部署流程)
定义好之后,就是部署流程了(部署流程定义后,会在jbpm的数据库中jbpm_processdefinition中看到出现了记录)
JbpmContext jc=JbpmConfiguration.getInstance().createJbpmContext();
ProcessDefinition pd=ProcessDefinition.parseParZipInputStream(new ZipInputStream(inputstream));//这里使用了zip流
------------------------------------------------------------------------------------------------------------------------------------------------------
在表现层,我用了struts,所以我传这个流是这样的
ProcessDefinitionForm pdform = (ProcessDefinitionForm) form; // pdform是struts的formbean,里面使用了FormFile 类型的属性例pdfile;
再使用pdform.getPdfile().getInputStream()的到inputstream
--------------------------------------------------------------------------------------------------------------------------------------------------------
jbpmcontext.deployProcessDefinition(pd);
3加载流程
JbpmContext jc=JbpmConfiguration.getInstance().createJbpmContext();
ProcessDefinition pd=jbpmContext.getGraphSession().loadProcessDefinition(pdid);//pdid是已经存在数据库中的pd记录的id
加载之后启动流程
ProcessInstance pi=new ProcessInstance(pd);
4用户得到自己的任务
JbpmContext jc=JbpmConfiguration.getInstance().createJbpmContext();
List li=jc.getTaskMgmtSession().findTaskInstances(userid)//得到当前用户任务列表
5办理任务
JbpmContext jc=JbpmConfiguration.getInstance().createJbpmContext();
TaskInstance ti=jc.getTaskMgmtSession().loadTaskInstances(tiid)//从id来创建任务实例
ti.start();//开始任务,数据库中出现任务开始时间
ti.end();完成任务,数据库中出现任务完成时间
这里的开始和结束由用户手动实现。
------------------------------------------------------------------------------------------------------
以上就是最简单的一个实现了工作流的例子
流程定义
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="MyExam">
<start-state name="start">
<transition to="apply"></transition>
</start-state>
<task-node name="manager aduit">
<task name="审核">
<assignment actor-id="2"></assignment>
</task>
<transition to="finance confirm"></transition>
</task-node>
<task-node name="finance confirm">
<task name="确认">
<assignment actor-id="3"></assignment>
</task>
<transition to="get money"></transition>
</task-node>
<task-node name="apply">
<task name="提交请求">
<assignment actor-id="#{starter}"></assignment>
</task>
<transition to="manager aduit"></transition>
</task-node>
<task-node name="get money">
<task name="取款">
<assignment actor-id="#{starter}"></assignment>
</task>
<transition to="end-state1"></transition>
</task-node>
<end-state name="end-state1"></end-state>
</process-definition>