本系列的第 1 部分和第 2 部分詳細(xì)介紹了如何利用 DataStage 開(kāi)發(fā) ETL Job。 在本文中,我們將引入 RTI Job 的概念,并詳細(xì)講述如何利用 DataStage 開(kāi)發(fā) RTI Job 并將 RTI Job 發(fā)布成 Web Service 以供其他應(yīng)用程序調(diào)用。 本文主要包含以下幾部分內(nèi)容: 1. RTI Job特性介紹 2. 開(kāi)發(fā)一個(gè)RTI Job 3. 將RTI Job發(fā)布成Web Service 4. 利用Java客戶(hù)端調(diào)用發(fā)布好的Web Service RTI Job是 ETL Job的一種特殊形式,它可以被發(fā)布成RTI 服務(wù)(RTI Service),RTI服務(wù)分成三種,分別是Web service,EJB和JMS。在本文中我們只介紹如何發(fā)布成Web service。正是因?yàn)镽TI Job可以以服務(wù)的形式被發(fā)布出來(lái),這就使得企業(yè)數(shù)據(jù)整合和企業(yè)的面向服務(wù)的架構(gòu)(SOA)無(wú)縫的整合在了一起。下面我們通過(guò)圖一來(lái)看一下RTI Job被發(fā)布成RTI服務(wù)后整個(gè)應(yīng)用程序的架構(gòu)。 圖一:RTI 架構(gòu) ![]() 從這張圖中,我們可以清楚地看出RTI的架構(gòu),首先開(kāi)發(fā)好的RTI Job的實(shí)例運(yùn)行在DataStage Server上,這些RTI Job以RTI Service的形式發(fā)布在RTI Server上。RTI Server和DataStage Server之間通過(guò)RTI Agent進(jìn)行通信。其實(shí)RTI Server本身也是作為一個(gè)Web應(yīng)用程序運(yùn)行在Web應(yīng)用程序服務(wù)器上的,可以是IBM Websphere 應(yīng)用程序服務(wù)器或者BEA WebLogic應(yīng)用程序服務(wù)器等。RTI Server和DataStage Server可以不放在同一臺(tái)機(jī)器上,但是RTI Agent和DataStage Server必須放在同一臺(tái)機(jī)器上面。這樣,在RTI Server上部署好的Web Service就可以被各種客戶(hù)端來(lái)調(diào)用,比如Java, dot NET等。 RTI Job的種類(lèi) RTI Job分成三種,第一種和普通的ETL Job沒(méi)什么區(qū)別,既不含有RTI輸入組件(RTI Input Stage)也不含有RTI 輸出組件(RTI Output Stage)。第二種只含有RTI輸出組件,第三種既含有RTI 輸入組件又含有RTI輸出組件。下面我們分別來(lái)介紹一下這三種類(lèi)型的RTI Job 1. 既不含RTI輸入組件也不含RTI輸出組件 前面提到,這種RTI Job和普通的ETL Job沒(méi)有什么區(qū)別,那么它怎么同調(diào)用它的客戶(hù)端進(jìn)行交互呢,這分兩種情況,第一種情況是客戶(hù)端只是希望調(diào)用一個(gè)ETL Job來(lái)執(zhí)行數(shù)據(jù)的抽取,轉(zhuǎn)換和加載的工作,不需要對(duì)該ETL Job有輸入也無(wú)需從該ETL Job中得到輸出。第二種情況是通過(guò)對(duì)該ETL Job設(shè)置參數(shù)來(lái)獲得從客戶(hù)端的輸入,在這種情況下,該ETL Job有輸入但沒(méi)有輸出。大家注意到,在這兩種情況下,客戶(hù)端都不能從該ETL Job中獲得返回值,也就是說(shuō)該ETL Job沒(méi)有輸出。為什么會(huì)這樣呢,因?yàn)镽TI Job若想有輸出,那么它必須含有RTI 輸出組件。圖2顯示了這種既不含RTI輸入組件也不含RTI輸出組件的RTI Job的一個(gè)例子。 圖2:RTI Job示例1 ![]() 2. 只含有RTI輸出組件 這種RTI Job含有RTI輸出組件但不含有RTI輸入組件,這種RTI Job能通過(guò)RTI輸出組件向調(diào)用它的客戶(hù)端返回需要的值,可以是一個(gè)整型數(shù)據(jù),一個(gè)結(jié)構(gòu)化的數(shù)據(jù)或者一個(gè)結(jié)構(gòu)化的數(shù)組,具體返回什么,可以在部署成Web Service的過(guò)程中設(shè)置,這會(huì)在文章的第三部分進(jìn)行介紹。當(dāng)然,這種類(lèi)型的RIT Job也是通過(guò)設(shè)置Job的參數(shù)來(lái)接收從客戶(hù)端傳過(guò)來(lái)的參數(shù)的。圖3顯示了一個(gè)只含有RTI輸出組件的一個(gè)例子。 圖3:RTI Job示例2 ![]() 3. 既含RTI輸入組件又含RTI輸出組件 這種RTI Job既能通過(guò)RTI輸入組件接受從客戶(hù)端傳過(guò)來(lái)的參數(shù),又能通過(guò)RTI輸出組件來(lái)向客戶(hù)端返回結(jié)果。這種RTI Job與前兩種RTI Job的另外一個(gè)不同點(diǎn)是,當(dāng)這種RTI Job編譯后,會(huì)產(chǎn)生一個(gè)或者多個(gè)實(shí)例一直運(yùn)行,這些事例會(huì)維持著和數(shù)據(jù)庫(kù)的連接,因此當(dāng)客戶(hù)端進(jìn)行調(diào)用的時(shí)候,相應(yīng)速度就會(huì)非???,而前面兩種RTI Job的響應(yīng)速度則相對(duì)會(huì)比較慢一些。圖4是一個(gè)既含RTI輸入組件又含RTI輸出組件的RTI Job的例子。 圖4:RTI Job示例3 ![]() 在介紹了各種不同的RTI Job之后,我們接下來(lái)進(jìn)入如何開(kāi)發(fā)一個(gè)RTI Job的階段。
在這一部分中,我們將詳細(xì)講解如何開(kāi)發(fā)一個(gè)既含RTI輸入組件又含RTI輸出組件的RTI Job。首先我們來(lái)介紹一下我們即將開(kāi)發(fā)的RTI Job的功能:我們的數(shù)據(jù)庫(kù)系統(tǒng)中預(yù)先建立了一張表,表明為Student,這張表由兩個(gè)字段,分別是ID和Name,我們即將開(kāi)發(fā)的RTI Job就是通過(guò)接受從客戶(hù)端傳進(jìn)來(lái)的ID來(lái)查找對(duì)應(yīng)的Name,然后將查詢(xún)結(jié)果返回到客戶(hù)端去。 1. 打開(kāi)DataStage Designer, 系統(tǒng)會(huì)自動(dòng)彈出一個(gè)創(chuàng)建新的DataStage Job的對(duì)話框來(lái),如圖5所示,選擇Server Job,然后單擊OK按鈕; 圖5:新建Server Job ![]() 2. 這時(shí)候系統(tǒng)創(chuàng)建的Server Job如圖6所示, 這時(shí)候這個(gè)Server Job上還沒(méi)有放任何DataStage組件,注意我們現(xiàn)在還沒(méi)有保存這個(gè)Server Job,單擊左上角的保存按鈕或者直接用Ctrl+S對(duì)Server Job進(jìn)行保存; 圖6:創(chuàng)建的Server Job ![]() 3. 如圖7所示,在彈出的保存對(duì)話框中,輸入Server Job的名稱(chēng)以及要保存的路徑,在我們的例子中,我們以RTIJob為Server Job的名稱(chēng),保存在文件夾RTISample中; 圖7:保存Server Job ![]() 4. 保存好后,我們把需要的DataStage的組件從左邊的組件面板拖入到右邊的設(shè)計(jì)器中,如圖8所示,我們需要一個(gè)RTI 輸入組件,一個(gè)RTI輸出組件,一個(gè)Transformer組件和一個(gè)DB2 UDB組件。選擇好組件后,按照?qǐng)D8所示的邏輯進(jìn)行連接,并分別為每個(gè)組件賦上一個(gè)有意義的名字; 圖8:選擇需要的組件 ![]() 5. 在各個(gè)組件都準(zhǔn)備好之后,我們需要對(duì)每個(gè)組件的屬性進(jìn)行設(shè)置。由于對(duì)屬性進(jìn)行設(shè)置的時(shí)候需要用到我們之前提到的Student表的表結(jié)構(gòu),我們首先需要從數(shù)據(jù)庫(kù)中導(dǎo)入Student表的表結(jié)構(gòu),我們接下來(lái)的幾個(gè)步驟就是進(jìn)行表結(jié)構(gòu)導(dǎo)入工作。在DataStage Designer中,如圖9所示,右鍵單擊Table Definition,然后選擇Import ‘ Plug-in Meta Data Definition; 圖9:導(dǎo)入表結(jié)構(gòu) ![]() 6.如圖10所示,在彈出的對(duì)話框中,選擇DSDB2,然后單擊OK按鈕; 圖10:選擇數(shù)據(jù)庫(kù)類(lèi)型 ![]() 7.然后在Server Name下拉列表中選擇SAMPLE,我們創(chuàng)建的Student表正是存放在這個(gè)數(shù)據(jù)庫(kù)中的,然后輸入用戶(hù)名和密碼,并注意一定要選上Tables選擇框,然后單擊Next按鈕,如圖11所示; 圖11:選擇數(shù)據(jù)庫(kù)連接信息 ![]() 8.如圖12所示,選擇表Student,然后輸入表結(jié)構(gòu)要保存的路徑,系統(tǒng)提供了一個(gè)默認(rèn)的保存路徑,我們可以修改成為我們想要保存的地方。然后單擊Import按鈕來(lái)導(dǎo)入表Student的表結(jié)構(gòu); 圖12:選擇要導(dǎo)入的表結(jié)構(gòu) ![]() 9.接著我們來(lái)編輯DB2 UDB組件的屬性,雙擊組件,如圖13所示的屬性設(shè)置框就會(huì)彈出來(lái),在Stage標(biāo)簽的General子標(biāo)簽中,我們輸入Server Name為Sample,然后輸入連接數(shù)據(jù)庫(kù)用的用戶(hù)名和密碼,在事務(wù)隔離級(jí)別(Transaction Isolation)的下拉框中,我們使用系統(tǒng)的默認(rèn)值,游標(biāo)穩(wěn)定性隔離級(jí)別。然后單擊Output標(biāo)簽; 圖13:設(shè)置數(shù)據(jù)庫(kù)連接信息 ![]() 10.如圖14所示,在Output標(biāo)簽的General子標(biāo)簽中,在Table Name輸入框中輸入表名Student,然后在Query Type下拉框中選擇Generated SQL Query. 最后單擊子標(biāo)簽Column進(jìn)行進(jìn)一步的屬性設(shè)置; 圖14:選擇要連接的表 ![]() 11.如圖15所示,在Column子標(biāo)簽中單擊按鈕Load..,系統(tǒng)會(huì)彈出一個(gè)對(duì)話框讓選擇需要引入的表結(jié)構(gòu),我們選擇剛才從數(shù)據(jù)庫(kù)中導(dǎo)入的表Student的表結(jié)構(gòu),然后單擊OK按鈕; 圖15:引入表結(jié)構(gòu) ![]() 12.如圖16所示,在彈出的對(duì)話框中可以選擇需要導(dǎo)入表Student的那些列,系統(tǒng)默認(rèn)是全部導(dǎo)入,保持默認(rèn),單擊OK按鈕; 圖16:選擇要導(dǎo)入的列 ![]() 13.如圖17所示,導(dǎo)入表結(jié)構(gòu)后,Column標(biāo)簽里面會(huì)顯示出我們從數(shù)據(jù)庫(kù)中導(dǎo)入的表Student的表結(jié)構(gòu),單擊View Data按鈕來(lái)測(cè)試一下連接; 圖17:導(dǎo)入后的表結(jié)構(gòu) ![]() 14. 單擊View Data按鈕后,如果所有的設(shè)置都正確的話,系統(tǒng)就會(huì)彈出如圖18所示的窗口,里面顯示了Student表的內(nèi)容,在我們的例子中,Student表里面有兩條記錄。至此,DUB UDB組件的屬性設(shè)置已經(jīng)完成。如果在這一步中不能成功顯示表中的數(shù)據(jù)的話,就需要回過(guò)頭來(lái)看看前面的設(shè)置是不是正確; 圖18:測(cè)試連接 ![]() 15.接下來(lái)我們?cè)O(shè)置RTI Input Stage的屬性,雙擊RTI Input Stage組件,系統(tǒng)會(huì)彈出如圖19所示的窗口,在Stage標(biāo)簽的General子標(biāo)簽中,你可以為該組件加一些注釋以表明該組件的用途,也可以在這里設(shè)置組件的顯示現(xiàn)實(shí)名稱(chēng)。然后我們單擊Outputs標(biāo)簽; 圖19:RTI輸入組件屬性設(shè)置 ![]() 16.在Outputs標(biāo)簽的Columns子標(biāo)簽中,可以直接輸入和Student表的ID字段相同的字段定義,也可以通過(guò)Load按鈕來(lái)從Student表結(jié)構(gòu)中只選擇導(dǎo)入ID字段的定義。注意這里的ID字段正是需要從客戶(hù)端接受的參數(shù)。當(dāng)然客戶(hù)端可以傳過(guò)來(lái)一個(gè)ID的值或者以數(shù)組的形式傳過(guò)來(lái)多個(gè)ID的值,具體的設(shè)置是在部署Web Service的過(guò)程中進(jìn)行的。設(shè)置完成后,單擊OK按鈕,如圖20所示; 圖20:引入字段定義 ![]() 17.然后我們對(duì)RTI Output Stage組件屬性進(jìn)行設(shè)置,雙擊RTI Output Stage組件,如圖21所示的窗口會(huì)顯示出來(lái),像對(duì)RTI Input Stage組件進(jìn)行屬性設(shè)置一樣,這里同樣可以加入一些描述信息,更改RTI Output Stage組件的顯示名稱(chēng)等,我們保持默認(rèn),然后單擊Inputs標(biāo)簽; ![]() 18.在Inputs標(biāo)簽的Columns子標(biāo)簽中,直接輸入如圖22所示的內(nèi)容,當(dāng)然,你也可以從Student表中只導(dǎo)入Name字段的定義,注意我們這里的Name字段正是需要返回給客戶(hù)端的數(shù)據(jù),當(dāng)然是返回一個(gè)還是多個(gè)值是通過(guò)在部署Web Service的過(guò)程中來(lái)設(shè)置的。最后單擊OK按鈕來(lái)完成設(shè)置; ![]() 19.然后我們來(lái)設(shè)置Transformer Stage組件的信息,具體設(shè)置的內(nèi)容如圖23所示。在該圖中,左上角的Parameter框代表的是RTI Input Stage組件,它只含有一個(gè)字段ID,左下角的Data框代表的是DB2 UDB組件,連接的是Student表,它有兩個(gè)字段ID和Name。由下角的Name框代表的是RTI Output Stage組件的信息,它只有一個(gè)字段Name,這也正是需要返回給客戶(hù)端的信息; 圖23:配置Transformer Stage組件 ![]() 20.配置完每個(gè)組件的屬性后,我們需要對(duì)整個(gè)Job的屬性進(jìn)行配置,以使得DataStage系統(tǒng)知道這是一個(gè)RTI Job。單擊DataStage Designer工具欄中的Job Properties圖標(biāo),如圖24所示的對(duì)話框就會(huì)彈出來(lái),然后選上Allow Mutiple Instance和RTI Service Enabled選擇框。這樣就能利用DataStage提供的RTI控制臺(tái)將該RTI Job發(fā)布成Web Service。最后單擊OK按鈕并保存更改; 圖24:配置RTI Job ![]() 21.這時(shí)候我們已經(jīng)配置好了所有需要配置的信息,接下來(lái)我們來(lái)編譯開(kāi)發(fā)好的RTI Job,單擊DataStage Designer工具欄中的編譯圖標(biāo),編譯成功后的畫(huà)面如圖25所示。與一般的DataStage Job不同的是,如果你開(kāi)發(fā)的是一個(gè)既含有RTI輸入組件又含有RTI輸出組件的RTI Job,那么在編譯后就會(huì)自動(dòng)運(yùn)行這個(gè)RTI Job的實(shí)例。我們可以通過(guò)DataStage Director來(lái)觀察; 圖25:編譯RTI Job ![]() 22.如圖26所示,打開(kāi)DataStage Director,在RTI Sample目錄下面,你會(huì)看到一個(gè)RTI Job的實(shí)例正在運(yùn)行,這個(gè)實(shí)例維持著與數(shù)據(jù)庫(kù)的連接,如果你把數(shù)據(jù)庫(kù)連接斷掉,你會(huì)發(fā)現(xiàn)這個(gè)實(shí)例就會(huì)中斷掉,然后系統(tǒng)會(huì)接著嘗試啟動(dòng)一個(gè)新的實(shí)例,直到數(shù)據(jù)庫(kù)連接恢復(fù)正常; 圖26:查看RTI Job的狀態(tài) ![]() 現(xiàn)在我們已經(jīng)成功開(kāi)發(fā)并編譯了RTI Job,我們接下來(lái)的工作就是將這個(gè)RTI Job發(fā)布成Web Service。
這一部分我們將詳細(xì)講述如何將一個(gè)已經(jīng)編譯好的RTI Job發(fā)布成Web Service,在這一部分進(jìn)行之前,你需要檢查一下你的軟件的安裝,確保以下軟件已經(jīng)成功安裝好: 1. RTI Console 它是將RTI Job部署成Web Service的可視化接口,并且提供了部署的向?qū)Х奖阄覀冞M(jìn)行部署 2. RTI Agent 要確保它已經(jīng)同DataStage Server安裝在了同一臺(tái)機(jī)器上,RTI Agent的安裝一般是和DataStage Server的安裝一起安裝的,RTI Agent負(fù)責(zé)RTI Server和DataStage Server的通信。 3. RTI Server 部署的Web Service是運(yùn)行在RTI Server上的,當(dāng)然RTI Server也是運(yùn)行在一個(gè)Web應(yīng)用程序服務(wù)器上的,比如IBM Web Application Server。 準(zhǔn)備好需要的軟件后,我們進(jìn)入利用RTI控制臺(tái)發(fā)布Web Service的部分。 1.首先打開(kāi)RTI控制臺(tái),如圖27所示,DataStage提供了一個(gè)圖形化的界面方便我們把RTI Job發(fā)布成RTI Service。然后我們?cè)谧髠?cè)面板的Current Tasks模塊中單擊鏈接Register an RTI Server來(lái)新注冊(cè)一個(gè)RTI Server; 圖27:RTI 控制臺(tái) ![]() 2.在彈出的對(duì)話框中,輸入RTI服務(wù)器的名字或者IP地址,然后在Web Service End-point中輸入如圖28所示的值,這里要注意,因?yàn)槲沂前裄TI Server部署在IBM Websphere 應(yīng)用程序服務(wù)器上的,而運(yùn)行在其上的應(yīng)用程序都是運(yùn)行在9080端口下面,所以我設(shè)置的端口號(hào)是9080,如果你是將RTI Server運(yùn)行在其他的應(yīng)用程序服務(wù)器上,你就需要將這個(gè)端口號(hào)改成該應(yīng)用程序服務(wù)器所對(duì)應(yīng)的端口號(hào),最后單擊Finish按鈕; 圖28:注冊(cè)RTI Server ![]() 3. 如圖29所示,我們會(huì)看到右邊的面板中出現(xiàn)了我們剛才注冊(cè)好的RTI Server,雙擊這個(gè)圖標(biāo)。 圖29:成功注冊(cè)RTI Server ![]() 4. 如圖30所示,在雙擊剛才注冊(cè)的RTI Server之后,左邊的菜單選項(xiàng)也發(fā)生了相應(yīng)的改變,我們?cè)贑urrent Tasks模塊中單擊鏈接Register a DataStage Machine來(lái)注冊(cè)一個(gè)DataStage服務(wù)器。 圖30:注冊(cè)DataStage服務(wù)器 ![]() 4. 彈出的對(duì)話框如圖31所示,我們可以在Machine Name輸入框中輸入DataStage服務(wù)器所在的計(jì)算機(jī)名或者IP地址。如果需要的話,我們還要輸入登陸的用戶(hù)名和密碼,其他選項(xiàng)保持默認(rèn),然后單擊Finish按鈕。 圖31:填寫(xiě)注冊(cè)信息 ![]() 5. 如圖32所示,注冊(cè)好的DataStage服務(wù)器會(huì)顯示在右邊面板的上半部分中,注冊(cè)成功后,我們單擊左側(cè)菜單Current Tasks模塊中的鏈接Add a new Service to the RTI Server去注冊(cè)一個(gè)新的RTI Service; 圖32:注冊(cè)新的RTI Service ![]() 6.如圖33所示,在彈出的對(duì)話框中,在Service Name文本框中輸入sample,其他的內(nèi)容保持默認(rèn),然后單擊Finish按鈕; 圖33:填寫(xiě)配置信息 ![]() 6. 如圖34所示,注冊(cè)好的RTI Service顯示在右邊面板的下半部分,注意我們現(xiàn)在注冊(cè)的這個(gè)RTI Service只是一個(gè)空的殼子,我們還需要為它選擇使用的協(xié)議以及附加的RTI Job,這些都會(huì)在下面的步驟中進(jìn)行配置。最后我們雙擊這個(gè)RTI Service的圖標(biāo); 圖34:注冊(cè)好的RTI Service ![]() 8.如圖35所示,單擊左側(cè)面板Current Tasks模塊中的鏈接Add support for Service Bindings; 圖35:添加Service Binding ![]() 9.如圖36所示,選擇Service Binding的類(lèi)型為SOAP over HTTP,因?yàn)槲覀兪菍TI Job發(fā)布成Web Service,所以我們必須選擇這個(gè)選項(xiàng),其他選項(xiàng)是用來(lái)把RTI Job發(fā)布成JMS或者EJB,然后單擊Next按鈕; ![]() 10.如圖37所示,你可以輸入一些描述信息,然后單擊Finish按鈕; 圖37:添加描述信息 ![]() 11.如圖38所示,我們添加的Service Binding顯示在了右側(cè)面板的上半部分中,單擊該Service Binding的圖標(biāo),然后從左邊面板的Current Tasks模塊中單擊鏈接Add an operation來(lái)為該RTI Service添加RTI Job; 圖38:注冊(cè)好的Service Binding ![]() 12.如圖39所示,在彈出的對(duì)話框中選中我們之前開(kāi)發(fā)并編譯好的RTI Job RTIJob,然后單擊按鈕Next; 圖39:選擇RTI Job ![]() 13. 如下圖所示,我們需要在Operation Name文本框中輸入該RTI Job所對(duì)應(yīng)到Web Service中的名字,直接輸入RTIJob,保持其他選項(xiàng)為默認(rèn),然后單擊按鈕Next; 圖40:配置相關(guān)信息 ![]() 14.在如圖41所示的頁(yè)面中,我們可以配置該Web Service所接受的參數(shù)的信息,注意系統(tǒng)已經(jīng)默認(rèn)為我們生成了配置,那就是只接受一個(gè)名稱(chēng)為ID參數(shù),類(lèi)型為String,我們可以通過(guò)Options下來(lái)列表來(lái)改表輸入?yún)?shù)的設(shè)置,比如如果我們需要傳入的參數(shù)是結(jié)構(gòu)化的,那么我們需要選擇選項(xiàng)Group,如果我們需要傳入多個(gè)相同類(lèi)型的數(shù)據(jù),那么我們的參數(shù)就需要設(shè)置成Array,在我們的例子中,如果我們?cè)O(shè)置成了Array,那么就代表我們的Web Service會(huì)接受一個(gè)字符串?dāng)?shù)組,里面可能存放了多個(gè)人的ID信息。由于我們這個(gè)例子只是傳入一個(gè)ID,然后返回該ID所對(duì)應(yīng)的Name,所以我們不需要進(jìn)行設(shè)置,保持系統(tǒng)默認(rèn),然后單擊按鈕Next。 圖41:配置輸入?yún)?shù) ![]() 15.接著我們需要配置該Web Service向客戶(hù)端的返回值,由于我們只需要返回一個(gè)字符串類(lèi)型的數(shù)據(jù),我們保持系統(tǒng)的默認(rèn)設(shè)置,然后單擊按鈕Next; 圖42:配置返回值類(lèi)型 ![]() 16.在這里可以設(shè)置一些和WSDL文件相關(guān)的名字空間的信息,我們使用系統(tǒng)提供的默認(rèn)值,然后單擊Next按鈕; 圖43:名字空間的設(shè)置 ![]() 17.如圖44所示,確認(rèn)選擇框Launch the Add Job/Map Wizard with the job or map you selected是選上的,然后單擊按鈕Finish; 圖44:完成配置 ![]() 18.在圖45中可以配置一些運(yùn)行時(shí)的參數(shù),比如RTI Job的實(shí)例的最小數(shù)目是多少,最大樹(shù)木是多少等,可以根據(jù)自己的應(yīng)用程序的需要來(lái)配置,比如如果同時(shí)會(huì)有多個(gè)客戶(hù)端來(lái)訪問(wèn)該Web Service,那么就需要將最小實(shí)例數(shù)目設(shè)置大一些。 設(shè)置好后,單擊按鈕Next; 圖45:配置運(yùn)行參數(shù) ![]() 19.在下圖中輸入驗(yàn)證信息,然后單擊按鈕Finish; 圖46:輸入驗(yàn)證信息 ![]() 20.如下圖所示,系統(tǒng)彈出一個(gè)對(duì)話框提示用戶(hù)已經(jīng)成功的將RTI Job添加到了RTI Service當(dāng)中; 圖47:添加成功 ![]() 21.如圖48所示,我們需要重新激活我們之前配置的Service Binding,并且我們注意到我們添加的RTIJob也顯示在了右邊面板的下半部分; 圖48:激活Service Binding ![]() 22.單擊左側(cè)面板的View RTI Service Repository鏈接,就進(jìn)入到了如圖49所示的頁(yè)面,然后單擊我們剛才注冊(cè)成功的Web Service sample; 圖49:部署的RTI Service ![]() 23.下圖顯示了我們剛部署成功的Web Service的相關(guān)信息,我們單擊對(duì)應(yīng)的WSDL文件的鏈接去查看WSDL文件; 圖50:Web Service 相關(guān)信息 ![]() 24.圖51顯示了我們部署好的Web Service對(duì)應(yīng)的WSDL文件的內(nèi)容,而各種客戶(hù)端正是通過(guò)這個(gè)WSDL文件對(duì)后臺(tái)的應(yīng)用邏輯進(jìn)行調(diào)用的。我們?cè)谖恼碌淖詈笠粋€(gè)章節(jié)會(huì)介紹如何調(diào)用該Web Service; 圖51:WSDL文件 ![]() 利用Java客戶(hù)端調(diào)用發(fā)布好的Web Service 文章接下來(lái)講述如何去調(diào)用我們之前發(fā)布好的Web Service,我們使用一個(gè)用Java語(yǔ)言編寫(xiě)的客戶(hù)端來(lái)進(jìn)行調(diào)用。在開(kāi)始之前,讀者應(yīng)該準(zhǔn)備好如下的環(huán)境: 1.Eclipse集成開(kāi)發(fā)環(huán)境 因?yàn)槲覀冮_(kāi)發(fā)的Java項(xiàng)目是在Eclipse下面進(jìn)行的,所以安裝一個(gè)Eclipse的環(huán)境能使讀者更容易的跟上文章的每一步。可以從Eclipse的官方網(wǎng)站上下載最新版本的Eclipse。 2.JDK1.4或者1.5 這是Java開(kāi)發(fā)的必備環(huán)境。 3. Axis 文章中會(huì)使用Axis提供的工具生成調(diào)用Web Service的本地Stub,方便對(duì)Web Service進(jìn)行調(diào)用。Axis可以從它的官方網(wǎng)站下載到,文章后面的資源列表包含了該鏈接。 下面我們開(kāi)始Java客戶(hù)端的開(kāi)發(fā) 1. 首先使用創(chuàng)建一個(gè)Java工程,命名為T(mén)estRTIJob,然后右鍵單擊這個(gè)工程并選擇屬性,會(huì)彈出如圖52所示的窗口,單擊Library標(biāo)簽,然后把下載的Axis的JAR文件加入進(jìn)來(lái)。 圖52:添加外部JAR文件 ![]() 2. 然后從Eclipse中選擇Run ‘ Run..,會(huì)彈出如下圖所示的對(duì)話框,選擇程序運(yùn)行的類(lèi)別為Java Application,然后單擊按鈕Search; 圖53:新建一個(gè)運(yùn)行實(shí)例 ![]() 3.如下圖所示,從彈出的對(duì)話框中選擇類(lèi)WSDL2Java,這個(gè)類(lèi)是Axis提供的用來(lái)從WSDL生成本地Stub類(lèi)的工具。然后單擊OK按鈕; 圖54:選擇運(yùn)行主類(lèi) ![]() 3. 然后在Argument標(biāo)簽中輸入我們剛才部署好的Web Service的WSDL文件的地址,如圖55所示,然后單擊按鈕Run; 圖55:運(yùn)行WSDL2Java ![]() 4. 如圖56所示,運(yùn)行結(jié)束后,我們會(huì)看到我們創(chuàng)建的工程里面生成了一些類(lèi),這些類(lèi)就是輔助我們調(diào)用Web Service的Stub類(lèi); 圖56:生成的Stub類(lèi) ![]() 5.我們接下來(lái)新建一個(gè)叫做TestRTIJob類(lèi)來(lái)通過(guò)生成的Stub類(lèi)來(lái)進(jìn)行調(diào)用Web Service,這個(gè)類(lèi)的源代碼如下所示: 清單1:調(diào)用Web Service
運(yùn)行這個(gè)類(lèi),控制臺(tái)會(huì)打印出一串字符串:The name is Jason,這說(shuō)明我們成功的調(diào)用了Web Service,我們的RTI Job也成功的完成了我們所設(shè)計(jì)的業(yè)務(wù)邏輯。關(guān)于這個(gè)Java工程的詳細(xì)信息,讀者可以在文章的下載部分下在提供的整個(gè)工程的源代碼。 至此,我們已經(jīng)完成了從開(kāi)發(fā)RTI Job到部署RTI Job再到用Java Client調(diào)用部署的Web Service的整個(gè)過(guò)程。
本文首先介紹了什么是RTI Job以及RTI Job的特點(diǎn),然后通過(guò)開(kāi)發(fā)、部署RTI Job使讀者對(duì)RTI Job有了更進(jìn)一步的了解,最后通過(guò)開(kāi)發(fā)一個(gè)Java客戶(hù)端對(duì)Web Service進(jìn)行調(diào)用來(lái)結(jié)束了整個(gè)文章的講述。在面向服務(wù)的架構(gòu)日益成熟的今天,通過(guò)把ETL Job發(fā)布成Web Service供企業(yè)的其他應(yīng)用程序進(jìn)行調(diào)用無(wú)疑會(huì)是一個(gè)非常有價(jià)值的工作,從而使企業(yè)數(shù)據(jù)整合與企業(yè)的面向服務(wù)的架構(gòu)實(shí)現(xiàn)了無(wú)縫的融合。希望本片文章對(duì)使用DataStage進(jìn)行數(shù)據(jù)整合的讀者有所幫助。
|
|