聶亞飛,姚錫凡,周際鋒
(華南理工大學 機械與汽車工程學院,廣東 廣州 510640)
業務流程是實現企業目標價值手段,幾乎所有企業的目標都是希望應用程序能夠提供業務流程全面的支持。企業是依靠業務流程執行業務操作,可以通過業務流程的自動化提高來業務效率。業務流程具有很強的動態性。企業必須敏捷的改進、修改、優化業務流程來滿足客戶日益增長的需求,從而提高整個企業的效率。業務流程的每一個改變和優化都要反映到為這些提供支持的程序上。企業的應用程序只有快速有效地適應商業的需求才能夠在市場上保持強有力的競爭力。
改進和優化應用程序是非常難的工作,而且相當費時。由于信息系統需要時間來實施、測試和部署,因此信息系統不能對業務流程的變化立即做出反應。信息系統適應業務流程變化所花費時間的長短有幾個影響因數,其中最重要的因數是應用程序的狀態。應用程序的每次修改都會減少其結構體系對于未來變化的魯棒性。因此,需要提供一種更為有效的業務流程來實現應用程序便捷的修改和優化[1-2]。
BPEL是一種描述業務流程、計算機可執行的標準語言[3]。BPEL最重要的結構是Web服務的調用。Web服務技術提供了一種分布式環境,應用程序或組件以一種跨平臺、跨語言的方式進行無縫集成[4]。BPEL還支持長時間運行的進程和補償,允許撤消未成功完成的部分工作。BPEL的重要功能[5-6]包括:通過服務組合描述業務流程的邏輯;將較小的流程和服務集成為較大的業務流程;同步和異步處理服務調用的操作并且管理在隨后出現的回調;串行或并行調用服務操作;在出現故障時有選擇地完成補償活動;維持或中斷多線程長時間運行的事務活動;恢復中斷或失敗的活動,減少工作重復;傳入消息到適當的程序和活動中;關聯業務流程的要求;根據執行時間計劃活動并確定它們的執行順序;并行執行活動并定義并行流在同步條件下出現的方式;處理與消息和時間相關的事件。可執行業務流程是集成一系列現有存在的服務的過程,當描述BPEL的業務流程時,實際上是定義一個新的Web服務來集成現有的服務。新建的BPEL使用一組端口類型的接口來整合Web服務,通過這個接口提供像任何其他Web服務一樣的操作,要調用BPEL的業務流程,就必須要調用集成的Web服務[2]。BPEL通過兩種方式和其他服務相互作用,而這種相互的關系稱之為伙伴鏈接。BPEL流程調用Web服務的鏈接稱為調用伙伴鏈接,通常一個BPEL流程至少要有一個調用伙伴鏈接來調用Web服務。伙伴鏈接也可以是鏈接到客戶端并且能夠調用BPEL流程,這種稱為客戶端伙伴鏈接。
Drools是Java編寫的、開放源代碼的業務邏輯集成平臺[7]Drools有很多優點:1)易于理解:比Java或其他命令式的編程語言的代碼更簡單。2)提高了系統的維護性能:因為規則簡單易懂,就可以省出更多時間來發現和解決問題。3)能夠處理不斷變化的復雜問題:相比修改程序,更容易添加新的規則、修改或刪除現有規則。4)靈活性:它能夠更好地適應需求或對數據模型的變化。更改或重寫應用程序不會是一個簡單的任務,但是Drools形式化的規則使得更改或重寫應用程序是一件輕松的事情。5)合理性能:Rete算法的應用使得系統的性能理論上并不取決于規則的數量。由于規則引擎本質上是“if-then”的繼承,因此可以獨立應用許多優化規則[8-9]。采用基于Drools的車間調度優化結果來實現BPEL服務調用流程模型。圖1是基于Drools的車間調用優化得到的甘特圖和工序與機床對應圖。工件的每個工序按順序分別在不同的機床上加工。新建一個名稱為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文件,并發布到tomcat中,同時會生成調用服務的客戶端,選擇start()->invoke,對該方法進行測試。
圖1 基于Drools車間調度的優化結果Fig.1 The optimization results based on Drools shop scheduling
2)Web Services服務部署。為了能夠讓其他服務去調用Workpiece1Service,必須先將其部署在服務器上。右鍵JobShopbServiceProj工程,Export->Web->WAR file, 將War包導出至 Tomcat的 webapps目錄下,即完成部署。
1)創建BPEL工程
服務部署完成后,下一步就是BPEL的開發。新建一個名為JobShopBPEL的BPEL工程。右鍵JobShopBPEL,新建一個名為JobShopProcess的業務流程,名字空間可設為:http://eclipse.org/bpel/sample,選擇 Synchronous BPEL Process,單擊Finish完成BPEL流程創建。
2)導入工件加工服務的WSDL文件
將 Workpiece1Service.wsdl、Workpiece2Service.wsdl,Workpiece3 Service.wsdlWorkpiece4Service.wsdl4個wsdl文件復制到BPLE工程目錄下。3)設置伙伴鏈接
BPEL把所有服務都稱之為伙伴鏈接。BPEL伙伴鏈接是和其他伙伴發生對話時的接收器[10]。BPEL創建時自動生成的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)創建調用服務時需要的變量和配置變量
圖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流程發布:
BPEL流程最終的目的是發布成一個Web Service,通過調用服務的功能來完成任務。選擇 File->NewOther->BPEL2.0->BPEL Deployment Descriptor, 點擊 Finish即會生deploy.xml文件。
3)BPEL運行與測試
①創建ODE服務器
從 Eclipse選擇 File->New->Other選項, 選擇 Server,再選擇Apache Ode v1.x Server,點擊Finish即可創建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實現了服務的發布、調用和交互。
本研究以BPEL為基礎,設計了一個機械加工的實例模型,將經過Drools優化的車間調度結果通過BPEL實現多服務交互規劃。詳細闡述了BPEL實現多服務建立、發布、交互和測試的全過程,結果表明BPEL能夠實現多服務的調用和交互。
[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建模工具中業務流程模型到BPEL程序的換算法[J].計算機與數字工程,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.