聶亞飛,姚錫凡,周際鋒
(華南理工大學(xué) 機(jī)械與汽車工程學(xué)院,廣東 廣州 510640)
業(yè)務(wù)流程是實(shí)現(xiàn)企業(yè)目標(biāo)價(jià)值手段,幾乎所有企業(yè)的目標(biāo)都是希望應(yīng)用程序能夠提供業(yè)務(wù)流程全面的支持。企業(yè)是依靠業(yè)務(wù)流程執(zhí)行業(yè)務(wù)操作,可以通過(guò)業(yè)務(wù)流程的自動(dòng)化提高來(lái)業(yè)務(wù)效率。業(yè)務(wù)流程具有很強(qiáng)的動(dòng)態(tài)性。企業(yè)必須敏捷的改進(jìn)、修改、優(yōu)化業(yè)務(wù)流程來(lái)滿足客戶日益增長(zhǎng)的需求,從而提高整個(gè)企業(yè)的效率。業(yè)務(wù)流程的每一個(gè)改變和優(yōu)化都要反映到為這些提供支持的程序上。企業(yè)的應(yīng)用程序只有快速有效地適應(yīng)商業(yè)的需求才能夠在市場(chǎng)上保持強(qiáng)有力的競(jìng)爭(zhēng)力。
改進(jìn)和優(yōu)化應(yīng)用程序是非常難的工作,而且相當(dāng)費(fèi)時(shí)。由于信息系統(tǒng)需要時(shí)間來(lái)實(shí)施、測(cè)試和部署,因此信息系統(tǒng)不能對(duì)業(yè)務(wù)流程的變化立即做出反應(yīng)。信息系統(tǒng)適應(yīng)業(yè)務(wù)流程變化所花費(fèi)時(shí)間的長(zhǎng)短有幾個(gè)影響因數(shù),其中最重要的因數(shù)是應(yīng)用程序的狀態(tài)。應(yīng)用程序的每次修改都會(huì)減少其結(jié)構(gòu)體系對(duì)于未來(lái)變化的魯棒性。因此,需要提供一種更為有效的業(yè)務(wù)流程來(lái)實(shí)現(xiàn)應(yīng)用程序便捷的修改和優(yōu)化[1-2]。
BPEL是一種描述業(yè)務(wù)流程、計(jì)算機(jī)可執(zhí)行的標(biāo)準(zhǔn)語(yǔ)言[3]。BPEL最重要的結(jié)構(gòu)是Web服務(wù)的調(diào)用。Web服務(wù)技術(shù)提供了一種分布式環(huán)境,應(yīng)用程序或組件以一種跨平臺(tái)、跨語(yǔ)言的方式進(jìn)行無(wú)縫集成[4]。BPEL還支持長(zhǎng)時(shí)間運(yùn)行的進(jìn)程和補(bǔ)償,允許撤消未成功完成的部分工作。BPEL的重要功能[5-6]包括:通過(guò)服務(wù)組合描述業(yè)務(wù)流程的邏輯;將較小的流程和服務(wù)集成為較大的業(yè)務(wù)流程;同步和異步處理服務(wù)調(diào)用的操作并且管理在隨后出現(xiàn)的回調(diào);串行或并行調(diào)用服務(wù)操作;在出現(xiàn)故障時(shí)有選擇地完成補(bǔ)償活動(dòng);維持或中斷多線程長(zhǎng)時(shí)間運(yùn)行的事務(wù)活動(dòng);恢復(fù)中斷或失敗的活動(dòng),減少工作重復(fù);傳入消息到適當(dāng)?shù)某绦蚝突顒?dòng)中;關(guān)聯(lián)業(yè)務(wù)流程的要求;根據(jù)執(zhí)行時(shí)間計(jì)劃活動(dòng)并確定它們的執(zhí)行順序;并行執(zhí)行活動(dòng)并定義并行流在同步條件下出現(xiàn)的方式;處理與消息和時(shí)間相關(guān)的事件??蓤?zhí)行業(yè)務(wù)流程是集成一系列現(xiàn)有存在的服務(wù)的過(guò)程,當(dāng)描述BPEL的業(yè)務(wù)流程時(shí),實(shí)際上是定義一個(gè)新的Web服務(wù)來(lái)集成現(xiàn)有的服務(wù)。新建的BPEL使用一組端口類型的接口來(lái)整合Web服務(wù),通過(guò)這個(gè)接口提供像任何其他Web服務(wù)一樣的操作,要調(diào)用BPEL的業(yè)務(wù)流程,就必須要調(diào)用集成的Web服務(wù)[2]。BPEL通過(guò)兩種方式和其他服務(wù)相互作用,而這種相互的關(guān)系稱之為伙伴鏈接。BPEL流程調(diào)用Web服務(wù)的鏈接稱為調(diào)用伙伴鏈接,通常一個(gè)BPEL流程至少要有一個(gè)調(diào)用伙伴鏈接來(lái)調(diào)用Web服務(wù)?;锇殒溄右部梢允擎溄拥娇蛻舳瞬⑶夷軌蛘{(diào)用BPEL流程,這種稱為客戶端伙伴鏈接。
Drools是Java編寫的、開(kāi)放源代碼的業(yè)務(wù)邏輯集成平臺(tái)[7]Drools有很多優(yōu)點(diǎn):1)易于理解:比Java或其他命令式的編程語(yǔ)言的代碼更簡(jiǎn)單。2)提高了系統(tǒng)的維護(hù)性能:因?yàn)橐?guī)則簡(jiǎn)單易懂,就可以省出更多時(shí)間來(lái)發(fā)現(xiàn)和解決問(wèn)題。3)能夠處理不斷變化的復(fù)雜問(wèn)題:相比修改程序,更容易添加新的規(guī)則、修改或刪除現(xiàn)有規(guī)則。4)靈活性:它能夠更好地適應(yīng)需求或?qū)?shù)據(jù)模型的變化。更改或重寫應(yīng)用程序不會(huì)是一個(gè)簡(jiǎn)單的任務(wù),但是Drools形式化的規(guī)則使得更改或重寫應(yīng)用程序是一件輕松的事情。5)合理性能:Rete算法的應(yīng)用使得系統(tǒng)的性能理論上并不取決于規(guī)則的數(shù)量。由于規(guī)則引擎本質(zhì)上是“if-then”的繼承,因此可以獨(dú)立應(yīng)用許多優(yōu)化規(guī)則[8-9]。采用基于Drools的車間調(diào)度優(yōu)化結(jié)果來(lái)實(shí)現(xiàn)BPEL服務(wù)調(diào)用流程模型。圖1是基于Drools的車間調(diào)用優(yōu)化得到的甘特圖和工序與機(jī)床對(duì)應(yīng)圖。工件的每個(gè)工序按順序分別在不同的機(jī)床上加工。新建一個(gè)名稱為JobShopServiceProj的Web工程,建立Workpiece1Service.java,Workpiece2Service.java,Workpiece3Service.java,Workpiece4,Service.java4個(gè)類,分別是工件1、工件2、工件3和工件4的機(jī)床加工流程。
1)生成車間調(diào)度Web ServiceWSDL描述文件,分別右鍵Workpiece1Service.java,Workpiece1Service.java,Workpiece1Service.java,Workpiece1Service.java, 選 擇 Web Services->CreateWeb Service,按照界面選擇功能。然后點(diǎn)擊Finish就會(huì)生成java類對(duì)應(yīng)的wsdl文件,并發(fā)布到tomcat中,同時(shí)會(huì)生成調(diào)用服務(wù)的客戶端,選擇start()->invoke,對(duì)該方法進(jìn)行測(cè)試。
圖1 基于Drools車間調(diào)度的優(yōu)化結(jié)果Fig.1 The optimization results based on Drools shop scheduling
2)Web Services服務(wù)部署。為了能夠讓其他服務(wù)去調(diào)用Workpiece1Service,必須先將其部署在服務(wù)器上。右鍵JobShopbServiceProj工程,Export->W(wǎng)eb->W(wǎng)AR file, 將War包導(dǎo)出至 Tomcat的 webapps目錄下,即完成部署。
1)創(chuàng)建BPEL工程
服務(wù)部署完成后,下一步就是BPEL的開(kāi)發(fā)。新建一個(gè)名為JobShopBPEL的BPEL工程。右鍵JobShopBPEL,新建一個(gè)名為JobShopProcess的業(yè)務(wù)流程,名字空間可設(shè)為:http://eclipse.org/bpel/sample,選擇 Synchronous BPEL Process,單擊Finish完成BPEL流程創(chuàng)建。
2)導(dǎo)入工件加工服務(wù)的WSDL文件
將 Workpiece1Service.wsdl、Workpiece2Service.wsdl,Workpiece3 Service.wsdlWorkpiece4Service.wsdl4個(gè)wsdl文件復(fù)制到BPLE工程目錄下。3)設(shè)置伙伴鏈接
BPEL把所有服務(wù)都稱之為伙伴鏈接。BPEL伙伴鏈接是和其他伙伴發(fā)生對(duì)話時(shí)的接收器[10]。BPEL創(chuàng)建時(shí)自動(dòng)生成的WSDL(JobShopProcess.bpel)本身也是一個(gè)伙伴鏈接。對(duì)于流程中要用到的加工服務(wù),同樣要生成對(duì)應(yīng)的伙伴鏈接。打開(kāi)JobShopProcess.bpel,在右上角的 Partner Links中,增加 4個(gè)鏈接,分別是 Workpiece1PL、Workpiece2PL、Workpiece4PL和Workpiece4PL。
設(shè)置伙伴鏈接,右擊Workpiece1PL,選擇屬性打開(kāi)屬性視圖,在屬性視圖中Details頁(yè)面中點(diǎn)Browser,打開(kāi)對(duì)話框。點(diǎn)Add WSDL把4個(gè)WSDL即Workpiece1Service.wsdl,Workpiece2Service.wsdl,Workpiece3Service.wsdl,Workpiece4Se rvice.wsdl添加進(jìn)來(lái)。
點(diǎn)擊Ok后,彈出伙伴鏈接類型定義,把名字取為Workpiece1PLPLT,點(diǎn) Next。 要求輸入 Role Name,這里輸入“Workpiece1Provider”,點(diǎn)Finish完成。同時(shí)在屬性視圖中把ParterRole選為Workpiece1Provider。以同樣的方式完成Workpi-ece2PL、Workpiece3PL和Workpiece4PL的設(shè)置。
4)修改JobShopProcessArtifacts.wsdl的輸入輸出
因?yàn)槟J(rèn)的輸入輸出不符合項(xiàng)目的要求,右鍵JobShopProcessArtifacts.w sdl文件,用open with WSDL Editor打開(kāi)該文件,轉(zhuǎn)到設(shè)計(jì)視圖里。點(diǎn)擊input后邊對(duì)應(yīng)的箭頭,打開(kāi)一個(gè)新的Editor對(duì)輸入消息進(jìn)行配置。選擇type添加元素,并設(shè)置元素的類型,Output設(shè)置類似。
5)創(chuàng)建調(diào)用服務(wù)時(shí)需要的變量和配置變量
圖2 BPEL流程設(shè)計(jì)Fig.2 The BPEL process design
每次invoke一個(gè)服務(wù)時(shí)都要有對(duì)應(yīng)的變量,加入變量。以Workpiece1為例,點(diǎn)擊Workpiece1Request變量,進(jìn)入屬性視圖中Details界面,點(diǎn)擊右上角的Browse按鈕,打開(kāi)類型選擇對(duì)話框,選擇對(duì)應(yīng)的Request服務(wù)定義。同理,其他7個(gè)變量的配置方法一樣。
BPEL流程設(shè)計(jì)如圖2所示。
1)If條件語(yǔ)句配置
選擇If,在屬性視圖中點(diǎn)開(kāi)Details頁(yè),輸入條件語(yǔ)句:$input.payload/tns:type=`Workpiece1',同樣方式配置Else If條件語(yǔ)句。
Invoke的作用是調(diào)用伙伴鏈接對(duì)應(yīng)接口下的對(duì)應(yīng)操作,還需要指定輸入輸出變量。在invoke的屬性視圖的Details頁(yè)面中進(jìn)行配置。2)BPEL流程發(fā)布:
BPEL流程最終的目的是發(fā)布成一個(gè)Web Service,通過(guò)調(diào)用服務(wù)的功能來(lái)完成任務(wù)。選擇 File->NewOther->BPEL2.0->BPEL Deployment Descriptor, 點(diǎn)擊 Finish即會(huì)生deploy.xml文件。
3)BPEL運(yùn)行與測(cè)試
①創(chuàng)建ODE服務(wù)器
從 Eclipse選擇 File->New->Other選項(xiàng), 選擇 Server,再選擇Apache Ode v1.x Server,點(diǎn)擊Finish即可創(chuàng)建Ode服務(wù)器。
右鍵 Ode v1.x Server, 選擇 “Add and Remove…”,將JobShopBPEL添加到Ode中。②測(cè)試服務(wù)調(diào)用
以Workpiece1為例,右鍵 Workpiece1Service.wsdl,選擇Web Services->Testwith web service explorer,在彈出的頁(yè)面中,點(diǎn)擊start()得到運(yùn)行結(jié)果。使用同樣的方法可以測(cè)試Workpiece2、Workpiece3和Workpiece4的服務(wù)調(diào)用。BPEL通過(guò)Ode服務(wù)器測(cè)試說(shuō)明了BPEL實(shí)現(xiàn)了服務(wù)的發(fā)布、調(diào)用和交互。
本研究以BPEL為基礎(chǔ),設(shè)計(jì)了一個(gè)機(jī)械加工的實(shí)例模型,將經(jīng)過(guò)Drools優(yōu)化的車間調(diào)度結(jié)果通過(guò)BPEL實(shí)現(xiàn)多服務(wù)交互規(guī)劃。詳細(xì)闡述了BPEL實(shí)現(xiàn)多服務(wù)建立、發(fā)布、交互和測(cè)試的全過(guò)程,結(jié)果表明BPEL能夠?qū)崿F(xiàn)多服務(wù)的調(diào)用和交互。
[1]Committee.WS-BPEL.[EB/OL].(2007)http://docs.oasis-open.org/wsbpel/2.0/wsbpel-v2.0.html.
[2]Matjaz B J,Benny M,Poomachandra S.Business Process Execution Language for Web Services Second Edition[M].UK:Packt Publishing Ltd.,2006.
[3]王雷,徐立臻.BPEL建模工具中業(yè)務(wù)流程模型到BPEL程序的換算法[J].計(jì)算機(jī)與數(shù)字工程,2009,239(9):43-46.WANG Lei,XU Li-zhen.BPEL business process modeling tools in themodel to the BPEL process of conversionmethod[J].Computer and Digital Engineering,2009,239(9):43-46.
[4]崔福東,喬彥友,常原飛.基于BPEL的Web服務(wù)快速組合框架[J]計(jì)算機(jī)工程,2010,36(7): 262-264.CUI Fu-dong,QIAO Yan-you,CHANG Yuan-fei.The Web services quick combination framework based on BPEL[J].Computer Engineering,2010,36(7): 262-264.
[5]Stany B,Jeremy B,Michael C.BPEL Cookbook [M].UK:Packt Publishing Ltd.,2006.
[6]Yuli V.SOA and WS-BPEL[M].UK:Packt Publishing Ltd.,2007.