barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

вторник, 19 февраля 2013 г.

Запуск job`а Pentaho из Java

Задача:

Запустить имеющийся job Pentaho (kjb-файл) из Java-приложения.

Решение:
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleXMLException;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;
...
      KettleEnvironment.init();
      JobMeta jobMeta = new JobMeta(PATH_TO_KJB_DIR+"/my.kjb", null);
      jobMeta.setInternalKettleVariables();
      Job job = new Job(null, jobMeta);
      job.setVariable("Internal.Job.Filename.Directory", PATH_TO_KJB_DIR);
      job.execute(0, null);
      job.waitUntilFinished();
      if(job.getErrors() > 0)
        {
        fail("Job execution error");
        }

Данный код выполнит Job из файла my.kjb, расположенного в директории, задаваемой переменной PATH_TO_KJB_DIR. Вызов job.setVariable() используется для того, чтобы переменная ${Internal.Job.Filename.Directory} внутри Job`а действительно указывала на папку, в которой расположен файл Job`а (так, как она это делает при запуске Job`а через Kitchen). Если этот вызов опустить, Job будет считать, что он лежит в папке, откуда запущено Java-приложение (это принципиально, если Job использует какие-то внешние ресурсы, например, трансформации).
Что касается необходимых для данного кода зависимостей, то для сборки maven`ом я добавил в pom`ку следующие:
    <!-- Pentaho -->
    <dependency>
      <groupId>pentaho-kettle</groupId>
      <artifactId>kettle-engine</artifactId>
      <version>4.4.0-stable</version>
      <scope>test</scope>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>pentaho-kettle</groupId>
      <artifactId>kettle-core</artifactId>
      <version>4.4.0-stable</version>
      <scope>test</scope>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>commons-vfs</groupId>
      <artifactId>commons-vfs</artifactId>
      <version>1.0</version>
      <scope>test</scope>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
      <version>3.1</version>
      <scope>test</scope>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>pentaho-kettle</groupId>
      <artifactId>kettle-db</artifactId>
      <version>4.4.0-stable</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>pentaho-library</groupId>
      <artifactId>libformula</artifactId>
      <version>1.2.8</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>pentaho-library</groupId>
      <artifactId>libbase</artifactId>
      <version>1.2.8</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>rhino</groupId>
      <artifactId>js</artifactId>
      <version>1.7R2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>net.sourceforge.jtds</groupId>
      <artifactId>jtds</artifactId>
      <version>1.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>janino</groupId>
      <artifactId>janino</artifactId>
      <version>2.5.15</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.12</version>
      <scope>test</scope>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey.contribs</groupId>
      <artifactId>jersey-apache-client</artifactId>
      <version>1.12</version>
      <scope>test</scope>
      <type>jar</type>
    </dependency>
  </dependencies>
Не претендую на полноту списка, возможно, какие-то необходимые зависимости уже были в pom`ке ранее.

Комментариев нет:

Отправить комментарий