gpt4 book ai didi

java - 在 odi 映射对象中设置上下文

转载 作者:行者123 更新时间:2023-12-04 19:33:46 25 4
gpt4 key购买 nike

由于项目要求,我们需要从不同的服务器导入项目映射和其他对象。但是我们发现所有的mapping context都变成了undefined。

我正在尝试编写一个常规程序来批量设置上下文。我已经编写了以下代码,但不知何故 interfaceList 为空,因此无法执行 odiInterface.setOptimizationContext(context);

下面是我的代码。为简洁起见,我没有提到包 stmt。

def all the variables like url,driver,schema etc
def all variables like MasterInfo, auth, transaction, etc

def OdiContext context = ((IOdiContextFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiContext.class)).findByCode("CTX_ANN1_S4")
for (p in odiProjectList) {
if (p.getName() == "PrjDemo_TA") {
def OdiFolderList = p.getFolders()
for (f in OdiFolderList) {
if (f.getName() == "TrgDemoMod_Comn_TA_S4") {
// def OdiInterfaceList2 = f.getInterfaces()
// def OdiMappingList = odiInstance.getTransactionalEntityManager().findAll( Mapping.class)
def OdiInterfaceList = ((IOdiInterfaceFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiInterface.class)).findByProject(projectCode, folderName)

for (m in OdiInterfaceList2) {
println(m.getName() + "|" + m.getClass()) //+ "|" + m.getParent() + "|" + m.getFolder() )
m.setOptimizationContext(context)
}
tm.commit(txnStatus)
}
}
}
}

初始化 OdiInterfaceList 的行不会抛出任何错误,也不会填充文件夹中所有接口(interface)的所需接口(interface)列表。所以 m.setOptimizationContext(context) 没有被执行。

如果我将该行替换为:

def OdiMappingList = odiInstance.getTransactionalEntityManager().findAll( Mapping.class)

for ... 循环 中,我可以访问映射,但我不知道如何将其上下文 OdiMappingList 设置为 setOptimizationContext 是接口(interface)的方法。

最佳答案

我无法重现您的案例,因为我没有测试它的环境,但我仍然认为我可以提供帮助。

首先,我重构了您的代码,使其更符合常规:

def OdiContext context = ((IOdiContextFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiContext.class)).findByCode("CTX_ANN1_S4")

// Looking for the project
def prjDemo = odiProjectList.find { it.name == "PrjDemo_TA" }
assert prjDemo : "Unable to find ODI project"

//Getting the Mappings
def mappingList = odiInstance.getTransactionalEntityManager().findAll( Mapping.class)
assert ! mappingList.toList().empty : "Mappings not found"

// Printing interfaces
mappingList.each {
it.setDefaultContext(context as IContext)
}

有了这些断言,您也许能够更详细地了解您的代码真正失败的地方。

我注意到 IOdiInterfaceFindermarked as deprecated ,因此它可能无法很好地与 Oracle 12c 配合使用。检查你的版本。

如果您尝试用更更新的版本替换已弃用的代码,可能会更好。我在 this page 中找到了一些与您类似的代码, 所以它可能会有用。

更新:更新代码以使用 Mapping 类。因为它有 setDefaultContext(IContext ctx) 方法并且 OdiContext 实现了 IContext,也许它可以工作。

关于java - 在 odi 映射对象中设置上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59468096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com