赵翔鹏的Blog Xiangpeng's Thinkpad

4一/070

Choreography lifeline

在CDL中,choreography生命周期比较复杂。规范5.7节用整整一页文字描述了choreography的lifeline。下面用状态机图重新画了一遍,看起来清晰一些(不保证完全正确):

注意,这里没有画complete condition相关的内容。
可以看出,finalizationBlock一直没有deinstall,这是否是CDL应该改进的一个地方?这个其实很关键的。

顺便指出,这个图是用Borland Together 2006画的,有些地方显示不出来,比如Enabled状态上其实有个doActivity,执行choreography body。感觉还是Rational System Architect比较好用,但是它的启动时间实在实在太慢了……

17六/060

“Life after BPEL”阅读笔记

#isubb#

今天读了WMP van der Aalst的"Life after BPEL"。先说BPEL跟他们提出的workflow patterns相比,BPEL还差了好几条没法表达;然后提出了一些需要解决的chanlleges,比如bpel的形式化分析,choreography,conformance的概念等等。

这篇文章还是延续了Aalst强悍的文风:

他们认为,作为一个abstract process建模的语言,BPEL是失败的,因为bpel总是从同一个role的角度看问题。(In our opinion BPEL failed as a language
for modeling abstract processes. Moreover, a BPEL specification is always given
from the viewpoint of one of the interacting partners.)

那么,WS-CDL总算是从全局角度看问题的,应该可以了吧?不,Aaslt先批评说CDL废话太多太烦琐(Unfortunately,
like most standards in the web services stack, the language is verbose
and complex.),然后说,CDL的问题是"not declarative"。也就是说,CDL里不应该有sequence,choice这样的控制结构……(The main problem
is that WS-CDL is not declarative. A choreography should allow for the specification
of the “what” without having to state the “how”. This is similar to
the difference between a program and its specification. One can specify what an
ordered sequence is without specifying an algorithm to do so!)

其实我也同意CDL是一个挺烂的语言,特别是它的规范。。。不过我觉得一个declarative的choreography语言也不能解决什么问题。

Aalst然后又说,他们已经有一个"more theoretical approach to the problem",见文章Inheritance of Interorganizational Workflows: How to agree to disagree without loosing control。大概的意思是先设计整体的choreography,然后投影到每个role上,这样就肯定保证生成的orchestration跟choreography一致……哎,其实也没有提出什么好办法吗。

这篇文章里面还列举了好多bpel形式化的工作。比较有趣的一篇是他们用petri-net做了一个完整的bpel语义:Formal Semantics and Analysis of Control Flow in WS-BPEL,第一作者还是个中国人。他们也考虑了fault handler中又出错,compensation中又compensate等细节问题。只不过语义部分那一堆堆的括号足以让我放弃看懂它的念头。

他们提供的BPEL2PNML工具值得试一试,看看它到底达到工业实用的程度了没有?

BPM reports这里放了Aalst他们研究组的大部分文章,因为是report,所以都比较新。

15五/060

BPEL教程

#isubb#

今天在oracle的网站上找到了很多bpel的资料。这才发现oracle的bpel引擎和编辑器都是免费下载的,还有一个bpel的论坛. 比较好的一个

其实ibm的bpel教程也还可以,但是内容比较简短,而且不是基于websphere讲的,用的是BPWS4J编辑器,这个编辑器只有简单的文本界面。

不过今天也找到一篇基于websphere的compensation的文章:)关于compensation的文章真的很难找啊,一般都是学术论文,工业界介绍bpel的文章大多都寥寥几句就把compensation带过了。感觉这篇文章还是很不错的。

13五/060

BPEL2.0和1.0的区别

#isubb#转载自[URL=http://anonymouse.org/cgi-bin/anon-www.cgi/http://en.wikipedia.org/wiki/BPEL#What.27s_new_in_WS-BPEL_2.0]wikipedia.org[/URL]

What's new in WS-BPEL 2.0

* New activity types (if-then-else, repeatUntil, validate, forEach, extensionActivity)
* Completion condition in forEach activity
* Variable initialization
* XSLT for variable transformations (New XPath extension function bpws:doXslTransform)
* XPath access to variable data (XPath variable syntax $variable[.part]/location)
* XML schema variables in Web service activities (for WS-I doc/lit style service interactions)
* Locally declared messageExchange (internal correlation of receive and reply activities)
* Clarification of Abstract Processes (syntax and semantics)

从语言研究的角度看,没有什么大的进步……最多就是修修补补,弄得好用一点吧。

15三/060

WS-CDL的介绍和一些相关工具

WS-CDL是Web services Choreography Description Language。与BPEL相比,BPEL强调的是以“我”为中心,描述我跟别人的交互,这被称为“orchestration“;而CDL是从一个观察者的层次来描述“他跟她交互,她再跟他交互”,这被称为“choreography”。CDL相当于是导演,BPEL相当于是演员。

这里是WS-CDL的一篇介绍性的文章一个幻灯片(强烈推荐),和W3C的WS-CDL规范WS Choreography Model OverviewWS-CDL: Primer

目前了解的跟CDL相关的开源项目有三个:Pi4soa, WS-CDL Eclipse, 和LTSA WS-Engineer。

1、Pi4soa是一个似乎有比较多人关注的项目,在sourceforge上有5个developer,主页连到一个小公司Pi4Tech。公司的CEO同时也是W3C的WS-Chor组的co-chair,

这是一篇介绍Pi4soa的文章:Choreography tools deliver on promise of SOA

The Pi4soa WS-CDL editor allows developers and architects to create messages and documents that conform to the WS-CDL specification. The simulator executes test scenarios against various choreography descriptions based on a pre-established sequence of messages that need to be exchanged between two parties.

2、WS-CDL Eclipse项目也是sf.net上的项目,但只有一个开发者。提供了简单的simulator。感觉Pi4Soa要比它好。

3、LTSA WS-Engineer是伦敦Imperial College的人做的,以前做BPEL验证比较有名,现在他们也想做CDL验证,不过还没有具体的实现。

最后,CDL跟Pi Calculus关系很紧密。打算最近看一下Pi Calculus,可以从我的这篇blog里找到一些链接。

12八/050

Workflow patterns(工作流模式)

workflow patterns跟design patterns相比,都是patterns,以前我只知道最流行的control patterns,感觉还是挺容易理解的。与design patterns相比,wf patterns都是很基本的control construct,还达不到dp的高度。

很流行的一篇文章workflow is just a pi-calculus出来之后,Aalst先生对此作了有力的批驳,除了Why workflow is not just a pi calculus,另一个不错的文章Pi calculus versus Petri nets: Let us eat “humble pie” rather than further inflate the “Pi hype”包括了不少对Pi Calculus局限的详细分析,提出了不少“challenges”,其中的关键就是pi calculus不能支持所有的patterns。

但是,能支持所有patterns的workflow流程定义语言我只知道yawl,即使petri net也有其局限性,详见这篇好文章formal frameworks for workflow modelling。其实我觉得用process algebra分析workflow还是很有价值的,至少做model check还是挺方便的嘛,而且也比较清晰。至少研究bpel的人有不少是用process algebra做验证了。但是,好像petri net的功能也差不多啊……哎,不管它~从混论文的角度出发,再找两个motivation,就可以做篇paper了:A csp model for workflow,嘿嘿。

今天从www.workflowpatterns.com 了解到还处于beta状态的data patterns和resource patterns。这样,workflow patterns分为control / data / resource三种,对应Aalst所说的workflow的三个“dimension”。这个打算下午再看看。

附:

www.workflowpatterns.com 是Aalst老大办的权威性网站。

http://is.tm.tue.nl/research/patterns/flash_animations.htm

26七/050

BPEL:工作流技术发展趋势?

先看几篇前辈牛人的文章:

工作流之大局势 作者把wfmc派叫做保皇党,web service派叫做革命党~轻松幽默又清晰透彻。看好bpel是未来发展的方向。

誰來一統BPM江湖

18七/050

关于BPEL的好网站收集

http://www.answers.com/topic/bpel

http://en.wikipedia.org/wiki/BPEL

这两个网页都收集了很多有用的链接,包括各大bpel engines。似乎wiki收集的多一些。

http://www.bpelsource.com/

这个网站看起来内容也很丰富,自称是"an objective guide to leading BPEL products, information and resources"

17七/050

BPEL中的partnerlink和partnerlinktype

partnerlink是bpel与外界实体通讯的管道。下面是我对partnerlink和partnerlinktype个人的理解,不敢保证完全正确。(以下都省略partner前缀,简称link和linktype)

根据其中定义的role的个数是一个还是两个,linktype分为单向和双向的。linktype只定义通道,但没有定义通道的“方向”,即哪一端是bpel,哪一端是客户(相对于bpel)。对双向的linktype而言,这个link中用myrole和partnerrole说明这个link的“方向”。

单向的linktype说明这个link通道中的信息流动是单向的。所以对应的link中只能指定myrole或者partnerrole,不能二者兼有。

一个linktype可以定义多个link。比如loan-approval的例子(见bpel规范),一个叫customer的link和一个叫approver的link都是同一个linktype——loanApprovalLinkType,这个linktype只有一个role,叫“approver”。

bpel是真实approver的代理,从顾客customer的观点来看,顾客认为bpel就是approver。所以customer link中把approver定为“myrole”。相对于真正的approver而言,bpel是客户(准确的说是客户的代理),真正的approver是bpel的“partner”。所以approver link中,把approver认作“partnerrole”。这里xxx link很容易混淆其含义。记住,link的名字都是相对bpel而言的。

可以推知,凡是link中定义了myrole的地方,都是外界要调用bpel的地方,必然对应receive操作。

另外,这种“代理”的用法可以认为是对原先接口的重载。在loan-approval例子中,并不是所有的request都要经过真正的approver;准确的说,真正的approver只处理数量>10000的货物。小额的货物就被bpel直接通过了。可以理解为如下的代码:
bool bpel::approve (request)
{

17七/050

ActiveBPEL安装和loanapproval示例的部署

activebpel的文档太烂了,费了我好久才搞定……记录一下安装过程。

首先当然是配好tomcat。

要安装activebpel,解压activebpel-1.1.4-bin.zip,执行install.bat即可。会在%CATALINA_HOME%/webapps目录下生成一堆文件。

此时可以从http://127.0.0.1:8080/BpelAdmin/查看activeBPEL的管理客户端。这时deployedprocesses的数目为0。

至此bpel engine安装完成,下面部署loan-approval例子,该例子可以从http://www.activebpel.org/docs/samples.php下载,注意,activebpel-1.1.4-bin.zip里不包含任何例子,必须单独下载。

解压了loan_approval.zip后,执行ant deploy对其部署。部署之后,%CATALINA_HOME%/bpr文件夹中会生成一个配置文件。这时刷新http://127.0.0.1:8080/BpelAdmin/home.jsp,可以看到有一个Deployed Processes名为oanApprovalProcess,可以查看其.bpel代码。

最后就是执行这个bpel process了。按照文档中说的,ant ws-test-client用于进行web service测试,ant client是jar客户端测试,http://localhost:8080/bpel_example_client_page/index.jsp是web客户端测试。但是我在这一步却失败了,总是提示找不到bpel_example_config.xml。

回忆在ant部署过程的deploy-config中,提示在%CATALINA_HOME%/temp下面copy了一个文件。到temp目录下看看,果然就是这个 bpel_example_config.xml。把这个文件拷贝到%CATALINA_HOME%下面,一切就正常了!

在运行过程中,可以从BpelAdmin观察ActiveProcesses,点一个process进去看看,哈哈,有图形界面,真不错。