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

JDBC Connection using JNDI : Name Clash?

试图在我的 tomcat 实例的 context.xml 中建立几个 JDBC 连接,但很难理解为什么有些名称似乎冲突。

通过一些名称组合,我得到以下结果:

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp2.BasicDataSource cannot be cast to javax.naming.Context

如果我有 2 个名称如下的资源,谁能解释为什么它不起作用:

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"

谢谢。

根据 Tomcat doc, name is the JNDI name relative to the java:comp/env 上下文。全名被视为路径,元素由 /.

分隔

在你的例子中,

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 的路径元素(上下文),但却找到了一个数据源。

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

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