您的位置:首页 > 编程语言 > Java开发

WebService调用ODI同步任务

2014-01-08 20:37 288 查看
1. 概述
ODI11G默认提供了WebService的调用接口,供其他各种应用程序通过接口控制、访问ODI自身的同步任务。
ODI11G在安装完成,启动代理后,会自动启动webservice的服务端口,对外提供WSDL文件服务,外部应用可以通过WSDL文件利用各种技术反向生成自身应用程序所需要的调用代码,本文将以Axis作为WebService容器来介绍,如何生成代码并调用ODI接口。
2.   技术说明
2.1ODI WebService介绍
ODI在安装过程中会默认生成一个“代理“,代理有设置的端口号,假设代理的端口为:505,那么当代理在服务器上成功启动以后,会生成一个web服务对外提供ODI控制所用的WSDL文件,地址为: http://hostname:505(端口号)/oraclediagent/OdiInvoke?wsdl 2.2生成客户端调用代码
本文档以Axis生成Java代码为例进行详细介绍如下:
首先将附件《WebService调用ODI所需Eclipse插件》解压缩至Eclipse的plugins目录下,并启动Eclipse。
在启动后的Eclipse界面中,点击fileànewàOther,弹出如下界面:

界面中选择Axis2 CodeGenerator--->Next:
生成接口调用client代码
输入ODI的WSDL地址:
一般是localhost:505/oraclediagent/OdiInvoke?wsdl
然后根据提示生成Java代码,可以选择将java代码生成至某已有项目,如oditest

调用代码生成完毕之后,便可以正式开始书写客户端调用方法,用于调用ODI的数据同步场景或代理。
2.3编写Java类,调用ODI集成场景
以TestOdi类为例:
public
class
TestOdi{
       public
static void
main(String[] args){
              try {
       OdiInvokeStubodiS=new OdiInvokeStub();
       //OdiCredentialType,ScenarioRequestType分别是接口调用的两个核心参数
       //OdiStartScenRequest是接口调用的直接参数
       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对象设置其两个核心参数ScenarioRequestType及OdiCredentialType
       startScenRequest.setRequest(scenaroRequest);
       startScenRequest.setCredentials(odiCredentialType);
       //通过OdiStartScenRequest对象启动ODI已经发布到代理上的场景
       odiS.invokeStartScen(startScenRequest);
              }catch(Exception e){
                     System.out.println(e);
              }
       }
}
一、声明主对象
在调用过程中首先需要生命调用的主对象:
OdiInvokeStub odiS=new OdiInvokeStub();。
二、声明核心参数(对象)
其次是调用ODI所依赖的核心参数(对象),OdiStartScenRequest,最终调用ODI场景时,将根据OdiStartScenRequest 的内容来启动具体的同步场景:odiS.invokeStartScen(startScenRequest);。
三、设置OdiStartScenRequest所依赖的两大属性(对象)
1、ScenarioRequestType
scenaroRequest.setContext("GLOBAL");//设置上下文,默认为GLOBAL
scenaroRequest.setSynchronous(false);//设置同步方式,即应用程序调用时是否等待ODI场景执行完成后才执行下一步。ODI默认为True,建议当同步任务所要处理的数据量较大、时间较长时,将该属性设为false。
scenaroRequest.setLogLevel(5);//设置日志级别
scenaroRequest.setScenarioName("PKG_SZGS_TO_SSBZ");//设置要调用的ODI场景的名称
scenaroRequest.setScenarioVersion("001");//设置要调用的ODI场景的版本号
假如需要为场景传递启动参数,那么需要以下步骤:
//设置场景启动所需要的变量
VariableTypevt=new VariableType();  //VariableType是odiinvoke.odi.com.oracle.xmlns.OdiInvokeStub.VariableType类型,是用于向ODI场景传递参数信息的载体,必须要声明
vt.setName("PRO_SZGS.RW_ID");设置参数(ODI变量)的名称,名称必须为变量的全路径:项目名.变量名 的形式
vt.setValue("260");//设置要向ODI变量传递的内容
scenaroRequest.addVariables(vt);//将变量添加到scenaroRequest中
2、OdiCredentialType
       //设置OdiCredentialType变量
OdiCredentialTypeodiCredentialType=new OdiCredentialType();//声明OdiCredentialType
odiCredentialType.setWorkRepository("WORKREP");//设定当前要操作的ODI工作资料配置库名称
odiCredentialType.setOdiUser("SUPERVISOR");//设定管理员帐号(与客户端登录ODI的帐号相同)
odiCredentialType.setOdiPassword("sanyuan");//设定管理员密码
四、执行
//为OdiStartScenRequest对象设置其两个核心参数ScenarioRequestType及OdiCredentialType
startScenRequest.setRequest(scenaroRequest);
startScenRequest.setCredentials(odiCredentialType);
//通过OdiStartScenRequest对象启动ODI已经发布到代理上的场景
odiS.invokeStartScen(startScenRequest);
3.   小结
通过WebService方式调用ODI中的集成场景还要很多其他的方法可以使用,建议参照ODI二次开发手册详细了解。WebService的方式为ODI集成任务整合到业务流程提供了必要的支撑。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息