【问题标题】:JDBC Connection using JNDI : Name Clash?使用 JNDI 的 JDBC 连接:名称冲突?
【发布时间】:2015-04-24 21:12:02
【问题描述】:

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

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

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp2.BasicDataSource 无法转换为 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"

谢谢。

【问题讨论】:

    标签: java tomcat jdbc jndi


    【解决方案1】:

    根据Tomcat docname 是相对于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 处的路径元素(上下文),但却找到了数据源。

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

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

    【讨论】:

    • 感谢您的回复。我明白了,我假设 name 的整个值将用作键, - 显然不是!
    • 我认为我缺乏理解源于从 DNS 的角度考虑这一点,在文件系统上下文中思考更有意义,即同名的目录和文件不能存在于同一路径.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多