kettle系列-2.kettle源码结构分析

kettle是一个开源产品,产品本身设计是很优秀的,代码应该是很多开源爱好者用业余时间贡献的,代码整体结构还是比较容易理解的,但具体到每一个控件内部就因人而异了,感觉还是挺复杂的,肯定别人考虑得比较全面。但因为是开源产品,不像商业产品那样完善,测试、具体代码规范等就没有商业产品严格了,所以bug相对较多什么的都是可以理解的,后面会将我遇到的部分bug及修复方式分享出来。

上一篇文章我们导入了5个项目,是我认为修改使用过程中遇到的bug时可能需要用到的项目,相信通过上一篇文章的介绍很容易就能添加其他模块的代码进来,需要再添加吧。下图是各模块的简介:

我修改过代码的就只有engine和ui,我遇到的bug基本都是在这两个层面上的,core里面的database倒是也看了一下。除了代码,还需要了解package-res/ui这个文件夹里的内容,这里面的xul文件就是界面布局的xml,菜单层次、对应的i18n键、菜单对应代码中哪个方法等都在这里面配置的。里面的images就是图标了,你可以替换为你喜欢的图标,ui里面有多个布局文件,想了解单击了界面某个菜单具体的代码实现时就到这里面找,根据需要看吧,ui文件夹内容如:

玩kettle主要就是创建作业(job)和转换(transition),作业和转换有着各自不同的控件,作业的特点是依次运行作业中的各个控件,而转换是多线程同时运行转换中的各个控件,转换就像工厂流水线,很多工人同时都在工作,一件产品经一个工人处理后转交给下一个工人,然后这个工人继续处理下一产品,产品就是我们的数据流,一条一条的数据记录,如excel中的数据入到数据库中,我们需要excel输入和表输出两个转换控件,这就是流水线上的两个工人,excel输入读取excel文件,依次读取里面的数据行,一行一行的将excel中的数据传给表输出控件,表输出控件这个工人同时也在工作,一旦excel输入传来数据,他马上就开始往数据库中写。而作业就没有数据流的概念,不会源源不断的接收上一个作业控件传来的数据,如我们从ftp上下载文件然后通过一个转换处理下载下来的文件,需要先把文件下载完成才能开始后续处理工作,不能边下载边处理,所以ftp下载和转换都是作业控件。所有作业控件和转换控件才是我们要研究的主角,玩kettle基本都是和他们打交道。

每个控件又分为某一项技能和某一个人,一个人拥有某项技能以后就是我们的一个控件了,我们可以对每个控件进行各项设置,就像可以告诉这个人今天具体做什么工作,我们可以同时拖多个相同类型的控件,就像可以有多个人拥有相同的技能。类似的就是ftp下载作业控件和excel输入转换控件,后面会以这两个控件为例子介绍作业控件和转换控件。每个控件对应的技能的实现就在engine项目中,人的实现ui项目中。

如下就是FTP下载控件的技能实现,每个作业控件都能在engine项目的org.pentaho.di.job.entries包下面找到技能实现,类似的转换控件能在engine项目的org.pentaho.di.trans.steps包下面找到技能实现,job运行起来具体怎么处理数据的就能在这里看到。

如下是FTP下载控件的ui层实现,主要用于配置控件参数,每个作业控件都能在ui项目的org.pentaho.di.ui.job.entries包下找到ui层实现,类似的转换控件也能在ui项目的org.pentaho.di.ui.trans.steps包下找到ui层实现。

通过上面的介绍我们可以知道,在界面配置有问题在ui项目看实现,运行中出错,找问题在engine项目中找。作业控件一般属性和业务逻辑都在一个类中,转换控件一般会分为*Data、*Meta和一个业务实现类、若干相关工具类。Data用于保存运行数据,Meta用于保存配置元数据,有与资源库交互的实现。

源码分析差不多就到这里了,有问题能快速定位到具体代码,然后就是考验java功底的时候了。

时间: 2024-10-23 20:22:04

kettle系列-2.kettle源码结构分析的相关文章

SequoiaDB 系列之七 :源码分析之catalog节点

这一篇紧接着上一篇SequoiaDB 系列之六 :源码分析之coord节点来讲 在上一篇中,分析了coord转发数据包到catalog节点(也有可能是data节点,视情况而定).这一次,我们继续分析上一篇中的rtnCoordCMDListCollectionSpace的消息包被转发到catalog节点上的处理流程. catalog节点的进程,同样sequoiadb进程,只是角色不一样,运行的服务有区别. 这里就不再赘述catalog节点的启动过程. 在SequoiaDB/engine/cat/c

【【分享】深入浅出WPF全系列教程及源码 】

因为原书作者的一再要求,在此声明,本书中的部分内容引用了原书名为<深入浅出WPF>的部分内容,假设博文不能满足你现有的学习须要,能够购买正版图书! 本人10月份提出离职,可是交接非常慢,预计年底才会交接完,趁着交接之际,自学了一下WPF,由于这是微软未来的发展趋势,自WIN7以来包含前不久公布的WIN8,核心还是WPF,在此,将自己的学习成果做一个总结,同一时候将自己学习积累的东西和广大博友分享,希望大家能共同进步.在文章的结尾我会将全系列的源码地址提供给大家,有须要的朋友能够下载下来自己研究

Java并发系列[2]----AbstractQueuedSynchronizer源码分析之独占模式

在上一篇<Java并发系列[1]----AbstractQueuedSynchronizer源码分析之概要分析>中我们介绍了AbstractQueuedSynchronizer基本的一些概念,主要讲了AQS的排队区是怎样实现的,什么是独占模式和共享模式以及如何理解结点的等待状态.理解并掌握这些内容是后续阅读AQS源码的关键,所以建议读者先看完我的上一篇文章再回过头来看这篇就比较容易理解.在本篇中会介绍在独占模式下结点是怎样进入同步队列排队的,以及离开同步队列之前会进行哪些操作.AQS为在独占模

Java并发系列[5]----ReentrantLock源码分析

在Java5.0之前,协调对共享对象的访问可以使用的机制只有synchronized和volatile.我们知道synchronized关键字实现了内置锁,而volatile关键字保证了多线程的内存可见性.在大多数情况下,这些机制都能很好地完成工作,但却无法实现一些更高级的功能,例如,无法中断一个正在等待获取锁的线程,无法实现限定时间的获取锁机制,无法实现非阻塞结构的加锁规则等.而这些更灵活的加锁机制通常都能够提供更好的活跃性或性能.因此,在Java5.0中增加了一种新的机制:Reentrant

死磕 java同步系列之ReentrantReadWriteLock源码解析

问题 (1)读写锁是什么? (2)读写锁具有哪些特性? (3)ReentrantReadWriteLock是怎么实现读写锁的? (4)如何使用ReentrantReadWriteLock实现高效安全的TreeMap? 简介 读写锁是一种特殊的锁,它把对共享资源的访问分为读访问和写访问,多个线程可以同时对共享资源进行读访问,但是同一时间只能有一个线程对共享资源进行写访问,使用读写锁可以极大地提高并发量. 特性 读写锁具有以下特性: 是否互斥 读 写 读 否 是 写 是 是 可以看到,读写锁除了读读

死磕 java同步系列之Semaphore源码解析

问题 (1)Semaphore是什么? (2)Semaphore具有哪些特性? (3)Semaphore通常使用在什么场景中? (4)Semaphore的许可次数是否可以动态增减? (5)Semaphore如何实现限流? 简介 Semaphore,信号量,它保存了一系列的许可(permits),每次调用acquire()都将消耗一个许可,每次调用release()都将归还一个许可. 特性 Semaphore通常用于限制同一时间对共享资源的访问次数上,也就是常说的限流. 下面我们一起来学习Java

死磕 java同步系列之CountDownLatch源码解析

??欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)CountDownLatch是什么? (2)CountDownLatch具有哪些特性? (3)CountDownLatch通常运用在什么场景中? (4)CountDownLatch的初始次数是否可以调整? 简介 CountDownLatch,可以翻译为倒计时器,但是似乎不太准确,它的含义是允许一个或多个线程等待其它线程的操作执行完毕后再执行后续的操作. Cou

死磕 java同步系列之StampedLock源码解析

问题 (1)StampedLock是什么? (2)StampedLock具有什么特性? (3)StampedLock是否支持可重入? (4)StampedLock与ReentrantReadWriteLock的对比? 简介 StampedLock是java8中新增的类,它是一个更加高效的读写锁的实现,而且它不是基于AQS来实现的,它的内部自成一片逻辑,让我们一起来学习吧. StampedLock具有三种模式:写模式.读模式.乐观读模式. ReentrantReadWriteLock中的读和写都是

死磕 java同步系列之CyclicBarrier源码解析——有图有真相

问题 (1)CyclicBarrier是什么? (2)CyclicBarrier具有什么特性? (3)CyclicBarrier与CountDownLatch的对比? 简介 CyclicBarrier,回环栅栏,它会阻塞一组线程直到这些线程同时达到某个条件才继续执行.它与CountDownLatch很类似,但又不同,CountDownLatch需要调用countDown()方法触发事件,而CyclicBarrier不需要,它就像一个栅栏一样,当一组线程都到达了栅栏处才继续往下走. 使用方法 pu

死磕 java同步系列之Phaser源码解析

问题 (1)Phaser是什么? (2)Phaser具有哪些特性? (3)Phaser相对于CyclicBarrier和CountDownLatch的优势? 简介 Phaser,翻译为阶段,它适用于这样一种场景,一个大任务可以分为多个阶段完成,且每个阶段的任务可以多个线程并发执行,但是必须上一个阶段的任务都完成了才可以执行下一个阶段的任务. 这种场景虽然使用CyclicBarrier或者CountryDownLatch也可以实现,但是要复杂的多.首先,具体需要多少个阶段是可能会变的,其次,每个阶