1. 概述
ODI11G默認提供了WebService的調(diào)用接口,供其他各種應用程序通過接口控制、訪問ODI自身的同步任務。
ODI11G在安裝完成,啟動代理后,會自動啟動webservice的服務端口,對外提供WSDL文件服務,外部應用可以通過WSDL文件利用各種技術反向生成自身應用程序所需要的調(diào)用代碼,本文將以Axis作為WebService容器來介紹,如何生成代碼并調(diào)用ODI接口。
2.???技術說明
2.1ODI WebService介紹
ODI在安裝過程中會默認生成一個“代理“,代理有設置的端口號,假設代理的端口為:505,那么當代理在服務器上成功啟動以后,會生成一個web服務對外提供ODI控制所用的WSDL文件,地址為:
http://hostname:505(端口號)/oraclediagent/OdiInvoke?wsdl
2.2生成客戶端調(diào)用代碼
本文檔以Axis生成Java代碼為例進行詳細介紹如下:
首先將附件《WebService調(diào)用ODI所需Eclipse插件》解壓縮至Eclipse的plugins目錄下,并啟動Eclipse。
在啟動后的Eclipse界面中,點擊fileànewàOther,彈出如下界面:
界面中選擇Axis2 CodeGenerator—>Next:
生成接口調(diào)用client代碼
輸入ODI的WSDL地址:
一般是localhost:505/oraclediagent/OdiInvoke?wsdl
然后根據(jù)提示生成Java代碼,可以選擇將java代碼生成至某已有項目,如oditest
調(diào)用代碼生成完畢之后,便可以正式開始書寫客戶端調(diào)用方法,用于調(diào)用ODI的數(shù)據(jù)同步場景或代理。
2.3編寫Java類,調(diào)用ODI集成場景
以TestOdi類為例:
public?class?TestOdi{
???????public?static?voidmain(String[] args){
??????????????try?{
?????? OdiInvokeStubodiS=new?OdiInvokeStub();
???????//OdiCredentialType,ScenarioRequestType分別是接口調(diào)用的兩個核心參數(shù)
???????//OdiStartScenRequest是接口調(diào)用的直接參數(shù)
???????OdiStartScenRequeststartScenRequest=new?OdiStartScenRequest();
?????? ScenarioRequestTypescenaroRequest=new?ScenarioRequestType();
?????? scenaroRequest.setContext(“GLOBAL”);
?????? scenaroRequest.setSynchronous(false);
?????? scenaroRequest.setLogLevel(5);
?????? scenaroRequest.setScenarioName(“PKG_SZGS_TO_SSBZ”);
?????? scenaroRequest.setScenarioVersion(“001”);
???????//設置場景啟動所需要的變量
?????? VariableTypevt=new?VariableType();
?????? vt.setName(“PRO_SZGS.RW_ID”);
?????? vt.setValue(“260”);
?????? scenaroRequest.addVariables(vt);
???????//設置OdiCredentialType變量
?????? OdiCredentialTypeodiCredentialType=new?OdiCredentialType();
?????? odiCredentialType.setWorkRepository(“WORKREP”);
?????? odiCredentialType.setOdiUser(“SUPERVISOR”);
?????? odiCredentialType.setOdiPassword(“sanyuan”);
???????//為OdiStartScenRequest對象設置其兩個核心參數(shù)ScenarioRequestType及OdiCredentialType
?????? startScenRequest.setRequest(scenaroRequest);
?????? startScenRequest.setCredentials(odiCredentialType);
???????//通過OdiStartScenRequest對象啟動ODI已經(jīng)發(fā)布到代理上的場景
?????? odiS.invokeStartScen(startScenRequest);
????????????? }catch(Exception e){
???????????????????? System.out.println(e);
????????????? }
?????? }
}
一、聲明主對象
在調(diào)用過程中首先需要生命調(diào)用的主對象:
OdiInvokeStub odiS=new?OdiInvokeStub();。
二、聲明核心參數(shù)(對象)
其次是調(diào)用ODI所依賴的核心參數(shù)(對象),OdiStartScenRequest,最終調(diào)用ODI場景時,將根據(jù)OdiStartScenRequest 的內(nèi)容來啟動具體的同步場景:odiS.invokeStartScen(startScenRequest);。
三、設置OdiStartScenRequest所依賴的兩大屬性(對象)
1、ScenarioRequestType
scenaroRequest.setContext(“GLOBAL”);//設置上下文,默認為GLOBAL
scenaroRequest.setSynchronous(false);//設置同步方式,即應用程序調(diào)用時是否等待ODI場景執(zhí)行完成后才執(zhí)行下一步。ODI默認為True,建議當同步任務所要處理的數(shù)據(jù)量較大、時間較長時,將該屬性設為false。
scenaroRequest.setLogLevel(5);//設置日志級別
scenaroRequest.setScenarioName(“PKG_SZGS_TO_SSBZ”);//設置要調(diào)用的ODI場景的名稱
scenaroRequest.setScenarioVersion(“001”);//設置要調(diào)用的ODI場景的版本號
假如需要為場景傳遞啟動參數(shù),那么需要以下步驟:
//設置場景啟動所需要的變量
VariableTypevt=new VariableType();? //VariableType是odiinvoke.odi.com.oracle.xmlns.OdiInvokeStub.VariableType類型,是用于向ODI場景傳遞參數(shù)信息的載體,必須要聲明
vt.setName(“PRO_SZGS.RW_ID”);設置參數(shù)(ODI變量)的名稱,名稱必須為變量的全路徑:項目名.變量名 的形式
vt.setValue(“260”);//設置要向ODI變量傳遞的內(nèi)容
scenaroRequest.addVariables(vt);//將變量添加到scenaroRequest中
2、OdiCredentialType
?????? //設置OdiCredentialType變量
OdiCredentialTypeodiCredentialType=new OdiCredentialType();//聲明OdiCredentialType
odiCredentialType.setWorkRepository(“WORKREP”);//設定當前要操作的ODI工作資料配置庫名稱
odiCredentialType.setOdiUser(“SUPERVISOR”);//設定管理員帳號(與客戶端登錄ODI的帳號相同)
odiCredentialType.setOdiPassword(“sanyuan”);//設定管理員密碼
四、執(zhí)行
//為OdiStartScenRequest對象設置其兩個核心參數(shù)ScenarioRequestType及OdiCredentialType
startScenRequest.setRequest(scenaroRequest);
startScenRequest.setCredentials(odiCredentialType);
//通過OdiStartScenRequest對象啟動ODI已經(jīng)發(fā)布到代理上的場景
odiS.invokeStartScen(startScenRequest);
3.???小結
通過WebService方式調(diào)用ODI中的集成場景還要很多其他的方法可以使用,建議參照ODI二次開發(fā)手冊詳細了解。WebService的方式為ODI集成任務整合到業(yè)務流程提供了必要的支撐。