首页 文章

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

提问于
浏览
0

我正在Play for Scala应用服务器上运行Pentaho PDI / Kettle作业 . 我将 kettle-core-7.0.0-12.jarkettle-engine-7.0.0-12.jar 添加到类路径中,它第一次正常工作,但 second 时间会抛出错误:

ClassNotFoundException:org.osjava.sj.SimpleContextFactory

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

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

Pentaho 's and 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

UPDATE

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

databaseMeta.setAccessType(DatabaseMeta.TYPE_ACCESS_NATIVE)

1 回答

  • 0

    找到答案here

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

相关问题