生活随笔
收集整理的這篇文章主要介紹了
Oracle Service Bus简介
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們正在為電信提供商設計一個新系統,在該系統中,我們研究了用作企業服務總線的Oracle服務總線(OSB)。 對我來說,第一個優點是它提供了驚人的工具支持。 通過將其捆綁為Oracle SOA套件,Oracle已將其所有企業集成軟件堆棧集成為一個有凝聚力的整體。 在本文中,重點將放在作為Oracle SOA Suite 11g一部分的Oracle OSB 11g上。 新的Oracle SOA Suite 12c已進行了相當多的更改,我們將不在本文中介紹。 但是,我喜歡新的Oracle SOA Suite 12c的一個功能是,開發人員可以使用JDeveloper在一個IDE(集成開發環境)中開發BPEL(業務流程執行語言)和OSB代碼。
OSB需要了解的幾個主要組件如下:
代理服務
顧名思義,代理服務是托管于外部方的服務,充當內部服務的基礎。 通過使用代理服務,您可以更好地控制內部服務中的更改,因為如果內部服務發生更改,則代理服務可以執行所需的轉換。
商業服務
就OSB而言,業務服務代表內部應用程序服務。 它可以是WebService,JMS隊列/主題,REST服務,FTP服務等等。 商業服務將包含調用實際服務的功能。
因此,我們將重點關注本文的場景如下:
我們有一項內部服務,如果用戶輸入了MSISDN或SIM卡號,它就會返回訂戶信息,并且根據輸入,將提取并返回數據。 必須通過使用代理服務以更有意義的方式向外部用戶公開此服務。 示例項目可以在此處下載。
首先,我們創建業務服務,它將作為我們內部服務的基礎。 在您的OSB項目中,創建以下四個文件夾;
然后,我們需要將內部服務WSDL和為此示例創建的代理服務WSDL復制到“ wsdl”文件夾中。
配置業務服務
右鍵單擊“業務”文件夾,然后選擇“新建”->“業務服務”。 創建業務服務后,將首先為您提供“常規”選項卡。 為此,我們執行以下操作;
選擇“ WSDL Web服務”,然后單擊瀏覽器。 然后選擇“瀏覽”,選擇WSDL文件,您將看到兩個選項。 選擇一個以“(端口)結尾的”。
然后轉到“傳輸”選項卡,并將URI更改為http:// localhost:8088 / mockInstalledBaseSubscriberClassificationQueryWSServiceSoapBinding。 這是因為我們將使用SOAPUI模擬服務功能進行測試,并且URI代表WSDL表示的服務的SOAPUI模擬服務端點。 這就是我們配置業務服務所需要做的。 然后,我們進入代理服務,在該服務上執行所有操作。
配置代理服務
右鍵單擊創建的“ proxy”文件夾,選擇“新建”->“代理服務”并提供有效名稱。 在“常規”選項卡中,選擇“ WSDL Web服務”,然后單擊瀏覽。 現在,在代理服務中,您需要選擇我們創建的代理WSDL文件,該文件將向外部客戶端公開。
轉到“消息流”選項卡。 在該選項卡中,首先從右側的“設計面板”中拖動“路線”元素。 然后,將“路由”元素拖到“路由”元素中。 單擊“路由”元素,然后在底部窗格中,進入“屬性”選項卡,您將在其中提供此代理服務將訪問的業務服務和操作名稱。
在我們為“替換”操作提供“屬性”選項卡上的信息之前,我們需要創建XQuery轉換文件,該文件將代理服務請求映射到業務服務請求,然后將業務服務響應映射回代理服務響應。 右鍵單擊“ transformation”文件夾,然后選擇“新建”->“ XQuery轉換”。 輸入一個有效的名稱。 對于請求和響應轉換文件都應該這樣做。 使用的請求轉換文件如下: (:: pragma bea:global-element-parameter parameter="$fetchSubscriber1" element="ns2:FetchSubscriber" location="../wsdl/SubscriberProxyService.wsdl" ::)
(:: pragma bea:local-element-return type="ns1:InstalledBaseSubscriberClassificationQuery/ns0:InstalledBaseSubscriberClassificationQuery" location="../wsdl/subscriber_classfication.wsdl" ::)declare namespace ns2 = "http://www.example.org/SubscriberProxyService/";
declare namespace ns1 = "http://www.openuri.org/";
declare namespace ns0 = "http://mtnsa.co.za/si/IB/IBSubscriberClassificationQuery";
declare namespace xf = "http://tempuri.org/OSB%20training%201/transformation/subscriberrequest/";declare function xf:subscriberrequest($fetchSubscriber1 as element(ns2:FetchSubscriber))as element() {<ns1:InstalledBaseSubscriberClassificationQuery><ns0:InstalledBaseSubscriberClassificationQuery><ns0:Request>{if (data($fetchSubscriber1/EquipmentType) = "MSISDN") then<ns0:MSISDN> { (data($fetchSubscriber1/EquipmentValue))}</ns0:MSISDN>else <ns0:SIMCard> { data($fetchSubscriber1/EquipmentValue)}</ns0:SIMCard>}</ns0:Request></ns0:InstalledBaseSubscriberClassificationQuery></ns1:InstalledBaseSubscriberClassificationQuery>
};declare variable $fetchSubscriber1 as element(ns2:FetchSubscriber) external;xf:subscriberrequest($fetchSubscriber1)
如您所見,在這里,我們檢查設備類型是否等于“ MSISDN”,然后在業務服務上設置適當的元素。
(:: pragma bea:global-element-parameter parameter="$installedBaseSubscriberClassificationQueryResponse1" element="ns1:InstalledBaseSubscriberClassificationQueryResponse" location="../wsdl/subscriber_classfication.wsdl" ::)
(:: pragma bea:global-element-return element="ns2:FetchSubscriberResponse" location="../wsdl/SubscriberProxyService.wsdl" ::)declare namespace ns2 = "http://www.example.org/SubscriberProxyService/";
declare namespace ns1 = "http://www.openuri.org/";
declare namespace ns0 = "http://mtnsa.co.za/si/IB/IBSubscriberClassificationQuery";
declare namespace xf = "http://tempuri.org/OSB%20training%201/transformation/subscriberresponse/";declare function xf:subscriberresponse($installedBaseSubscriberClassificationQueryResponse1 as element(ns1:InstalledBaseSubscriberClassificationQueryResponse))as element(ns2:FetchSubscriberResponse) {<ns2:FetchSubscriberResponse><TradeCustomerCode>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/@ServiceProviderCode) }</TradeCustomerCode><PackageCode>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/ns0:Package/@ProductCode) }</PackageCode><PaymentOption>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/@PaymentOption) }</PaymentOption></ns2:FetchSubscriberResponse>
};declare variable $installedBaseSubscriberClassificationQueryResponse1 as element(ns1:InstalledBaseSubscriberClassificationQueryResponse) external;xf:subscriberresponse($installedBaseSubscriberClassificationQueryResponse1)
這是一個簡單的轉換,其中我們根據需要將響應元素映射到代理響應元素。
現在我們回到代理服務,單擊“替換”操作,轉到“屬性”選項卡。
在“ In Variable”中,輸入值“ body”。 單擊“表達”鏈接。 轉到“ XQuery資源”選項卡,單擊“瀏覽”,然后選擇請求轉換文件。 在右側的“可變結構”組件中,展開“ body”元素,然后選擇request元素并將其拖放到“ Binding”文本框中,如下所示;
然后選擇“確定”,這將帶您返回“屬性”選項卡。 選擇“替換節點內容”單選按鈕。 最終結果如下所示;
現在,讓我們將“替換”動作拖放到“響應動作”組件中。 與之前相同,選擇響應轉換“ $ body / ins:InstalledBaseSubscriberClassificationQueryResponse”。 現在,您將收到一條錯誤消息,指出無法識別“ ins”名稱空間。 為了解決該問題,請在相同的“屬性”選項卡中,選擇“名稱空間”選項卡,然后單擊“添加”。 輸入前綴“ ins”和URI作為“ http://www.openuri.org/”。
就是這樣。 現在我們可以測試功能了。 在執行此操作之前,請記住首先啟動在SOAP UI上創建的模擬服務。
現在,讓我們登錄到服務總線控制臺,轉到代理服務并啟動測試控制臺。 這是我通過運行示例得到的結果;
如果在“調用跟蹤”部分的同一屏幕上進一步瀏覽,則可以看到發生了什么的跟蹤。 OSB完成的請求和響應轉換如下所示;
至此,我們對Oracle Service Bus的介紹結束了。 如果您對此有任何疑問,請隨時發表評論,我們將盡快答復。 另外,如果您有任何需要改進的地方,也請留下您的反饋意見,我們將不勝感激。
翻譯自: https://www.javacodegeeks.com/2016/08/introduction-oracle-service-bus.html
總結
以上是生活随笔 為你收集整理的Oracle Service Bus简介 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。