隨著 BPEL 的引進,SOA 已有了大的發展,現在可將業務流程(包含原子服務)可編排至可執行文件中。但是就到此為止了嗎,或者說這就是可重用性以及靈活性可以達到的最高程度?
本文中,我們將介紹:Oracle 服務注冊表 (OSR)。您將從中了解到如何在不犧牲性能的情況下放松緊密耦合的 BPEL 流程,同時創建一個使企業受益的可重用且可發現的文件庫。
設置
示例場景包含兩個 BPEL 流程:一個主流程 (MasterProcess),它用以調用另一個名為 CalleeProcess 的流程。一般而言,構建場景時,主流程與它的服務通過引用其具體的綁定定義 (WSDL) 緊密耦合。
創建了 BPEL 流程后,創建者已確定了該流程提供的消息模式。根據其操作,可以是異步或同步。
請看以下的 CalleeProcess 定義。
在上述示例中,流程的服務接口提供了一個稱為“process”的操作,該操作在其內部定義了一個輸入 (CalleeProcessRequestMessage) 和一個輸出 (CalleeProcessResponseMessage) 消息。
此時,BPEL 流程不包含任何有關其所在位置或用何種技術調用它的信息。
將 BPEL 流程部署到服務后,應實現 WSDL 接口并添加一個物理端點。此時,其定義將由抽象轉為具體。
現在,流程 (CalleeProcess) 已變成了一個服務,可以通過使用其具體的 WSDL 位置并將將其作為 partnerlink 的基礎,在另一個流程中重用它。
部署成功后,就可以調用 MasterProcess 了。這將觸發 CalleeProcess 的執行,而其通信是完全在內存中處理的。
將服務綁定從 BPEL 流程剝離
準備工作完成后,實現松散耦合系統的第一步,就是將實施從 CalleeProcess(從 MasterProcess 調用)的定義中剝離。
將該模式應用到 BPEL 流程可帶來極大的靈活性,這是因為無需更改流程本身即可更改所使用的特定服務實施。
在本步驟中,將具體的服務定義注冊到 OSR 后,它在整個企業中都可被發現了。
根據 UDDI 數據模型,服務是業務(允許按用途分組)的細目。(注意:業務與可視性沒有聯系。)
只需在 UDDI 業務實體下發布一個 WSDL 就可以添加服務定義(本例中為 CalleeProcess 的服務定義),如下所示。
完成發布過程后,可將服務定義添加到業務 (DynamicDiscoveryBusiness),為 CalleeProcess 創建一個 UDDI 項,以及添加一個與物理端點的綁定。
現在,服務注冊表的 UI 中唯一可發現就是物理端點,調用服務需要調用對該端點。要使動態綁定與技術和實施無關,需要添加一個新綁定。該綁定的類型為 wsdlDeployment,它將由 BPEL 引擎在運行時使用。
現在,可以應用 BPEL 流程并向 BPEL 域添加關鍵信息以實現動態的服務注冊表查詢。首先,需要向 Partnerlink 添加 CalleeProcess 的唯一服務鍵。單擊服務項的細目可找到該鍵。
正如“利用 ESB 虛擬化 BPEL 流程服務端點”中所述,partnerlink 可包含特定的屬性,用于修改或增強其運行時行為。在本例中,該標志名為 registryServiceKey,它是使 BPEL 服務器在運行時發現 OSR 中具體服務定義的一個 UDDI 唯一標識符。
實現查詢所需的最后一個信息是配置 BPEL 服務器,包含有關目標 OSR 實例位置 (uddiLocation) 的信息;如果要加強安全性,還可包含用戶名 (uddiUsername) 和口令 (uddiPassword)。
為什么要應用這些更改?現在,流程與服務的物理實施相分離,流程能夠在運行時查詢 OSR 實例以檢索和調用端點。這意味著,在硬件或軟件發生變化時,不必修改流程配置就可以移動服務,這是因為所有信息都存儲在服務注冊表中。
最后一步是接受具體的 WSDL,圖片中沒有顯示出 partnerlink。重要的是,BPEL 編譯器 (bpelc) 需要有關操作和類型的信息,以確保部署前的類型完整性。但沒有必要提供所有綁定信息。
這意味著將使用抽象的 WSDL,而不是提供具體的 WSDL。再次查看流程描述符,其中將揭示其位置。
如上所示,并不是將 wsdlLocation 屬性指向 CalleeProcess 具體的 WSDL。
重新編譯和部署流程將實現我們期望達到的松散耦合度。
該流程沒有包含任何有關用于實施服務的技術或其端點的信息。
結論
在 MasterProcess 知曉技術以及其調用的流程 (CalleeProcess) 位置的前提下,完全獨立于業務流程實現動態綁定并管理端點和屬性是多么容易呀。
關鍵信息現在位于可搜索的、符合 UDDI v3 的注冊表中,可在運行時發現這些信息,從而使流程可以提供最大限度的靈活性。盡管引入了另一個組件,但使用方與提供方之間的性能并未降低太多,這應歸功于注冊表精確的內存中查找以及端點調用。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
