ODI 12c:如何用Java SDK在Studio外导出导入特定对象?
ODI 对象导出/导入纯Java实现方案
核心依赖与初始化
首先需要引入ODI安装目录下的核心API依赖包(如odi-core.jar、odi-sdk.jar等),然后初始化ODI实例建立与主库、工作库的连接:
import oracle.odi.core.OdiInstance; import oracle.odi.core.config.MasterRepositoryDbInfo; import oracle.odi.core.config.OdiInstanceConfig; import oracle.odi.core.config.WorkRepositoryDbInfo; import oracle.jdbc.pool.OracleDataSource; public class OdiObjectHandler { private OdiInstance odiInstance; public void initOdiInstance() throws Exception { // 配置主库数据源 OracleDataSource masterDs = new OracleDataSource(); masterDs.setURL("jdbc:oracle:thin:@//your-db-host:1521/your-service"); masterDs.setUser("ODI_MASTER"); masterDs.setPassword("your-password"); MasterRepositoryDbInfo masterDbInfo = new MasterRepositoryDbInfo(masterDs, "WORKREP_NAME"); // 配置工作库数据源 OracleDataSource workDs = new OracleDataSource(); workDs.setURL("jdbc:oracle:thin:@//your-db-host:1521/your-service"); workDs.setUser("ODI_WORK"); workDs.setPassword("your-password"); WorkRepositoryDbInfo workDbInfo = new WorkRepositoryDbInfo(workDs, "WORKREP_NAME"); // 创建ODI实例 OdiInstanceConfig odiConfig = new OdiInstanceConfig(masterDbInfo, workDbInfo); odiInstance = OdiInstance.createInstance(odiConfig); } }
对象导出到XML
利用ODI API的IOdiExportService,针对不同类型对象实现导出:
导出映射(Mapping)
import oracle.odi.domain.project.OdiMapping; import oracle.odi.core.service.IOdiExportService; import oracle.odi.domain.project.OdiProject; import java.io.FileOutputStream; public void exportMapping(String projectCode, String mappingName, String outputPath) throws Exception { IOdiExportService exportService = odiInstance.getTransactionalEntityManager().getService(IOdiExportService.class); // 获取目标项目与映射对象 OdiProject project = odiInstance.getTransactionalEntityManager().find(OdiProject.class, projectCode); OdiMapping mapping = odiInstance.getTransactionalEntityManager().find(OdiMapping.class, new OdiMapping.OdiMappingId(project, mappingName)); // 写入XML文件 try (FileOutputStream fos = new FileOutputStream(outputPath)) { exportService.exportObject(mapping, fos, IOdiExportService.ExportFormatType.XML, true, null, null); } }
导出变量(Variable)
import oracle.odi.domain.project.OdiVariable; public void exportVariable(String projectCode, String variableName, String outputPath) throws Exception { IOdiExportService exportService = odiInstance.getTransactionalEntityManager().getService(IOdiExportService.class); OdiProject project = odiInstance.getTransactionalEntityManager().find(OdiProject.class, projectCode); OdiVariable variable = odiInstance.getTransactionalEntityManager().find(OdiVariable.class, new OdiVariable.OdiVariableId(project, variableName)); try (FileOutputStream fos = new FileOutputStream(outputPath)) { exportService.exportObject(variable, fos, IOdiExportService.ExportFormatType.XML, true, null, null); } }
导出过程(Procedure)
import oracle.odi.domain.project.OdiProcedure; public void exportProcedure(String projectCode, String procedureName, String outputPath) throws Exception { IOdiExportService exportService = odiInstance.getTransactionalEntityManager().getService(IOdiExportService.class); OdiProject project = odiInstance.getTransactionalEntityManager().find(OdiProject.class, projectCode); OdiProcedure procedure = odiInstance.getTransactionalEntityManager().find(OdiProcedure.class, new OdiProcedure.OdiProcedureId(project, procedureName)); try (FileOutputStream fos = new FileOutputStream(outputPath)) { exportService.exportObject(procedure, fos, IOdiExportService.ExportFormatType.XML, true, null, null); } }
对象从XML导入
通过IOdiImportService实现导入,支持覆盖或新建对象:
import oracle.odi.core.service.IOdiImportService; import java.io.FileInputStream; public void importObject(String xmlPath, boolean overwrite) throws Exception { IOdiImportService importService = odiInstance.getTransactionalEntityManager().getService(IOdiImportService.class); try (FileInputStream fis = new FileInputStream(xmlPath)) { importService.importObject(fis, IOdiImportService.ImportFormatType.XML, overwrite ? IOdiImportService.ImportPolicy.REPLACE : IOdiImportService.ImportPolicy.CREATE, null, null, null); } }
关键注意事项
- 确保依赖包完整:从ODI安装目录的
oracledi/drivers和oracledi/lib下获取所有相关JAR包。 - JVM配置:运行时需指定ODI主目录属性,如
-Doracle.odi.home=/path/to/your-odi-home。 - 资源管理:所有IO流需用try-with-resources自动关闭,避免资源泄漏。
- 数据安全:导入前建议备份工作库,防止误覆盖重要对象。
内容的提问来源于stack exchange,提问作者mansa
相关产品推荐
相关产品推荐

