Класс SimpleContextFactory не найден при запуске задания Pentaho PDI с использованием Java API - PullRequest
0 голосов
/ 09 декабря 2018

Я выполняю работу в Pentaho PDI / Kettle на сервере приложений Play for Scala.Я добавил kettle-core-7.0.0-12.jar и kettle-engine-7.0.0-12.jar в путь к классам, и он отлично работает в первый раз, но секунда раз, когда он выдает ошибку:

ClassNotFoundException: org.osjava.sj.SimpleContextFactory

Первый вопрос: почему класс найден (или не используется) в первый раз?После некоторых исследований я обнаружил, что jar simple-jndi необходимо добавить в classpath вместе с каталогом simple-jndi, который содержит файл jdbc.properties.Но после этого нет соединений JNDI моего приложения работает, я получаю:

Ошибка при внедрении конструктора, org.hibernate.service.spi.ServiceException: Невозможно создать запрошенную службу[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

Похоже, существует конфликт между JNDI-соединениями Pentaho и Play.Непонятно, зачем Pentaho нужен кувшин simple-jndi, так как в первый раз он его не использует и работает нормально.Я не хочу, чтобы 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 голосов
/ 10 декабря 2018

Нашел ответ здесь

Звоните KettleEnvironment.init(false), где false означает, что не используйте JNDI

...