在Web中集成Kettle

来源:互联网 发布:知乎匿名提问没人回答 编辑:程序博客网 时间:2024/05/18 23:52

原创文章,转载请注明出处:http://qq85609655.iteye.com/blog/1306555

 

上篇文章中Kettle4 Repository 操作示例 (登陆资源 ...

 

今天,想将kettle整合到web工程中。这个想法一出现,就马上查找资料,可惜资料太少,没有现成的。

后面查看源码。。。终于整合到web工程中,方法如下:

编写一个Servlet,工程启动时成功,顺利完成集成。

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
  3.     <display-name>kettleapi4_2</display-name>  
  4.     <servlet>  
  5.         <servlet-name>KettleStartServlet</servlet-name>  
  6.         <servlet-class>zhangxin.kettle.servlet.KettleStartServlet</servlet-class>  
  7.         <load-on-startup>0</load-on-startup>  
  8.         <init-param>  
  9.             <param-name>dir</param-name>  
  10.             <param-value>/test</param-value>  
  11.         </init-param>  
  12.         <init-param>  
  13.             <param-name>jobname</param-name>  
  14.             <param-value>测试作业</param-value>  
  15.         </init-param>  
  16.     </servlet>  
  17.     <welcome-file-list>  
  18.         <welcome-file>index.html</welcome-file>  
  19.         <welcome-file>index.htm</welcome-file>  
  20.         <welcome-file>index.jsp</welcome-file>  
  21.         <welcome-file>default.html</welcome-file>  
  22.         <welcome-file>default.htm</welcome-file>  
  23.         <welcome-file>default.jsp</welcome-file>  
  24.     </welcome-file-list>  
  25. </web-app>  

 

Servlet代码如下:

 

Java代码  收藏代码
  1. package zhangxin.kettle.servlet;  
  2.   
  3. import java.io.File;  
  4. import java.util.List;  
  5.   
  6. import javax.servlet.ServletConfig;  
  7. import javax.servlet.ServletConfig;  
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.http.HttpServlet;  
  10.   
  11. import org.pentaho.di.core.KettleEnvironment;  
  12. import org.pentaho.di.core.Result;  
  13. import org.pentaho.di.core.exception.KettleException;  
  14. import org.pentaho.di.core.plugins.PluginRegistry;  
  15. import org.pentaho.di.core.plugins.RepositoryPluginType;  
  16. import org.pentaho.di.job.Job;  
  17. import org.pentaho.di.job.JobMeta;  
  18. import org.pentaho.di.repository.ObjectId;  
  19. import org.pentaho.di.repository.RepositoriesMeta;  
  20. import org.pentaho.di.repository.Repository;  
  21. import org.pentaho.di.repository.RepositoryDirectoryInterface;  
  22. import org.pentaho.di.repository.RepositoryElementMetaInterface;  
  23. import org.pentaho.di.repository.RepositoryMeta;  
  24. import org.pentaho.di.repository.StringObjectId;  
  25. import org.pentaho.di.trans.Trans;  
  26. import org.pentaho.di.trans.TransMeta;  
  27.   
  28. public class KettleStartServlet extends HttpServlet {  
  29.   
  30.     /** 
  31.      *  
  32.      */  
  33.     private static final long serialVersionUID = 4122742794095256794L;  
  34.   
  35.     public void init() throws ServletException {  
  36.         try {  
  37.             // 设置Kettle的初始化配置信息路径  
  38.             initKettleEnvironment();  
  39.   
  40.             ServletConfig config=getServletConfig();  
  41.             //通过 ServletConfig对象获取配置参数:dirverString  
  42.             String dir = config.getInitParameter("dir");  
  43.             String jobname = config.getInitParameter("jobname");  
  44.             executeJob(dir, jobname);  
  45.         } catch (KettleException e) {  
  46.             e.printStackTrace();  
  47.         }  
  48.     }  
  49.   
  50.     /** 
  51.      * 设置Kettle的初始化配置信息路径 
  52.      * @throws KettleException 
  53.      */  
  54.     private void initKettleEnvironment() throws KettleException {  
  55.         // 获得执行类的当前路径  
  56.         String user_dir = System.getProperty("user.dir");  
  57.         String kettleHome = this.getServletContext().getRealPath(File.separator + "WEB-INF");  
  58.         // Kettle初始化需要修改相应的配置路径  
  59.         System.setProperty("user.dir", kettleHome);  
  60.         System.setProperty("KETTLE_HOME", kettleHome);  
  61.         // 运行环境初始化(设置主目录、注册必须的插件等)  
  62.         KettleEnvironment.init();  
  63.         // Kettle初始化完毕,还原执行类的当前路径  
  64.         System.setProperty("user.dir", user_dir);  
  65.     }  
  66.   
  67.     /** 
  68.      * Kettle执行Job 
  69.      * @throws KettleException 
  70.      */  
  71.     public void executeJob(String dir, String jobname) throws KettleException {  
  72.           
  73.         RepositoriesMeta repositoriesMeta = new RepositoriesMeta();  
  74.         // 从文件读取登陆过的资源库信息  
  75.         repositoriesMeta.readData();  
  76.         // 选择登陆过的资源库  
  77.         RepositoryMeta repositoryMeta = repositoriesMeta.findRepository("4_2");  
  78.         // 获得资源库实例  
  79.         Repository repository = PluginRegistry.getInstance().loadClass(RepositoryPluginType.class, repositoryMeta, Repository.class);  
  80.         repository.init(repositoryMeta);  
  81.         // 连接资源库  
  82.         repository.connect("admin""admin");  
  83.   
  84.         RepositoryDirectoryInterface tree = repository.loadRepositoryDirectoryTree();  
  85.         RepositoryDirectoryInterface fooBar = tree.findDirectory(dir);  
  86.         JobMeta jobMeta = repository.loadJob(jobname, fooBar, nullnull);  
  87.         // 执行指定作业  
  88.         Job job = new Job(repository, jobMeta);  
  89.         job.start();  
  90.         job.waitUntilFinished();  
  91.         Result result = job.getResult();  
  92.         result.getRows();  
  93.         if (job.getErrors() > 0) {  
  94.             throw new RuntimeException("There were errors during transformation execution.");  
  95.         }  
  96.         repository.disconnect();  
  97.     }  
  98. }  

 

这样就集成好了。。。

下面是工程的结构

 

KETTLE结构

 

工程中的包和资源如下

 

libraries=
../lib
../libext
../libext/commons
../libext/elasticsearch
../libext/feeds
../libext/google
../libext/hive
../libext/hl7
../libext/JDBC
../libext/jersey
../libext/jfree
../libext/mondrian
../libext/pentaho
../libext/poi
../libext/reporting
../libext/rules
../libext/salesforce
../libext/spring
../libext/web
../libext/webservices
../libswt

classpath=
../
../ui
../ui/images
../libext/mondrian/config
../libext/pentaho/pigConf

 

同时,将 kettle启动时自动生成的     .kettle 文件夹

 

拷贝到 WEB-INF文件夹下(因为文件夹.kettle 前面有个'点号'。造成文件夹没能在上面的工程结构图中显示)


0 0
原创粉丝点击