zoukankan      html  css  js  c++  java
  • BPM编程模型(场景)

    一直开发基于操作的业务系统,主要就是通过界面,用户提交一些数据完成任务,大多数涉及多人协作的,基本都是浏览,少数可能对其进行审批,这里的审批不是电子政务那样的多人审批任务,仅仅是对数据的一个操作而已,所以任务协作都是有我们程序自己进行控制的,业务的组合也不是很多,也不是多人协作式的任务,所以也就是没使用基于BPM模式的流程开发。

    但是最近的一个系统,主要还是采集数据,完成任务,但是采集的数据来源多个系统,通过Webservice进行访问其他系统的服务,流程基本有些可以重复使用,不过有些涉及多人协作,保证任务安全,所以我们采用BPM的模式进行,对原子服务进行编排组合,按照一定的流程完成我们自己的业务,一方面简化开发,同时多人协作的状态也比较好控制。

    所以我们采取SOA+BPM流程模式的开发

    =====================================================================================================

    流程模版--xml文件(流程轨迹可以进行跟踪,这是BPM的一大优点)

    流程实例--业务挂接在流程实例上面运行(主要是在节点之间挂接,业务数据只需记录流程实例的ID,而流程实例记录任务的用户,分派任务到用户)

    把业务数据挂接在流程实例上面运行

    同时通过流程运行轨迹我们可以了解到此业务运行过程的的数据监控,参与人员的监控(这一BPM的有点)

    对原子服务进行重新的编排,达到流程的复用(BPM的有点)----后期可以对流程进行优化(比如临床路径这样的需求)

    ======================================================================================================

    Token机制:一种状态机机制

    ======================================================================================================

    JbpmConfiguration cfg = JbpmConfiguration.getInstance();
    JbpmContext ctx = cfg.createJbpmContext();

    JbpmConfiguration cfg = JbpmConfiguration.getInstance();
    cfg.createSchema();//初始化数据库

    ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("dd/processdefinition.xml");
    ctx.deployProcessDefinition(processDefinition );//部署流程模板

    ProcessDefinition processDefinition = ctx.getGraphSession().findLatestProcessDefinition("dd");
    ProcessInstance processInstance = new ProcessInstance(processDefinition);//构建流程实例

    ctx.save(processInstance);//保存流程实例

    Token token = processInstance.getRootToken()//获取token(类似一个指针)

    token.signal();//节点流转(State节点流程使用)

    List lists = ctx.getTaskMgmtSession().findTaskInstances(roleId);//获取用户的代办列表(任务实例)

    ProcessInstance processInstance = ctx.getGraphSession().getProcessInstance(id);//获取流程实例

    instance.end('下一个节点name');//任务节点使用这个方法进行流转

    注意:

    start节点:

      可以有任务,但是不可以指定actor-id,我们可以动态创建任务

    task-node节点:

      可以有多个task,一个task默认之创建一个任务实例,但是如果我们自己动态创建,可以在一个task节点上挂接多个任务实例(我们自己创建任务实例)

      采用instance.end('下一个节点name')流转

    state:

      采用token.signal()流转

    node:

      自动节点

    Join-For:拆分何必机制(同步顺序于非同步无顺序)

    任务分配:

      AssignmentHandler(动态对任务实例进行分配)

    决策处理器:

      DecisionHandler(动态指定流转路径)

    事件处理器:

      ActionHandler

    节点事件:

      利用节点的事件机制,我们可以动态创建任务实例

    规则机制(动态机制):

      BPM种,主要的节点就是任务节点以及指派机制,就是一种规则机制可以借助Drools规则进行

    =======================================================================================================

    国际上多工作流21种模式

    大家可以了解一下这21种场景,这21种模式基本大家都可以在现实里面见到,但是国外对其理论化

    http://www.cnblogs.com/wuhong/archive/2010/12/01/1890830.html

    =====================================================================================================

    通过ESB构建数据中心,提供服务给BPM平台,而DW通过ETL过程供BI进行数据分析,其他外围的业务平台实现具体业务,发布成服务接入ESB,通过BPM进行流程重组监控优化等。

    BPM,ESB,MDM以及BI、DW关系

    此图来源网上。

  • 相关阅读:
    高级语言发展之回归人类思维——听老赵的Session有感
    走进单元测试(1):为什么难以广泛应用?
    梦话对象之三:三要素的差异与统一
    走进单元测试(2):必须要自动化
    缺乏自信怎么办?
    梦话对象之一:逃不开的生死问题
    走进单元测试(3):消灭HttpContext的依赖,兼谈单元测试的设计辅助性
    我也想对广大程序员说一些话
    梦话对象之二:事件之无限扩展
    《JavaScript高级程序设计》学习笔记——错误处理与调试
  • 原文地址:https://www.cnblogs.com/gstsyyb/p/3879065.html
Copyright © 2011-2022 走看看