使用Java API运行Pentaho PDI作业时找不到类SimpleContextFactory

时间:2018-12-09 19:16:32

标签: pentaho kettle pentaho-data-integration

我正在Play for Scala应用服务器中运行Pentaho PDI /水壶任务。我在类路径中添加了kettle-core-7.0.0-12.jarkettle-engine-7.0.0-12.jar,并且第一次运行良好,但是第二次它抛出了错误:

  

ClassNotFoundException:org.osjava.sj.SimpleContextFactory

第一个问题是为什么第一次发现(或不使用)类 ?经过研究,我发现需要将jar simple-jndi与包含simple-jndi文件的jdbc.properties目录一起添加到类路径中。但是,这样做之后,我的应用程序JNDI连接的 none 均无效,我得到:

  

注入构造函数时出错,   org.hibernate.service.spi.ServiceException:无法创建请求   服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

Pentaho和Play的JNDI连接之间似乎存在冲突。不清楚为什么Pentaho第一次不使用simple-jndi jar时,它运行良好。我不希望Pentaho使用JNDI连接到存储库,而只是使用普通的JDBC。

这就是我的工作方式,任何想法都将受到欢迎。

    KettleEnvironment.init
    val databaseMeta = new DatabaseMeta("ETL", dbType, "JDBC", host, 
                                    db, port, dbUserName, dbPassword)
    val repository = new KettleDatabaseRepository
    val repositoryMeta = new KettleDatabaseRepositoryMeta
    repositoryMeta.setConnection(databaseMeta)
    repository.init(repositoryMeta)
    val conn = repository.connect(repUserName, repPassword)

    // load the job
    val dir = repository.findDirectory("/some dir")
    val jobMeta = repository.loadJob("General ETL", dir, null, null)
    val job = new Job(repository, jobMeta)

    // run the ETL job
    jobMeta.setParameterValue("INPUT_DATE", dateStr)
    job.start
    job.waitUntilFinished
    val result = job.getResult

更新

我添加了以下行来强制连接到本机JDBC,但出现相同的错误:

databaseMeta.setAccessType(DatabaseMeta.TYPE_ACCESS_NATIVE)

1 个答案:

答案 0 :(得分:0)

找到了答案here

致电KettleEnvironment.init(false),其中false表示不使用JNDI