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关系



此图来源网上。
BPM编程模型(场景)的更多相关文章
- ETL编程模型(场景)
使用场景: ETL是一个处理过程. 多个数据源之间进行数据同步 1:n:一对多同步数据 n:1:多个数据源到一个目的段 m;n:多个数据源多个目的段 ========================= ...
- ESB的编程模型(场景)
GateWay:网关channel:数据传输的通道adapter:数据连接通道的数据适配器spliter:对通道里面的数据进行分割router:对通道进行路由transforme:对消息进行格式化转化 ...
- 系统编程-网络-tcp客户端服务器编程模型(续)、连接断开、获取连接状态场景
相关博文: 系统编程-网络-tcp客户端服务器编程模型.socket.htons.inet_ntop等各API详解.使用telnet测试基本服务器功能 接着该上篇博文,咱们继续,首先,为了内容的完整性 ...
- Spring Batch批处理以及编程模型
1.批处理: 类似于SQL里面的批处理提交 2.场景: 业务定时进行批处理操作,但是批处理的编程模型是怎么的呢? 3.开源框架 Spring Batch 4.编程模型: reader-processo ...
- 云巴:基于MQTT协议的实时通信编程模型
概要 有人常问,云巴实时通信系统到底提供了一种怎样的服务,与其他提供推送或 IM 服务的厂商有何本质区别.其实,从技术角度分析,云巴与其它同类厂商都是面向开发者的通信服务,宏观的编程模型都是大同小异, ...
- 【温故知新】c#异步编程模型(APM)--使用委托进行异步编程
当我们用到C#类许多耗时的函数XXX时,总会存在同名的类似BeginXXX,EndXXX这样的函数. 例如Stream抽象类的Read函数就有 public abstract int Read(byt ...
- mapreduce编程模型你知道多少?
上次新霸哥给大家介绍了一些hadoop的相关知识,发现大家对hadoop有了一定的了解,但是还有很多的朋友对mapreduce很模糊,下面新霸哥将带你共同学习mapreduce编程模型. mapred ...
- Dubbo 新编程模型之外部化配置
外部化配置(External Configuration) 在Dubbo 注解驱动例子中,无论是服务提供方,还是服务消费方,均需要转配相关配置Bean: @Bean public Applicatio ...
- Spark:Spark 编程模型及快速入门
http://blog.csdn.net/pipisorry/article/details/52366356 Spark编程模型 SparkContext类和SparkConf类 代码中初始化 我们 ...
随机推荐
- Android Kernel save defalut config
/********************************************************************************* * Android Kernel ...
- 51Nod:1134 最长递增子序列
动态规划 修改隐藏话题 1134 最长递增子序列 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出长度为N的数组,找出这个数组的最长递增子序列.(递 ...
- (2)bytes类型
bytes类型就是字节类型 把8个二进制一组称为一个byte,用16进制来表示 Python2里面字符串其实更应该称为字节串,但是python2里面有一个类型是butes,所以在Python2里面by ...
- CTF-练习平台-Misc之 Linux??????
八.Linux?????? 下载文件,解压后只得到一个没有后缀名的文件,添加后缀名为txt,打开搜索,关键词为“flag”,没有找到:改关键词为“key”得到答案
- spfa【模板】
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using ...
- set 与 map 的第一次尝试
map 杭电6015http://acm.hdu.edu.cn/showproblem.php?pid=6015 基本用法:map<string,int>mp; mp[class[ i ...
- 《DSP using MATLAB》Problem 4.4
- JavaWeb学习总结(二)-修改Tomcat服务器的端口(半年之后再总结)
一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件(hibernate.cfg.xml是核心配置文件). 如果想修改Tom ...
- 极快瑞的函数式编程,Jquery涉及的一些函数
$(function(){ 一些实现功能的代码:})————————————文档载入完成后执行的函数.$(function(){}) 是 $(document).ready(function(){}) ...
- JNI学习笔记_Java调用C —— Android中使用的方法
一.笔记 1.JNI(Java Native Interface),就是如何使用java去访问C/C++编写的那些库.若想深入了解JNI可以看官方文档jni.pdf.优秀博文:Android JNI知 ...