使用JNDI的JDBC连接:名称冲突?

时间:2015-02-23 14:06:16

标签: java tomcat jdbc jndi

尝试在我的tomcat实例的context.xml中设置几个JDBC连接,但很难理解为什么某些名称似乎会发生冲突。

通过某些名称组合,我得到了以下内容:

  

java.lang.ClassCastException:org.apache.tomcat.dbcp.dbcp2.BasicDataSource无法强制转换为javax.naming.Context

如果我有两个名称如下的资源,有人可以解释为什么它不起作用。

name="jdbc/postgres/1/2/3/4/5"
name="jdbc/postgres/1/2/3/4/5/6"

但是将第二个名称更改为此功能确实有效:

name="jdbc/postgres/1/2/3/4/4/6"

感谢。

1 个答案:

答案 0 :(得分:0)

根据Tomcat doc name 是相对于java:comp/env上下文的JNDI名称。全名被视为一个路径,其元素由/分隔。

在您的示例中,

name="jdbc/postgres/1/2/3/4/5"

在路径

下创建数据源节点5
java:comp/env/jdbc/postgres/1/2/3/4

以下

name="jdbc/postgres/1/2/3/4/5/6"

然后尝试在路径

创建数据源节点6
java:comp/env/jdbc/postgres/1/2/3/4/5

发生异常是因为Tomcat期望5处的路径元素(Context),但却找到了数据源。

在您的工作示例中,您在不同的路径下创建数据源6

java:comp/env/jdbc/postgres/1/2/3/4/6