Pentaho-Kettle无效的JNDI连接无法创建到数据库服务器的连接



我使用JNDI方法将多个MySQL数据库服务器与我的Pentaho PDI(CE 5.0.1)连接起来,到目前为止工作良好,不包括一个。其中一个MySQL服务器出现故障,所以我更改了JNDI连接(…\data-integration\ssimple JNDI\jdbc.properties)以连接到新服务器,但Kettle没有重新配置此更改,并抛出如下错误:

连接到数据库[db name]时出错:org.pentaho.di.core.exception.KettleDatabaseException:尝试连接到数据库时出错无效的JNDI连接kidr_db_5:无法创建到数据库服务器的连接。尝试重新连接3次。放弃。org.pentaho.di.core.exception.KettleDatabaseException:尝试连接到数据库时出错无效的JNDI连接kidr_db_5:无法创建到数据库服务器的连接。尝试重新连接3次。放弃

我可以通过Native(JDBC)连接方法直接从Kettle连接到新服务器,但不能仅通过此新服务器的JNDI连接。来自JNDI的Rest DB连接工作正常。请告诉我这里怎么了?是不是错过了什么?还是一只虫子?

我已经解决了这个问题,很抱歉最近回复了。问题是,密码中包含了一些特殊字符,包括#符号;但在Pentaho中,#是一条评论行,所以密码的一部分似乎是Pentaho的评论。

因此,结论是,在JNDI配置或Kettle配置文件中,除了注释之外,不要使用#。

快速信息。不完全是Kettle Pentaho虫。Bug(如果不是故意制造的)在"simplejndi"库中。Kettle使用Library simple jndi来提供jndi上下文。java.util.Properties类的oracle文档(http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html)声明,注释行必须以'#'符号开始,并且它必须是该行中的第一个符号,库"simple jndi"-使用自己的加载器,名为org.osjava.sj.loader.util.CustomLoader。这就是错误所在的

int idx = line.indexOf('#');
// remove comment
if(idx != -1) {
    line = line.substring(0,idx);
}

因此,如果你使用简单的jndi,注释就是行中"#"符号之后的所有内容。

使用.xml而不是.properties

<?xml version="1.0" encoding="UTF-8"?>
<something>
 <connection-name>
  <type>javax.sql.DataSource</type>
  <driver>org.postgresql.Driver</driver>
  <url>jdbc:postgresql://localhost:5432/database</url>
  <user>user</user>
  <password>#secret#</password>
 </connection-name>
</something>

我的文件名为connections.xml然后您可以引用connections/something/connectionname在上述示例的pdi中

最新更新