Class 使用 Java API 运行 Pentaho PDI 作业时找不到 SimpleContextFactory
Class SimpleContextFactory not found when running Pentaho PDI job using Java API
我在 Play for Scala 应用程序服务器中 运行nning Pentaho PDI/Kettle 作业。我将 kettle-core-7.0.0-12.jar
和 kettle-engine-7.0.0-12.jar
添加到 class 路径,它第一次工作正常,但 第二次 抛出错误:
ClassNotFoundException: org.osjava.sj.SimpleContextFactory
第一个问题是为什么class是第一次找到(或没有使用)?经过一些研究,我发现需要将 jar simple-jndi
添加到 class 路径以及包含 jdbc.properties
文件的 simple-jndi
目录。但是在这样做之后,我的应用程序 JNDI 连接的 none 工作,我得到:
Error injecting constructor,
org.hibernate.service.spi.ServiceException: Unable to create requested
service [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)
找到答案here
调用 KettleEnvironment.init(false)
其中 false
表示不使用 JNDI
我在 Play for Scala 应用程序服务器中 运行nning Pentaho PDI/Kettle 作业。我将 kettle-core-7.0.0-12.jar
和 kettle-engine-7.0.0-12.jar
添加到 class 路径,它第一次工作正常,但 第二次 抛出错误:
ClassNotFoundException: org.osjava.sj.SimpleContextFactory
第一个问题是为什么class是第一次找到(或没有使用)?经过一些研究,我发现需要将 jar simple-jndi
添加到 class 路径以及包含 jdbc.properties
文件的 simple-jndi
目录。但是在这样做之后,我的应用程序 JNDI 连接的 none 工作,我得到:
Error injecting constructor, org.hibernate.service.spi.ServiceException: Unable to create requested service [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)
找到答案here
调用 KettleEnvironment.init(false)
其中 false
表示不使用 JNDI