Spring无法找到JNDI数据源。

3

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

<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

您能提供应用程序上下文,在其中查找数据源吗? - undefined
我不明白你的问题。实际上,我是一个新手,对于网页应用开发并不熟悉。你能告诉我“应用上下文”是什么意思吗? - undefined
Spring框架定义了一个被称为"应用上下文"的容器区域。例如,这是一个名为"application-context.xml"的XML文件,其中包含Bean的定义。Spring文档的这部分将为您提供更多详细信息。 - undefined
我认为这里的问题不在于Spring或Spring配置。他正在使用一个外部的jar文件,似乎依赖于一个名为jdbc/abcd的J2EE资源。他需要在J2EE上下文中定义这个资源来供应用程序使用。我认为Spring应用程序上下文并不相关。 - undefined
不,"jdbc/abcd"是JNDI名称的简写。对于Tomcat来说,应该是"java:comp/env/jdbc/adbc"。 - undefined
2个回答

4
您需要在Web应用程序上下文中定义一个ResourceLink,使全局资源对Web应用程序可见。
<ResourceLink 
        name="nameThatIsVisibleToTheWebApplication"
        global="theGlobalName"
        ...

我应该将这个放在 web.xml 中吗? - undefined
@Mariselvam 你可以将它放入context.xml文件中,该文件位于server.xml所在的/conf文件夹中。 - undefined

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接