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

Posted

技术标签:

【中文标题】Pentaho Kettle 无效的 JNDI 连接无法创建与数据库服务器的连接【英文标题】:Pentaho Kettle Invalid JNDI connection Could not create connection to database server 【发布时间】:2014-10-01 05:57:44 【问题描述】:

我正在使用 JNDI 方法将多个 mysql 数据库服务器与我的 Pentaho PDI (CE 5.0.1) 连接起来,到目前为止工作正常,除了那个。其中一台 MySQL 服务器出现故障,因此我更改了 JNDI 连接 (...\data-integration\simple-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 的休息数据库连接工作正常。请指导我这里有什么问题?错过了什么吗?还是一个错误?

【问题讨论】:

您是否在 .pentaho 文件夹中设置了 JNDI? JNDI 定义在 /.pentaho/simple-jndi/default.properties 上。在那里定义的 JNDI 将在启动时被 PDI 读取。 jdbc.properties 文件位于 \simple-jndi 文件夹中。请参考 (1) infocenter.pentaho.com/help48/… 和 (2) kettle-pentaho.blogspot.in/p/use-jndi-in-pentaho.html 它运行良好,直到我对 jdbc.properties 文件进行了更改以反映最近对一台数据库服务器的更改。 Kettle 不仅仅承认这一新变化。同一个 JNDI 文件中的其余连接细节仍然有效! 【参考方案1】:

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

所以结论是,不要在 JNDI 配置或 Kettle 配置文件中使用 # 以外的 cmets。

【讨论】:

【参考方案2】:

快速信息。 不完全是 Kettle Pentaho 错误。错误(如果不是故意制造的)在“simple-jndi”库中。 Kettle 使用库 simple-jndi 来提供 jndi 上下文。虽然 java.util.Properties 类 (http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html) 的 oracle 文档指出,注释行必须以 '#' 符号 开头,并且必须是 first行中的符号,库“simple-jndi” - 使用自己的加载器,称为org.osjava.sj.loader.util.CustomLoader。这就是bug所在的地方

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

如果你使用 simple-jndi,那么注释就是行中“#”符号之后的所有内容。

【讨论】:

【参考方案3】:

使用 .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/connection-name 在上面的例子中,在 pdi 中

【讨论】:

以上是关于Pentaho Kettle 无效的 JNDI 连接无法创建与数据库服务器的连接的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到 Pentaho Kettle 中的 PostgreSQL 数据库

kettle报无效数字的错误怎么解决

pentaho水壶无法连接到cloudera cdh4 HDFS

关于kettle4.4连ORACLE11建资源库报错求助

使用 StAX / Kettle (Pentaho) 读取 XML 文件

Pentaho Data Integration (Kettle) 简介