Oracle 服務(wù)總線介紹

大數(shù)據(jù)

我們正設(shè)計(jì)一套針對(duì)電信供應(yīng)商的新系統(tǒng),并且鎖定Oracle服務(wù)總線(OSB)作為企業(yè)服務(wù)總線。對(duì)我來(lái)說(shuō)這款工具的最好的加分項(xiàng)就是強(qiáng)大的工具支持。Oracle已經(jīng)將其所有企業(yè)集成軟件棧集成為一個(gè)整體,將其捆綁為Oracle SOA套件。本文將把重點(diǎn)放在Oracle SOA套件11g的一部分,Oracle OSB 11g上。Oracle SOA Suite 12c有很大的變化。然而ORacle 12C套件中我喜歡的新功能是開(kāi)發(fā)人員可以在一個(gè)IDE(集成開(kāi)發(fā)環(huán)境)里,用JDeveloper開(kāi)發(fā)BPEL(業(yè)務(wù)流程執(zhí)行語(yǔ)言)以及開(kāi)發(fā)OSB代碼。

關(guān)于 OSB 需要注意的幾點(diǎn)如下:

代理服務(wù):?正如其名字所表明的,代理服務(wù)是為外部客戶提供的服務(wù),扮演了內(nèi)部服務(wù)外觀的角色。通過(guò)代理服務(wù),你可以更好地控制內(nèi)部服務(wù)中的變化,因?yàn)槿绻愕膬?nèi)部服務(wù)發(fā)生變化,代理服務(wù)可以執(zhí)行需要的轉(zhuǎn)換。業(yè)務(wù)服務(wù):?在 OSB中, 業(yè)務(wù)服務(wù)表示內(nèi)部應(yīng)用服務(wù)。它可以是 WebService, JMS 隊(duì)列/主題, REST 服務(wù), FTP 服務(wù)以及其他服務(wù). 業(yè)務(wù)服務(wù)將會(huì)包含調(diào)用實(shí)際服務(wù)的功能。

所以本文中關(guān)注的場(chǎng)景如下:

我們有一個(gè)內(nèi)部的服務(wù),回報(bào)用戶信息,如果用戶通過(guò)在MSISDN或SIM卡號(hào)碼,根據(jù)輸入,數(shù)據(jù)將被取回來(lái)。通過(guò)使用代理服務(wù),這項(xiàng)服務(wù)必須以更有意義的方式開(kāi)放給外部方。

演示項(xiàng)目可以在這里下載。

首先創(chuàng)建企業(yè)服務(wù),作為內(nèi)部服務(wù)的表面。?在OSB項(xiàng)目中,創(chuàng)建四個(gè)文件夾:

代理業(yè)務(wù)轉(zhuǎn)換WSDL

然后需要復(fù)制本例中的 內(nèi)部服務(wù)WSDL和代理服務(wù) WSDL文件到 “WSDL” 文件夾。

配置企業(yè)服務(wù)

右擊 “business” 文件夾,并選擇?New->Business服務(wù)。當(dāng)企業(yè)服務(wù)創(chuàng)建好,“General” 選項(xiàng)卡彈出。在此,我們需要做如下操作:

選擇 “WSDL Web Service” ,然后點(diǎn)擊瀏覽器。 然后選擇“Browse,” 選擇?the WSDL file,然后有兩個(gè)選項(xiàng)。選擇the one ending with “(port)

大數(shù)據(jù)

然后到“Transport” 選項(xiàng)卡,并且將?URI改為:: http://localhost:8088/mockInstalledBaseSubscriberClassificationQueryWSServiceSoapBinding. 這是因?yàn)槲覀儗⑹褂肧OAPUI 模擬服務(wù)特征來(lái)測(cè)試,?URI 代表由WSDL表示的SOAPUI的模擬服務(wù)端點(diǎn)。本例中的SOAPUI項(xiàng)目可以在此下載。

這就是我們配置業(yè)務(wù)服務(wù)所需要做的所有操作。然后進(jìn)入我們的代理服務(wù),這是所有的動(dòng)作發(fā)生的地方。

配置代理服務(wù)

右鍵點(diǎn)擊創(chuàng)建的 “proxy” 目錄, 選擇 New->Proxy Service 并提供一個(gè)有效的名稱.在 “General” 標(biāo)簽頁(yè), 選擇 “WSDL Web Service” 并點(diǎn)擊瀏覽.現(xiàn)在代理服務(wù)中,你需要選擇我們創(chuàng)建的代理 WSDL 文件,該文件會(huì)提供給外部客戶端。

大數(shù)據(jù)

進(jìn)入 “Message Flow” 標(biāo)簽頁(yè). 在該標(biāo)簽頁(yè), 首先由右側(cè)的 “Design Palette” 中拖拽一個(gè) “Route” 元素.然后,拖拽一個(gè) “Routing” 元素到 “Route” 元素中.點(diǎn)擊 “Routing” 元素, 并在底部面板中, 進(jìn)入 “Properties” 標(biāo)簽頁(yè), 在該標(biāo)簽頁(yè)中你將提供代理服務(wù)將會(huì)訪問(wèn)的業(yè)務(wù)服務(wù)與操作名稱.

大數(shù)據(jù)

結(jié)果如下:

大數(shù)據(jù)

然后拖拽一個(gè) “Replace” 到 “Request Action” 組件.在 “Properties” 標(biāo)簽頁(yè)為? “Replace” 動(dòng)作提供信息之前, 我們需要?jiǎng)?chuàng)建 XQuery 轉(zhuǎn)換文件, 該文件會(huì)將代理服務(wù)映射為業(yè)務(wù)服務(wù)請(qǐng)求,然后將業(yè)務(wù)服務(wù)響應(yīng)映射回代理服務(wù)響應(yīng).右鍵點(diǎn)擊 “transformation” 目錄并選擇 New->XQuery Transformation. 輸入有效名稱. 對(duì)請(qǐng)求與響應(yīng)轉(zhuǎn)換文件也需要進(jìn)行同樣的操作。所用的請(qǐng)求轉(zhuǎn)換文件如下:
(:: 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)

在這里正如你所看到的,我們檢測(cè)設(shè)備類型是否等 “MSISDN” ,然后在業(yè)務(wù)服務(wù)中設(shè)置相應(yīng)的元素。

所用的響應(yīng)轉(zhuǎn)換文件如下:
(:: 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)

這是一個(gè)簡(jiǎn)單的轉(zhuǎn)換,在其中我們將響應(yīng)元素映射到所需的代理響應(yīng)元素。

現(xiàn)在我們回到代理服務(wù),點(diǎn)擊? “Replace” 動(dòng)作,進(jìn)入 “Properties” 標(biāo)簽頁(yè).

在 “In Variable”? 中插入值 “body”.點(diǎn)擊 “Expression” 鏈接. 進(jìn)入 “XQuery Resources” 標(biāo)簽頁(yè), 點(diǎn)擊 “Browse” 并選擇請(qǐng)求轉(zhuǎn)換文件.在右側(cè)的 “Variable Structures” 組件中,展開(kāi) “body” 元素,然后選擇請(qǐng)求元素并將其拖拽到 “Binding” 文本框中,如下所示:text box as follows:

大數(shù)據(jù)

然后選擇 “OK” 從而會(huì)將你帶回 “Properties” 標(biāo)簽.選擇以 “Replace node contents” 單選按鈕. 結(jié)果如下所示:

大數(shù)據(jù)

現(xiàn)在讓我們拖拽一個(gè) “Replace” 動(dòng)作到 “Response Action” 組件.與之前相同,選擇響應(yīng)轉(zhuǎn)換“$body/ins:InstalledBaseSubscriberClassificationQueryResponse”.你會(huì)遇到一個(gè)錯(cuò)誤,表明 “ins” 命名空間沒(méi)有被識(shí)別.為解決該錯(cuò)誤,在同一個(gè) “Properties” 標(biāo)簽內(nèi), 選擇標(biāo)簽 “Namespaces” 并點(diǎn)擊添加. 輸入 “ins” 作為前綴, “http://www.openuri.org/” 作為 URI.

大數(shù)據(jù)

就是這樣,現(xiàn)在我們就可以測(cè)試該功能。 在你動(dòng)手之前,請(qǐng)記住首先啟動(dòng)在SOAP UI上創(chuàng)建的模擬服務(wù)。

大數(shù)據(jù)

現(xiàn)在,我們登錄服務(wù)總線控制臺(tái),轉(zhuǎn)到代理服務(wù)并啟動(dòng)測(cè)試控制臺(tái)。? 下面是過(guò)運(yùn)行示例得到的結(jié)果:

大數(shù)據(jù)

你以在“ Invocation Trace”部分中的同一個(gè)屏幕上進(jìn)一步了解發(fā)生的詳細(xì)過(guò)程。 OSB進(jìn)行的請(qǐng)求和響應(yīng)轉(zhuǎn)換可以在下面的圖片中看到:

大數(shù)據(jù)

到這里我們將結(jié)束對(duì)Oracle Service Bus的介紹。 如果你有任何疑問(wèn),請(qǐng)隨時(shí)留言,我將盡快回復(fù)。 另外,如果有任何改善的地方,請(qǐng)留下你的反饋,我們將一如既往的非常感謝。

極客網(wǎng)企業(yè)會(huì)員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。

2017-10-19
Oracle 服務(wù)總線介紹
我們正設(shè)計(jì)一套針對(duì)電信供應(yīng)商的新系統(tǒng),并且鎖定Oracle服務(wù)總線(OSB)作為企業(yè)服務(wù)總線。對(duì)我來(lái)說(shuō)這款工具的最好的加分項(xiàng)就是強(qiáng)大的工具支持。Oracle已經(jīng)

長(zhǎng)按掃碼 閱讀全文