传智播客jbpm学习,jpbm中流程执行比较重要的类和方法


  今天继续学习jbpm,汤老师结合例子对jpbm中流程执行比较重要的类和方法进行了讲解,部署流程定义,流程执行,任务实例等。通过今天的学习,基本掌握了jbpm操作流程。

jbpm中要用的jar包,把它们添加进入项目
 
   jbpm-jpdl.jar(核心);
   jbpm-identity.jar(可选,组织机构);
   bsh.jar(BeanShell脚本);
   jboss-j2ee.jar;

   hibernate3.jar(Hibernate);
   antlr-2.7.6.jar(Hibernate);
   asm.jar(Hibernate);
   cglib.jar(Hibernate);
   dom4j.jar(Hibernate);
   commons-collections.jar(Hibernate);
   commons-logging.jar(Hibernate);

   hsqldb.jar(可选,纯Java写的数据库);
   log4j.jar(可选,日志记录);

   Junit4(单元测试);

     添加配置文件(在jbpm-jpdl-3.2.2/config目录中):
   jbpm.cfg.xml;
   hibernate.cfg.xml;
   log4j.properties(可选,log4j配置文件);
修改数据库库连接信息,如果使用的不是HsqlDB数据库,还应添加相应的jdbc驱动。

  生成数据库表。

 编写流程步骤,要实现的功能有:
    a> 部署流程定义。
    b> 启动流程。
    c> 获取任务列表。
    d> 开始任务。
    e> 结束任务。
其中编写流程定义和步骤a是添加流程定义到系统中;步骤b,c,d,e是使用系统中
存在的某个流程定义执行流程;步骤c,d,e是办理一个任务的过程,流程的执行就
是一次次办理任务的过程。
    有两个重要的类:JbpmConfiguration和JbpmContext。JbpmConfiguration是
jBPM的相关配置信息,并有创建JbpmContext的功能,可以把JbpmConfiguration
想像成Hibernate中的Configuration与SessionFactory的结合体。使用
JbpmConfiguration.getInstance()方法创建一个JbpmConfiguration对象,这会
使用默认的jbpm配置文件:在classpath根目录中,并且名字为jbpm.cfg.xml。或
者是使用getInstance(String configFilePath)方法,用指定的配置文件构造。

Jbpm中几乎所有的操作都是通过JbpmContext完成的,可以把他想像成Hibernate
中的Session。他是通过JbpmConfiguration.createJbpmContext()方法创建的,
JbpmContext中包装有一个Hibernate的Session(通过他做的数据库操作)。使用
完JbpmContext后一定要调用他的close()方法,否则所有信息都不会持久化到数
据库当中。因为在调用JbpmConfiguration.createJbpmContext()方法时会创建一
个Hibernate的Session并开始事务;在调用JbpmContext.close()方法时会提交事
务并且关闭所关联的Session。如果在执行JbpmContext.close()之前调用方法
jbpmContext.setRollbackOnly(),则在JbpmContext.close()时会回滚事务。
   部署流程定义
这个过程就是把流程定义的相关信息保存到jBPM的数据库中。
    解析流程定义有三种方式,所使用的方法都在ProcessDefinition中,并且都
是static的:1)parseXmlResource方法,parseXmlInputStream方法和parseXmlReader方法,是解析一个xml的流程定义文件;2)parseXmlString,是解析一个字符串;3)parseParResource与parseParZipInputStream是解析一个par包。
   ProcessDefinition.parseXmlResource(xmlResource)接受的参数是流程定义文件
的路径,这个路径是相对于classpath的根路径的一个相对路径。
    Process archive(par),流程档案文件,是一个zip文件。必须要有一个流程定义文件,名字为processdefinition.xml,流程档案也可以包含其他的相关文件,
如processimage.jpg,gpd.xml或classes(类的字节码文件)等等,(流程定义中
使用到的class要放到classpath中;或者是放到流程档案的/classes文件夹中,
这样就会被流程类装载器来装载)。

   流程定义不应该改变,因为预测流程变化带来的所有可能的影响是非常困难的
(或者说是不可能的)。围绕这个问题,jBPM有一个明智的流程版本机制。版本
机制允许在数据库中多个同名流程定义共存,流程实例以当时的最新版本来启动,并且在它的整个生命周期中将保持以相同的流程定义执行。当一个新的版本被部署,新的流程实例以新版本启动,而老的流程实例则以老的流程定义继续执行。
  部署流程定义时,如果存在同名的流程定义,则版本自动累加(加1);如果不存在,则版本为1。
   在部署到jBPM数据库之后改变流程定义有很多潜在的缺陷,因此非常不鼓励这样做。可以直接部署为一个新的版本。
    执行流程
流程实例可以通过ProcessDefinition.createProcessInstance()方法创建,或者
是使用new ProcessInstance(ProcessDefinition pd)并传递一个流程定义来创建,
总之创建的流程实例一定是要是属于(使用)某个流程定义的。启动流程后不要
忘了使用ProcessInstance.signal()方法离开开始状态。
  注意:流程定义的名字是processdefinition.xml文件中的根元素的name属性的值,不是流程定义文件的名字!
    每个节点都有多个任务,任务列表:当前需要办理(未完成)的任务集合。可以通过TaskMgmtSession获得。
    开始任务的方法为:TaskInstance.start();结束任务为:TaskInstance.end(),
TaskInstance.end(String transitionName);无参的end()方法是使用第一个
transition离开节点;第二个方法是指定完成任务后使用指定的transition离开
节点。一个任务实例只能开始和结束一次(再次开始或结束会抛异常,打印这个任务已经结束了)。

 

 

 



新浪空间——与朋友开心分享网络新生活!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值