BPEL(发音为'bipple'或'bee-pell')是Business Process Execution Language的缩写,意为业务过程执行语言,是一种基于XML的,用来描写业务过程的编程语言,被描写的业务过程的每个单一步骤则由Web服务来实现。
2002年IBM、BEA和微软一起开发和引入了BPEL作为描写协调Web服务的语言。这个描写的本身也由Web服务提供,并可以当作Web服务来使用。
通过BPEL可以描写一个参加一个Web服务过程的Web服务的接口,比如信息需要按照怎样的顺序被输入,但是BPEL无法用来描写一个业务过程的调谐。
WS-BPEL原名BPEL4WS,是基于WSDL建立的,除WSDL外它还使用XML模式定义、XPath和WS-Addressing等标准。
BPEL的目的在于大规模编程,值得注意的是BPEL不直接支持人机对话,BPEL所描写的过程仅与Web服务通信,而这些Web服务却可以提供与用户的信息交换,但它们不是用户本身。
BPEL本身提供一个基础,在这个基础上可以发展支撑新的应用的“支柱”。比如在BPEL本身的设置中就已经包括了“抽象业务过程”和“可执行业务过程”。其它的支柱包括BPELJ([1])和BPEL4People([2])。
BPELJ的目标在于将Java语言结合到BPEL中来加速其操作过程,缺点是它与Java息息相关,不能没有Java运行。IBM和SAP公司一起发表了一份名为BPEL4people的白皮书,其目的是将BPEL扩展为能够直接与人交换信息。
BPEL使用块状结构,在定义局部环境时可以定义适用于这个环境范围内的变数(变量)。此外故障处理、补偿处理和事故处理也可以与局部环境相连。
BPEL本身没有定义描写过程模型的图像表达,但是BPMN标准可以用来描写BPEL的模型。
基本活动,这些是最基础的,也就是说不基于其它活动的活动:
- assign——赋值
- invoke——同步或异步地呼叫一个Web服务
- receive/reply——提供一个同步或者异步呼叫一个Web服务的接口
- throw——提示一个错误,一个故障处理可以处理这样的错误。假如一个错误不被处理的话它最终到达最高层后导致过程的终止
- wait——等候一个时机或者一段时间
- empty——无所事事,比如在一个错误发生后可以不做反应来消除这个错误
结构性活动,这些活动包括其它活动,可以以此建立复杂的过程:
- sequence——按照一个序列处理一系列活动
- while——在一个条件满足的情况下处理一个活动
- switch——按照不同条件处理不同活动
- flow——平行或者按照随意顺序处理活动
- pick——按照外部事件从过程的角度不定值地选择
scopes——使用这个结构可以将一组活动组织在一起作为一个处理单位。通过这个组织方法多个活动可以使用同一个故障处理、事故处理和补偿处理。通过补偿处理BPEL可以处理长时间的处理。
使用BPEL引擎可以执行BPEL程序。
- Oracle BPEL Process Manager——甲骨文公司的BPEL标准的执行,带有JDeveloper和Eclipse的图像式模型和调配工具
- Twister——一个开放源代码的BPEL标准的执行,支持面向服务架构和人机界面,现名Agila
- ActiveBPEL——一个开放源代码的BPEL4WS 1.1的执行
- BPWS4J——IBM的BPEL执行
- Apache ODE——Apache ODE引擎(还支持versioning)
- RiftSaw——基于ODE,并针对JBOSS Server优化的BPEL引擎