写点什么

一种适用于真实世界 BPM 的协作方式

  • 2010-08-25
  • 本文字数:4906 字

    阅读完需:约 16 分钟

我们在业务流程管理(BPM)领域里摸爬滚打已经很多年了,最近看到人们对它的关注不断提升,这是非常有趣的一件事。对这一趣事儿起催化作用方面的有,工具的日渐成熟、新 BPMN2.0 规范的形成、以及更多更好的相关出版物带来的人们对 BPM 的进一步理解,它们代表着 BPM 领域内最重要的进步。

厂商提供了越来越高精良的图形化工具以及由其承诺的业务流程实现自动化,无需任何编码甚至开发者参与;然而,我们也发现了使用这些“传统”的以厂商为中心方法的一个问题:它们并未履行任何承诺!

我们以前的一些项目可以佐证以上观点。公平起见,既然这些工具大都会面临相同的基本问题,就不具体点名是什么工具了,有个同事不得不使用一个小的 Web 界面工具来实现一个简单的流程。这个工具提供了一个特有的、神奇的可拖放界面设计器,刚开始用似乎还比较方便,但当我们项目快要结束时,出现了一些需要对表单上的数据进行细微校验的需求,而这个“神奇的”工具并不提供该功能。为了规避这些局限性,我们花了比使用简单的 JSF 实现整个界面更多的时间去搞这个设计器,不管怎样,我们最后还是搞定了。

在另外一个客户那里,某个开发者曾告诉我说,“他花了两天多时间尝试对一些特殊需求进行建模,而他本可以用 Java 在半小时内直接实现的!”还有一个客户尝试运行交易服务和有状态服务,而这不幸需要以 Web 服务方式调用服务。在使用 WS-Addressing,WS-AtomicTransaction 等标准进行实验并试图拼接一些框架之后,基本上他放弃了整套 BPM 工具。

而下一个客户在竞标初期就将厂商踢出了局,因为他们需要更多的资金以便自己提供一套 Java API。

所有这些例子有一个共同点:工具使得开发者的工作更困难而非更简单!这些工具没有减少开发所需的时间和金钱。它们对使得业务和 IT 相契合并没有提供进一步的帮助,这是因为所需的技术模型非常复杂以至于不能和业务流程模型完全相一致。你有看过 BPEL 模型(所制作的流程图)和业务人员最初所画的流程图有任何共同之处的吗?

那么,BPM 不起作用吗?难道业务和 IT 契合始终是一个神话?当然不是!话虽如此,我们却不得不反思我们做 BPM 项目的方式。经过过去几年的不断反思,我们找到了 BPM 在真实项目中的运作之道。

简单说来,BPM 更多地关注流程的协作以及充分考虑协作过程中参与的不同角色,并使人们按照他们期望的方式工作。因此,它不太以工具为中心,因为就算我们需要用工具,也应该是工具来适应我们的工作方式。我们必须结束那种工具强迫我们按照厂商规定的方式来工作的情况。不同的角色使用不同的工具,所以不存在独一无二的工具。虽然这看起来显而易见,但许多工具还是试图与此背道而驰。

为了能够使得业务和 IT 相契合,我们开发了一种使用 BPMN(业务流程建模和标记)的方法论。它以流程模型为中心实现协作,我们可以进行讨论并将需求、业务规则或其他物件连接起来、使开发状态形象化、使业务驱动的测试场景得以细致明确等等。它不仅仅可以对可执行的流程进行建模,而且还对周边“池”中的各组织的视角进行建模,以使业务和 IT 视图相契合。

因此,BPMN 提供了一种很大的可能性:“池”。“池”的使用为用同一种模型来构建“业务特有的”和技术的两个方面,并为设置二者间的正确的关系提供了可能。在我们的中对此进行了详细的描述,并且在官方 BPMN 样例文档中提供了一个例子。你也可以通过我同事写的一篇博文弄明白我现在所表达的意思。总之,我们把那些看作BPM 的真正价值,而不是业务人员“描画”可执行的流程。

我们已经在一些客户那里实践过这种方法,有些客户甚至还在使用Microsoft Visio 工具。当然了,在过去几个月里,我们也开发了工具在几个试点客户那印证这种方法,其中最重要的一个大项目是为一家大型德国电信公司做的。目前,我们以通过camunda fox 开源项目发布所有资料,其第一版本将很快会公之于众。我们希望分享我们的经验,通过讨论吸收新观点,并帮助BPMN 规范以得以正确采用。那样它就会为每个人创造真正的价值,而不仅仅是为那些工具厂商的银行账户增值;-),如果顺利的话,我们可以跳过Gartner 的技术成熟度曲线理论中所谓的“幻灭期”,尤其针对BPMN 2.0 而言。

让我们更具体一点看看我刚刚提到的那个电信客户项目。当时我们所面临的环境仅仅是使用了许多EJB、一些JMS 以及有限数量的JBoss ESB 服务的Java EE。流程还没有进行统一文档化,业务部门大多采用事件驱动流程链(EPC)的方式,而IT 人员尽一切所能使用了UML、Power Point 等等。我们的目标是针对业务和IT,通过引入BPMN 作为建模标记,使其成为保持模型的技术化和业务流程同步的桥梁。

我们最终达到了我们的目标!但当时是举步维艰,必须按部就班……

技术上讲,一个“超级棒”的JBoss SOA 平台启用,这意味着可以部署可执行流程已到JBoss jBPM 3.2 这一著名的开源流程引擎上。我们在几次不成功的尝试使用BPEL(其实并不适合技术环境)后做出了使用jBPM 的决定。主要的原因根本在于那些服务不能作为Web Services 来用,工具也不足够成熟,价格太昂贵并且也缺乏技术诀窍。因此,jBPM 是一个不错的选择,它可以让现有的Java 开发人员很快上手使用,并且对开发过程的影响也非常之小。在此我要特别要指出非常重要的一点:类似 JBoss jBPM 或者不久前的 Activiti ,这样的开源流程引擎对开发人员来说更像是某种框架或库,而不是一个完整的产品套件。它们可以容易实现客户化定制并集成到你自己的架构中。它们支持单元测试,理解起来也很容易。

记住:我们希望给不同的角色提供其所需的工具。开发人员乐于接受 Java、Eclipse、JUnit、Subversion、Maven 等工具。因此他们应该能够继续使用这些工具!

业务分析人员有一个商业化工具 Signavio edition 在手,这是这些业务人员乐于使用的工具。而开发人员并不一定要使用它,因为访问存储模型的方式是多种多样的,你可以任意选择。

问题是:“如果我们用不同的工具而它们使用不同的存储库,那么如何才能使这些(工具产生的)模型同步呢?”解决办法也很简单:我们在不同的工具和存储库之间创建了一个粘合“层”。这一粘合包含了一个简单 web 应用,它能够访问存储流程模型的 Signavio 存储库和存储技术工件的 SVN 的。基于工件的不同类型,我们做不同的特殊处理。比如从 Signavio BPMN 模型生成 jBPM 模型。这种粘合层已经成为了 camunda fox 的一部分,下面将对此展开具体讨论。

保持业务流程模型和技术流程模型一致是非常重要的,因为这是保持流程模型版本最新的唯一方法。这极其重要,不仅仅出于归档目的,也是为了在业务流程模型一级报告 KPI(关键性能指标)或类似指标。当然,我们可以使用相对容易的粘合层达到该目标,而无需所谓的高度精良的零代码工具。

为了说明粘合层怎样发挥作用,我会列举几个截屏来演示。试想某个业务分析师创建了一个业务流程模型,并且已经完成了第一次迭代。他想要将其递交给 IT 团队以便实现该流程。他通知了技术项目头头告诉他可以开始工作了,这只需通过电子邮件发送一个链接就可以轻松搞定。好了,那现在该项目的头儿有活儿可干了,他需要对 BPMN 模型做一个操作以便在 SVN 中创建一个开发项目。这一操作可以通过项目模板来完成,而此模板是由一个从 BPMN 模型所创建的 jBPM 流程定义来生成的。我们通过一种自己实现的“特殊的映射”来实现该模板。所涉及的基础映射可以延展到全公司、整个部门、甚至是某个具体项目的规范和模式。即便是 BPMN 2.0,使用映射也是有意义的,在我的博客中你也许能找到其中的原因。

接下来,开发人员开始工作,完成所有那些另人繁琐的技术细节,在流程中加入所谓的ActionHandlers,它在流程运行的整个过程中负责执行Java 代码。这感觉基本上和其他Java 开发项目没什么区别了。

流程没有必要一定要部署到SOA 平台才能测试,正常的JUnit 测试、持续集成等等都可以。总之,常规的Java 和jBPM 开发都没问题。:-)

你可能已经猜到Signavio 和jBPM 模型之间的连接在后台保存。所以一旦开发者有更改行为,我们就可以在camunda fox(web 应用)中看到。并不是所有更改所引起的变化都应该合并在BPMN 模型中,所以开发人员需要向业务分析人员发送邮件或安排一个切实的会议进行通知。他们可以使用fox GUI 来发现简单的区别并将这些更改复制回Signavio 存储库中。

事实证明那种方法很奏效。在项目最后,我们所使用的描述性的BPMN 图和可执行jBPM 流程实现了同步。而大家喜欢它的原因各不相同:BPMN 在业务部门得到认可,而这种及时更新的流程描述确实大受欢迎。这种轻量级的开源流程引擎在开发过程中很实用,并且对Java 开发人员来说很直观,我认为这是极为重要的一点。正是两者之间的粘合增加了原本缺乏的关联。与此同时,我们在另一个客户的不同项目中也尝试了该方法,并且结果证明同样非常有效。但是请记住这种方法只是个样例;如果你尝试不同的做法,尽管去尝试——使用适合的工具来配合你的需求!

接下来,我们尽力争取另一个“唾手可得”的硕果。因为在不同的模型和粘合层之间有了一个链接,我们就可以有一个中心入口点去提供流程的概貌。我们可以得知有哪些流程版本,哪个版本发布在业务端,哪个BPMN 版本作为jBPM 流程来部署到引擎,以及在引擎上并行运行着哪些不同的版本等等。

就算在引擎上,也可能存在不同版本的流程同时运行。这些链接也可以显示一些用来测量运行在jBPM 引擎上的流程在BPMN 级别的KPI。如下图所示。

坦白地讲,我们在这儿所做的只是冰山一角!将此作为出发点,有无限的可能对粘合层进行扩展。一个有趣的方向是对分布式团队(比如离岸外包项目)进行支持。这种情况下你需要更多的交互功能。这些功能包括比如讨论流程模型并归档关联的讨论邮件。这离构建一个通用访问点访问存储库和工件,能够让它们互相标示、连接或与流程模型连接起来的想法只有一步之遥。这使得以Word 文档记录的项目订单实现可追踪性,并且可以在网络硬盘上保存BPMN 图形和技术模型。目前我们正在开发一些不同类型的标示和虚拟文档以期提高客户体验和整体感觉。你可以通过查询 Activiti Cycle Vision 继续了解这方面类似的发展方向。

一个更有趣的方向,也是我们想要在接下来的客户项目中攻克的是提供更好的流程测试支持,这在我的博文中有所描述。还记得我提到过我们目前正在做的一个数据流原型吗?它能够动态显示被处理数据的数据流,该数据在BPMN 级别上依附于流程的Java 类中使用或产生。

这种数据流原型会特别便于使用,如果你要实现“只需”调用服务的高度自动化流程,你会花大量时间纠结于这么一个问题:“我需要哪个数据,而这个数据是由谁在何处创建的?”最后,也是最重要的是,我觉得将流程和规则相结合具有巨大的潜力。不是什么新鲜事儿是吧?开放的粘合层使得你很容易地在业务级别通过决策表来创建规则,并且把规则和BPMN 流程模型关联起来。在可执行流程中,这归结为Java 代码的一小部分,比如说,JBoss Drools,一个绝妙的开源规则引擎。虽然一些大的厂商已经提供了类似的东西,但是我们的方法也将会把这一功能引入到开源世界中。

希望我已经描述清楚了如何使得业务流程模型和技术流程模型同步这一想法。我想要概括的是有一种实用的方式创建一些简单的工具来支持你所需要的方法。此外,既然它是开源的,并且具有可扩展性,那么你就可以利用它来实现你自己的想法,扩展它以满足你的需要。我们已经有了使用这种方法的良好经验,而我们也将会继续开发camunda fox,在未来不断的试点项目中与客户携手一起努力。

当然,camunda fox 也不是什么灵丹妙药 ;-) 但是如果你的项目里用到了(Java)开发,那我认为值得你花时间去尝试使用camunda fox 并给我们提供反馈意见!我们每天还在学习很多新东西,而我很好奇我们最终会在哪里停步。我坚信,不管怎样,我们投入的所有精力终将会得到一个截然不同的方法用以开发以流程为中心的应用。好消息是:我认为这对大家都有好处:-)

查看英文原文: A collaborative approach for real-world BPM


感谢马国耀对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2010-08-25 00:004819
用户头像

发布了 52 篇内容, 共 18.9 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

React源码解读之更新的创建

flyzz177

React

华夏天信携手华为云开天aPaaS,打造安全、高效、节能的主煤流运输系统

华为云开发者联盟

云计算 后端 华为云

云原生微服务治理技术朝无代理架构的演进之路

华为云开发者联盟

云计算 云原生 后端 华为云 微服务治理

什么?Coolbpf 不仅可以远程编译,还可以发现网络抖动! | 龙蜥技术

OpenAnolis小助手

Linux 开源 ebpf coolbpf 龙蜥峰会

报名即将结束!11 大云原生领域开源技术干货一场拿下

阿里巴巴云原生

阿里云 开源 容器 微服务 云原生

「Go工具箱」gorilla/sessions包的使用及原理分析

Go学堂

golang 深度思考 个人成长 Web 11月月更

异常捕获中finally和return的用法

自由呼吸

Java 11月月更

元宇宙赛道逐渐清晰,虚实世界如何“破壁”?

旺链科技

区块链 产业区块链 元宇宙

大数据培训前景怎么样?

小谷哥

React源码分析2-深入理解fiber

goClient1992

React

React源码分析1-jsx转换及React.createElement

goClient1992

React

要想后期修改少,代码重构要趁早

华为云开发者联盟

云计算 后端 华为云

如何在几百万qps的网关服务中实现灵活调度策略

百度Geek说

网关 调度 动态配置 12 月 PK 榜

谈谈我工作中的23个设计模式

阿里巴巴云原生

阿里云 云原生 技术文章

1000 种兴趣和 1000 个兴趣小组 | 学点战略

赵新龙

TGO鲲鹏会 CTO 战略

Function源码解析与实践

京东科技开发者

编程语言 Function 编程‘’ 后端、

上新啦KIT

HarmonyOS SDK

HMS Core

预告|2022 星策 Summit 首批嘉宾确认,大会火热报名中!

星策开源社区

机器学习 开源 数字化 管理层 企业转型

前端培训中应该怎么学习web前端

小谷哥

React源码解读之React Fiber

flyzz177

React

DDD与EDA-核心逻辑提炼方法论

胖子笑西风

Java 架构 DDD 事件驱动 EDA

2023年 DevOps 七大趋势

SEAL安全

1亿条数据批量插入 MySQL,哪种方式最快?

小小怪下士

Java MySQL 程序员

跨境电商ERP也爆单,分布式新型数据库迎战

OceanBase 数据库

数据库 oceanbase

规则引擎Drools在贷后催收业务中的应用

vivo互联网技术

drools 规则引擎

KVC原理与数据筛选

京东科技开发者

后端 数据处理 KV存储引擎 KV查询

移动跨端框架发展史及优劣对比

FinFish

前端框架 跨端框架 移动端跨端 跨端发展

信息论与编码:随参信道特性

timerring

11月月更 信息论 移动通信

PGL图学习之基于GNN模型新冠疫苗任务[系列九]

汀丶人工智能

图神经网络 GNN 11月月更

ShareSDK Android端权限说明

MobTech袤博科技

React源码解读之任务调度

flyzz177

React

一种适用于真实世界BPM的协作方式_Java_Bernd Ruec​ker_InfoQ精选文章