Я выполняю работу в 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)