You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java API在Oracle ODI 11g中运行接口模拟并捕获日志?

问题描述

我希望使用Java SDK与Oracle Data Integrator 11g进行交互,目前已成功连接ODI实例,但不知道如何从选中的接口运行模拟并捕获日志。以下是我已编写的代码:

<performing connection>

// Allocate an odisinstance of the name
final OdiInstance odiInstance = odiInstanceHandle.getOdiInstance();
try {
    TransactionTemplate tx = new TransactionTemplate(odiInstance.getTransactionManager());
    tx.execute(new TransactionCallbackWithoutResult() {
        protected void doInTransactionWithoutResult(ITransactionStatus pStatus) {
            // Retrieve the interface you want to simulate
            IOdiInterfaceFinder ifaceFinder = (IOdiInterfaceFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiInterface.class); 
            OdiInterface iface = ifaceFinder.findByQualifiedName("your_interface_name");

我想执行模拟并捕获所选接口的日志,是否可以通过Java API实现?我尝试过创建Scenario,但在网上只找到ODI 12的相关指南。


解决方案

在ODI 11g中可以通过Java API直接运行接口模拟并捕获日志,无需依赖Scenario。以下是基于你现有代码的完整实现:

核心思路

  1. 使用OdiInterfaceExecutionService执行接口的模拟模式(对应ODI中的静态控制,仅做数据校验不写入目标表)
  2. 通过OdiSession跟踪执行状态,再通过OdiSessionStepLog提取详细执行日志

完整代码示例

<performing connection>

// Allocate an odisinstance of the name
final OdiInstance odiInstance = odiInstanceHandle.getOdiInstance();
try {
    TransactionTemplate tx = new TransactionTemplate(odiInstance.getTransactionManager());
    tx.execute(new TransactionCallbackWithoutResult() {
        protected void doInTransactionWithoutResult(ITransactionStatus pStatus) {
            // Retrieve the interface you want to simulate
            IOdiInterfaceFinder ifaceFinder = (IOdiInterfaceFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiInterface.class); 
            OdiInterface iface = ifaceFinder.findByQualifiedName("your_interface_name");

            // 获取接口执行服务
            OdiInterfaceExecutionService executionService = odiInstance.getService(OdiInterfaceExecutionService.class);
            
            // 配置执行参数:指定为模拟模式
            OdiInterfaceExecutionParams executionParams = new OdiInterfaceExecutionParams();
            executionParams.setExecutionMode(OdiInterfaceExecutionService.ExecutionMode.STATIC_CONTROL);
            executionParams.setOdiInterface(iface);
            // 设置执行上下文(可替换为你需要的上下文)
            executionParams.setContext(odiInstance.getContextManager().getDefaultContext());
            
            // 执行模拟
            OdiSession session = executionService.execute(executionParams);
            
            // 等待执行完成,定期刷新会话状态
            while (session.getSessionStatus() != OdiSession.Status.DONE 
                    && session.getSessionStatus() != OdiSession.Status.ERROR) {
                Thread.sleep(1000);
                session = (OdiSession) odiInstance.getTransactionalEntityManager().refresh(session);
            }
            
            // 捕获并处理日志
            if (session.getSessionStatus() == OdiSession.Status.DONE) {
                // 查询该会话下的所有步骤日志
                IOdiSessionStepLogFinder stepLogFinder = (IOdiSessionStepLogFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiSessionStepLog.class);
                List<OdiSessionStepLog> stepLogs = stepLogFinder.findBySession(session);
                
                // 遍历输出日志内容
                for (OdiSessionStepLog stepLog : stepLogs) {
                    System.out.println("步骤名称: " + stepLog.getStepName());
                    System.out.println("执行状态: " + stepLog.getStatus());
                    System.out.println("日志详情: " + stepLog.getMessage());
                    System.out.println("---------------------------");
                }
            } else {
                // 处理执行失败场景
                System.err.println("模拟执行失败,错误信息: " + session.getReturnMessage());
            }
        }
    });
} catch (Exception e) {
    e.printStackTrace();
}

关键说明

  • ExecutionMode.STATIC_CONTROL:ODI 11g中专门用于接口模拟的执行模式,仅完成数据校验逻辑,不会修改目标数据
  • OdiSession:执行接口后返回的会话对象,用于跟踪执行状态、获取执行结果
  • 日志查询:通过OdiSessionStepLog可以获取每个执行步骤的详细日志,包括成功信息、警告或错误提示

内容的提问来源于stack exchange,提问作者mai_sicuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:13:09