写点什么

一种适用于真实世界 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:004879
用户头像

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

关注

评论

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

架构训练营 毕业设计

dog_brother

「架构实战营」

1月月更|推荐学java——Spring事务

逆锋起笔

spring事务管理 spring ioc java 编程 Spring Java Spring事务

TDSQL-A技术架构演进及创新实践

腾讯云数据库

tdsql 国产数据库

分享四款H5怀旧小游戏魔塔+伏魔记+三国霸业+寻仙纪

echeverra

前端 游戏

Redis:我是如何与客户端进行通信的

华为云开发者联盟

redis 通信 协议 指令 客户端

基于Flink CDC打通数据实时入湖

五分钟学大数据

flink 1月月更

MySQL 如何解决幻读(MVCC原理分析)

Ayue、

MySQL InnoDB 1月月更

中科柏诚:积极践行为中小企业服务宗旨,同乡村振兴有效衔接

联营汇聚

第四节:SpringBoot中web模版数据渲染展示

入门小站

springboot

Netty核心概念之ChannelHandler&Pipeline&ChannelHandlerContext

CRMEB

Go 语言快速入门指南:Go 读取文本文件

宇宙之一粟

Go 数据读取 Go 语言 1月月更

RavenDB起步--安装以及示例数据库

喵叔

为什么ConcurrentHashMap是线程安全的?

王磊

华青融天加入,龙蜥社区再添科技风险监测领域新伙伴

OpenAnolis小助手

Linux 开源 合作伙伴

TDSQL PostgreSQL执行计划详解

腾讯云数据库

tdsql 国产数据库

鸿蒙轻内核M核源码分析:LibC实现之Musl LibC

华为云开发者联盟

鸿蒙 内存分配 LibC Musl LibC Musl

在线XML转JSON工具

入门小站

工具

一、数据结构

喵叔

架构实战营模块六作业

Jude

架构实战营

RavenDB起步--客户端API(一)

喵叔

RavenDB起步--使用 RavenDB Studio

喵叔

ReactNative进阶(三十一): IoC 框架 InversifyJS 解读

No Silver Bullet

​React Native 1月月更 InversifyJS

事件驱动架构在 vivo 内容平台的实践

vivo互联网技术

微服务 云原生 事件驱动架构

TDSQL-C PostgreSQL版的高可用特性

腾讯云数据库

tdsql 国产数据库

智联生活行业加速器热门FAQ:物联网企业该如何与华为云合作?

华为云开发者联盟

物联网 华为云 智联生活 智联生活行业加速器 云市场

☕【Java深层系列】「并发编程系列」让我们一起探索一下CyclicBarrier的技术原理和源码分析

洛神灬殇

并发编程 AQS CyclicBarrier Java 线程 1月日更

模块1作业

卡西毛豆静爸

架构实战营

看过来!腾讯文档上架优麒麟软件商店啦

优麒麟

Linux 开源 腾讯 操作系统 麒麟操作系统

为数据库性能调优插上 AI 的翅膀 | 调优测试框架 Matrix 团队访谈

PingCAP

RavenDB起步--第一个 RavenDB 程序

喵叔

20000字详解大厂实时数仓建设 | 社区征文

五分钟学大数据

数据仓库 实时数仓 1月月更 新春征文

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