Kettle8.2修复作业或者转换重命名功能

kettle版本:8.2.0.0-311

问题描述:创建一个转换或者作业,命名为A并保存到资源库中,打开A,在探索资源库面板将A重命名为B,再打开B,这时Spoon面板会出现A与B两个。实际为一个转换或者作业。

原因分析:

1、分析重命名代码的具体实现步骤,代码入口:browseController.renameContent()

分析以上代码,重命名操作只是修改了数据库和当前面板的缓存数据,并未对Spoon面板进程操作。

2、再来看看打开操作的代码,此处就是为什么会打开两个转换或者作业的原因,代码入口:browseController.openContent()

注意到红圈内代码,打开操作有一个回调函数,该回调接口名为RepositoryExplorerCallback,实际实现在Spoon.exploreRepository()方法中,我们可以看到,该接口只有一个open方法,并没有rename或者其他操作(例如:我们实际应用项目中添加了发布操作),我们再看一下open的具体实现代码(以trans为例,job类似)。

从Spoon.exploreRepository()向下走,进入loadObjectFromRepository方法,此处会获取一个TransMeta,注意此处获取TransMeta的途径是经过objectId获取的。

接着进入SpoonTransformationDelegate类的addTransGraph()方法,此处有两个缓存,spoon.delegates.tabs中存储的为TabMapEntry对象(一个对象对应一个展示面板),transformationMap存储已经打开的转换TransMeta对象,通过addTransformation方法进行判断(判断方法实际为转换名称),如果该转换不存在,在两个缓存对象中添加响应的数据,spoon.enableMenus()刷新之后,spoon面板就能展开此模型。

3、通过上面的重名操作步骤和打开操作步骤,可以分析出原因。重命名操作之后,并未对spoon.delegates.tabs和transformationMap缓存对象进行操作,当再次打开这转换的时候,又重新查询了该转换,名称为新名称,在进行addTransformation判断时候,以新名称获取缓存对象为空,所以又添加进一个转换,导致Spoon面板同时打开两个转换(实则为一个转换)。

处理方法:在RepositoryExplorerCallback中添加重命名接口,在重命名成功之后,刷新Spoon的两个缓存对象即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值