jbpm3 之 概念


http://1311321.blog.51cto.com/1301321/530676

 经过两周的时间,把工作流开源jbpm进行了学习,现在再回头理解一下工作流的概念,并结合网上的资源加深自己的理解,同时也将自己在jbpm学习过程记录下来。
一:工作流的概念理解:
相关概念:企业信息化进程的深入,普通的OA(办公自动化)系统无法满足,工作流(workflow)/BPM(business process management)业务流程管理因此而生,在ERP(enterprise resource planning)企业资源计划、CRM(customer relationship management)客户关系管理、EAI(Enterprise application integration)企业应用集成等领域,工作流技术都有涉及。
   主要特点是:过程的自动化。
   工作流的价值:提高运转效率、良好的流程控制、改进客户服务、使企业变得灵活、促进业务改进。
定义1:工作流:两个或两个以上的人,为了共同的目标,连续的以串行或并行的方式去完成某一业务。
定义2:(wfmc工作流管理联盟的定义)工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。
综上:工作流的概念:为了提高企业自动化办公的效率,对于一个具体的业务过程按照定义好的规则传递信息,使业务的各个参与者可以专注于处理自己的业务,而由程序来完成业务流转,从而完成预期业务目标的计算机软件。
对于开发者来说,它就是一整套的代码,在这套代码中,
     a:每个活动节点都要开发交互界面和后台处理程序;
     b:每次活动的流转都需要硬性判断下一步活动节点及其处理人
     c:每次操作都需要维护业务数据和流程的相关数据;
     d:一旦业务流程变更,就需要大量地更改程序,甚至重新开发‘
     e:监视、控制、分析流程处理还需要单独开发,成本不低。
工作流的核心是工作流引擎,这里jbpm具有很大的优势,目前更新到版本5.0,发展速度很快。
 
二:jbpm3.2.3学习过程:
参考资料《深入浅出jbpm》,本书对工作流的层次不是很清晰、代码中有些许错误,但是由于国内关于工作流的资料很少,而且源于本书中的一些具体实例,总体来说还是一个好书。
首先介绍几个重要的概念:
    1:JbpmConfiguration:用来读取jbpm配置文件的对象。也提供了jbpm流程在运行过程中所需要的各种服务对象。
    2:JbpmContext:封装了大部分操作jbpm流程的方法。基本上每一个工作流程都需要JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext()这样一条语句来获得jbpmContext对象,它可以实现发布流程、穿件流程实例、加载流程实例、加载任务实例、加载代办任务等等功能。
注意一定要在程序最后将其关闭,jbpmContext.close();
    3:ProcessDefinition和ProcessInstance流程模板与流程实例,一个工作流程发布到数据库中就是一个流程模板,即一个xml文件。一个流程模板可以有多个流程实例,一个流程实例就是一个具体的应用,如报销流程张三和李四都采用了同一个模板,但是他们属于不同的实例。
    4:token(根令牌),在一个流程实例创建出来时,一个token也被创建了。token用来获取当前流程所在节点的位置,当token使用了token.signal()方法时,流程向下一个节点流转。
    5:ContextInstance流程上下文,在一个流程实例创建出来时,一个ContextInstance也被创建了。用来存储流程实例在运行过程中存储的流程变量,这里是一组键值对。
    6:JPDL表达式,beanshell脚本。融合java的简单语言。
     7:node节点和state节点,如果node节点没有对应的actino,流程执行到此不会停留,如果定义了actino,则执行完成后会停留在node节点上的,当外部发出token.signal()命令时,流程继续向下流转。state节点不管有没有acton都会停留。
    8:任务是流程与操作者交互的一种手段,是jbpm的核心。一般在tasknode定义任务,流程运转到taknode中,就会向对应的用户任务实例,直到任务实例的参与者将任务实例处理完成后,流程才能继续执行。
       任务实例(processInstance):一个任务可以产生一个任务实例,并指定一个参与者,任务实例就是要任务参与者处理的对象。它产生后存在jbpm_taskinstance表中。任务实例的生命周期:创建、开始处理、完成三个阶段,不管它的状态怎样,都会保留在原表中,只是会因为不同的状态而被不同的查询获取。
    当任务实例结束的时候,就会向流程实例发出向下流转的信号。
    任务分配:hander方式(必须实现AssignmentHander接口)、expression方式(不是JPDL)、swimlane方式处理一个流程中多个任务节点由同一个或角色来完成、pooled actors方式、actor方式。
    任务控制器task_controller:用来将流程上下文里的变量输出到客户端,一个是用来接收用户输入,并写到流程上下文中。
    任务调度处理的对象是job,对于每一个job可以设定它的触发时间、触发周期、触发后要执行的动作,当jbpm的任务调度服务开启之后,就会在服务端开启一个任务线程不断的检查存储job的jbpm_job表,一旦有符合条件的job就触发。
   过程: a:服务端需要启动一个线程来监视,不断来查找job表:
jbpmConfiguration.getJobExecutor().start().
          b:流程中设计一个timer,当流程实例运行到timer节点时,产生job,并在job表中可以看到一个timer信息,此时流程调用job执行。
          c:调用taskinstance.end()即结束这个任务,job表中对应的timer也被删除了,即它在任务结束的时候触发了timer的cancel-event事件。

你可能感兴趣的:(jbpm)