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 文件位于我已经解决了这个问题,抱歉最近回复了。问题是,密码包含几个特殊字符,包括 # 符号;但是在 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 数据库
pentaho水壶无法连接到cloudera cdh4 HDFS