【问题标题】:spring not able to find JNDI data sourcespring 找不到 JNDI 数据源
【发布时间】:2011-09-17 17:31:18
【问题描述】:

我正在开发一个 Spring Web 应用程序。我在应用程序中使用的 JAR 文件正在使用 JNDI 查找 DataSource。我在我的 tomcat 的 server.xml 中配置了该元素。配置如下,

<GlobalNamingResources>
  <Resource name="jdbc/abcd" 
            auth="Container" 
            type="javax.sql.DataSource" 
            maxActive="70"
            maxWait="10000" 
            username="xxxx" password="yyyy" 
            validationQuery="SELECT 1 from dual"
            driverClassName="oracle.jdbc.driver.OracleDriver" 
            url="jdbc:oracle:thin:@xx.xxx.xx.xx:xxxx:zzzz"
            testOnBorrow="false"
            testOnReturn="false"
            testWhileIdle="true"
            timeBetweenEvictionRunsMillis="120000"
            minEvictableIdleTimeMillis="3600000"
  />
</GlobalNamingResources>

上面配置的资源名称,“jdbc/abcd”与JAR正在寻找的相同, 但它无法找到这个配置的数据源。有谁知道可能是什么原因?

我得到以下异常,

javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

【问题讨论】:

  • 你能提供应用程序上下文,你在哪里查找你的数据源
  • 我没有收到您的问题。实际上是 Web 应用程序开发的新手。您能说出“应用程序上下文”是什么意思吗?
  • Spring 框架定义了一个容器区域,称为“应用程序上下文”。那是例如一个名为“application-context.xml”的 XML 文件,其中包含 Bean 定义。 Spring 文档的This part 将为您提供更多详细信息。
  • 我不认为 Spring 或 Spring 配置是这里的问题。他正在使用一个外部 jar 文件,该文件似乎依赖于名为 jdbc/abcd 的 J2EE 资源。他需要做的是在 J2EE 上下文中为他的应用程序定义这个资源。我不认为 Spring 应用程序上下文是相关的。
  • 不,“jdbc/abcd”是 JNDI 名称的简写。对于 Tomcat,它应该是“java:comp/env/jdbc/adbc”。

标签: spring tomcat datasource jndi


【解决方案1】:

您需要在 Web 应用程序上下文中定义一个 ResourceLink,使全局资源对 Web 应用程序可见。

<ResourceLink 
        name="nameThatIsVisibleToTheWebApplication"
        global="theGlobalName"
        ...

【讨论】:

  • 我应该把它放在 web.xml 中吗?
  • @Mariselvam 您也可以将其放入位于 server.xml 所在的 /conf 文件夹中的 context.xml 文件中。
【解决方案2】:

您需要做的不仅仅是配置 Spring。

我建议阅读Tomcat JNDI documentationthis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2015-04-21
    • 2020-07-19
    • 2011-12-07
    • 2013-05-04
    • 2021-05-10
    • 2020-03-06
    相关资源
    最近更新 更多