当前位置: 首页 > 工具软件 > jBPM > 使用案例 >

JBPM(二)

左丘善
2023-12-01

下面搞一个简单的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>

 类似资料: