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类 代码中初始化 我们 ...
随机推荐
- DHT11
主机开始发送信号:先拉低至少18ms,然后在拉高20~40us,然后DHT11响应, 拉低数据线40~50us,接着在拉高40~50us,之后再开始输出数据. 输出0是的时序:先12.14us低电平, ...
- HDU 2647:Reward(拓扑排序+队列)
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 51Nod:完美字符串
约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写.(也就是说字母F和f)的完美度相同. ...
- 《DSP using MATLAB》Problem 4.16
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- hdu2090-2097
hdu2090 模拟 #include<stdio.h> int main(){ ]; ,a1,a2; ; while(scanf("%s%lf%lf",b,& ...
- 强大的Java Json工具类
转自: https://blog.csdn.net/u014676619/article/details/49624165 import java.io.BufferedReader; import ...
- Mysql ON子句和USING子句
Mysql ON子句和USING子句 Mysql 中联接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name. 当模式设计对联接表的列 ...
- bat计算两个时间差
这个是脚本代码[保存为etime.bat放在当前路径下即可: 免费内容: :etime <begin_time> <end_time> <return>rem 所测 ...
- Thread.currentThread()与this的区别
Thread.currentThread()与this的区别: Thread.currentThread()方法返回的是对当前正在执行的线程对象的引用,this代表的是当前调用它所在函数所属的对象的引 ...
- spring 注解列表
table th:first-of-type { width: 15%; } table th:nth-of-type(2) { } 注解 作用 例子 @SuppressWarnings 忽略警告 类 ...