WebService调用ODI同步任务
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 voidmain(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集成任务整合到业务流程提供了必要的支撑。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |