Kettle4.3源码分析

1:在使用kettle的表输入插件,抽取Mysql数据的时候 会报如下的一个错误

You have a
n error in your SQL syntax; check the manual that corresponds to your MySQL serv
er version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at

   这个错误的原因是mysql的驱动版本太低。。我原来用的 mysql-connector-java-5.1.7-bin.jar。后来改为

   mysql-connector-java-5.1.30-bin就正常了。

2:kettle的JobEntryLoader--Job启动初始化类

调用顺序:Spoon-->main-->initPlugins()-->JobEntryLoader.init()。

在这里Kettle会把所有的Job插件读取放到

private List<JobPlugin> pluginList 的一个成员变量里面。


Kettle4.3源码分析
 

每个节点下都有很多插件,大概一共有60多个,所以初始化完后pluginList的size应该也是60多

下面看一下JobPlugin的内部结构


Kettle4.3源码分析
 

根据以上的堆栈信息,当我们需要查找一个Job插件的时候,JobEntryLoader 提供的一些方法就非常好理解了。


                          Kettle4.3源码分析

而且注意的是JobPlugin的type 值都是 1。findJobPluginWithId 和 findJobEntriesWithId 的内部源码是一样的。
 

3:如何创建一个作业JobMeta

一个作业叫做一个JobMeta,特别注意的是作业不是作业步骤,作业是文件菜单下新建作业的那个作业,是所有作业步骤的容器。

源码位置:Spoon--newJobFile()

调用顺序:Spoon-main-init-addMenu-addMenuListeners--ProupMenu的菜单点击事件

核心代码:

JobMeta jobMeta = new JobMeta(log);

jobMeta.addObserver(this);

jobMeta.setName(STRING_JOB + " " + nr);

如果直接将作业保存为一个文件,可以将setName改为调用setFilename(String filename);

4:如何创建一个转换TransMeta

源码位置:Spoon--newTransFile()

核心代码:

TransMeta transMeta = new TransMeta();

transMeta.addObserver(this);

transMeta.setName(STRING_TRANSFORMATION + " " + nr);

总体模式和创建JobMeta类似,代码调用顺序也可以参考JobMeta

5:资源库Repository相关源码

RepositoriesMeta input = new RepositoriesMeta(log);//注意是带s的

input.readData();//读取连接信息

那么问题是kettle去哪里读取资源库连接信息呢

看readData里面的代码里就可以知道答案

首先他会查找bin/embedded/.creator/repositories.xml文件,

如果没有就会去查找NVL(System.getProperty("CREATOR_HOME"), System.getProperty("user.home"))++ FILE_SEPARATOR + BasePropertyHandler.getProperty("userBaseDir", ".kettle"); 路径下的repositories.xml

在windows下就是我的文档目录下。

找到配置文件后就开始读取里面的配置了--readData里面的关键代码:


Kettle4.3源码分析
 其中repinfo.loadXml(repnode,databases) 是在databases中查找默认资源库对应的连接,将相应的DatabaseMeta赋给repinfo。

实例化一个资源库:构造方法public Repository(LogWriter log, RepositoryMeta repinfo, UserInfo userinfo)

repinfo可以从RepositoriesMeta里获取,userinfo就是登陆的用户信息,主要是用户名和密码。

然后调用Repository的connect方法可以测试是否可以连接到资源库。

6:创建一个Job步骤,JobEntryCopy

源码位置:SpoonJobDelegate--newJobEntry

需要说明的代码:
Kettle4.3源码分析
 isSpecial()-->开始和空操作两个步骤是special

如果是开始步骤,则判断面板中是否已经有改步骤,如果有,则给出错误提示。

如果是空操作,则把空标志设置为true。

相关推荐