zoukankan      html  css  js  c++  java
  • JBPM工作流笔记(基础)

    1.1.  添加jBPM环境

    A) 添加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);

       log4j.jar(可选,日志记录);

       Junit4(单元测试);

    B) 添加配置文件(在jbpm-jpdl-3.2.2/config目录中)

       jbpm.cfg.xml;

       hibernate.cfg.xml;

       log4j.properties(可选,log4j配置文件);

    C) 修改数据库库连接信息,如果使用的不是HsqlDB数据库,还应添加相应的jdbc驱动。

    D) 生成数据库表。

    1.2.  API

    1.2.1.    模板代码

    JbpmContext jbpmContext = cfg.createJbpmContext();// 打开Session并开始事务

    try {

        // Session session =jbpmContext.getSession();

        // jbpmContext.getGraphSession()

        // jbpmContext.getTaskMgmtSession()

    } catch (RuntimeException e) {

        jbpmContext.setRollbackOnly(); // 做一个标记,指定在关闭时应回滚事务

        throw e;

    } finally {

        jbpmContext.close(); // 会提交或回滚事务并关闭Session

    }

    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()时会回滚事务。

    方法

    作用

    JbpmContext.getGraphSession().

    流程定义与实例的有关操作

    JbpmContext.getTaskMgmtSession().

    查询任务实例

    JbpmContext.getSession().

    返回Hibernate Session

    JbpmContext.

    常用操作

    1.2.2.    操作代码

    对于Jbpm的实体的增删改操作,一定要使用Jbpm提供的API,不能自已使用Session直接操作。可以使用Session自行查询Jbpm的数据。

    编程步骤(要实现的功能有):

    a>   部署流程定义。

    b>   启动流程。

    c>   获取任务列表。

    d>   开始任务。

    e>   结束任务。

    其中编写流程定义和步骤a是添加流程定义到系统中;步骤b,c,d,e是使用系统中存在的某个流程定义执行流程;步骤c,d,e是办理一个任务的过程,流程的执行就是一次次办理任务的过程。

    部署流程定义 

    解析流程定义有三种方式(ProcessDefinition的静态方法):

    1,  xml文件:parseXmlResource(),parseXmlInputStream(),parseXmlReader()

    2,  zip包:parseParResource(),parseParZipInputStream()

    3,  xml字符串:parseXmlString()

    ProcessDefinition.parseXmlResource(xmlResource)接受的参数是流程定义文件的路径,这个路径是相对于classpath的根路径的一个相对路径。

    执行流程

    流程实例可以通过ProcessDefinition.createProcessInstance()方法创建,或者是使用newProcessInstance(ProcessDefinition pd)并传递一个流程定义来创建,总之创建的流程实例一定是要是属于(使用)某个流程定义的。启动流程后不要忘了使用ProcessInstance.signal()方法离开开始状态。

    数据库中的流程定义不能更新,使用版本的机制。每次启动流程实例都是使用最后一个版本的流程定义(最新的)

    注意:流程定义的名字是processdefinition.xml文件中的根元素的name属性的值,不是流程定义文件的名字!

    任务列表:当前需要办理(未完成)的任务集合。可以通过TaskMgmtSession获得。

    开始任务的方法为:TaskInstance.start();结束任务为:TaskInstance.end(),TaskInstance.end(String transitionName);无参的end()方法是使用第一个transition离开节点;第二个方法是指定完成任务后使用指定的transition离开节点。一个任务实例只能开始和结束一次(再次开始或结束会抛异常)。

    流程实例有了结束时间(end!=null)就表示这个流程实例结束了。任务实例如果开始时间不为null(start!=null),表示已经开始了,即已对其调用了start()方法;同样在调用任务实例的end()方法时,结束时间被填充(end!=null表示任务实例已结束)。

    1.3.  概念

    实体

    获取关联的对象

    流程定义

    ProcessDefinition

    流程实例

    ProcessInstance

    任务

    Task

    任务实例

    TaskInstance

     (process definition):预先定义的业务流转逻辑。

    (process instance):业务的一次实际流转过程。(包含了开始时间、结束时间和其他相关联的信息)。

    定义() :

    任务的名称、参与者(执行者):执行任务的人,只有他能看到这个任务。

    (task instance): 组成流程实例的元素。(Task被解释执行时的信息,

    有创建时间、开始时间、结束时间、参与者等,有create、start、end 三种状态)。

    流程定义由任务定义组成。

    流程实例由任务实例组成。

    任务列表(未完成的 指定人员的 任务实例的列表)(From TaskInstance ti WHERE ti.endIS NULL AND ti.actorId=? …)

  • 相关阅读:
    Unity5和WebGL移植指南的一些总结
    Unite洛杉矶峰会精彩回顾:从图形、平台再到VR
    比代码更重要的是团队管理
    初期游戏编程的9大法则
    关于Unity3D手机网游开发一些小看法
    守住真我
    学习要讲方法
    学习笔记|编程风格
    随便记
    微信方法
  • 原文地址:https://www.cnblogs.com/jqyp/p/1801707.html
Copyright © 2011-2022 走看看