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