ODI 12c 使用 SDK 智能导入到 Exec Repository 的行为类似于导入到 Dev Repository

ODI 12c Smart Import into Exec Repository with SDK behave like importing into Dev Repository

我尝试使用 SDK 将一个通过 ODI 客户端从一个 Exec Repository 生成的 XML 文件智能导入到另一个 Exec Repository。我正在使用 ODI 12.2.1.4。 我已经有一个在 11g (11.1.1.9) 中运行良好的 java 程序,但自从我升级到 12 后,出现错误(由于新版本,我对代码进行了一些更改)。 使用 ODI studio 将 xml 文件智能导入到 Exec Repository 工作正常,因此文件看起来没问题。

程序报错是: oracle.odi.impexp.smartie.OdiSmartImportException: com.sunopsis.dwg.SQLWorkReposException: ORA-00942: Table ou vue inexistante

原因:错误:942,位置:14,Sql = SELECT 1 FROM SNP_VAR WHERE I_PROJECT IS NULL AND VAR_NAME = 'CONN_DEC_USER', OriginalSql = SELECT 1 FROM SNP_VAR WHERE I_PROJECT IS NULL AND VAR_NAME = 'CONN_DEC_USER',错误消息 = ORA-00942: Table ou vue inexistante

根据 Oracle 支持,我的 Exec 存储库没有 table SNP_VAR 是完全正常的,它仅在 Dev 存储库中。 奇怪的是 smart Import 向它发出了这个请求。在我看来,smartImport 就像在使用 Dev Repository(只是猜测)

我的代码:

    private String TargetUrl = "jdbc:oracle:thin:@";
    private String TargetDriver="oracle.jdbc.OracleDriver";
    private String TargetMaster_User;
    private String TargetMaster_Pass;
    private String WorkRep_Execution="WORK1";
    private String TargetOdi_User="USER";
    private String TargetOdi_Pass="PASS";
    private String ExportFile;
    private MasterRepositoryDbInfo targetmasterInfo;
    private WorkRepositoryDbInfo workInfo_exec;
    private OdiInstance odiInstance_exec;
    private Authentication auth_exec;
    private SmartImportServiceImpl smartImport;
    private ITransactionManager Tm;
    ITransactionStatus TStatus;

SmartImport(String Url, String File, String targetMasterUser, String targetMasterPwd) throws IOException{
    TargetUrl = TargetUrl+Url;
    ExportFile = File;
    TargetMaster_User = targetMasterUser;
    TargetMaster_Pass = targetMasterPwd;
    targetmasterInfo = new MasterRepositoryDbInfo(TargetUrl, TargetDriver, TargetMaster_User,TargetMaster_Pass.toCharArray(), new PoolingAttributes());
    workInfo_exec = new WorkRepositoryDbInfo(WorkRep_Execution, new PoolingAttributes());
    odiInstance_exec=OdiInstance.createInstance(new OdiInstanceConfig(targetmasterInfo,workInfo_exec));
    auth_exec = odiInstance_exec.getSecurityManager().createAuthentication(TargetOdi_User,TargetOdi_Pass.toCharArray());
    odiInstance_exec.getSecurityManager().setCurrentThreadAuthentication(auth_exec);
    smartImport = new SmartImportServiceImpl(odiInstance_exec);
    Tm = odiInstance_exec.getTransactionManager();
    TStatus = odiInstance_exec.getTransactionManager().getTransaction( new DefaultTransactionDefinition());
    }
smartImport.importObjectsFromXml(ExportFile, "MyPassword".toCharArray(), false);

我正在处理的主存储库只有一个工作存储库(称为 "WORK1"),它是一个执行存储库。 有什么问题的线索吗?

谢谢 PEB

感谢 JeromeFR 的建议,我找到了使用 Deployment Archives 而不是 Smart Export/Import 来解决我的问题的方法。 从我的开发存储库(通过 ODI 客户端)导出我的存档并通过 java skd 导入到我的 Exec 存储库(我有几个 exec 环境)它工作正常 用于导入存档以替换 smartImport 的代码:

DeploymentService.applyFullDeploymentArchive(odiInstance_exec, "EXEC_Init.zip", true, "Password".toCharArray(), true);

谢谢 PEB