使用Tomcat 5.5和Spring </resource-ref>的Web.xml中的<resource-ref>用法

时间:2012-01-31 11:10:40

标签: spring java-ee jndi web.xml

我正在使用<jee:jndi-lookup>进行Jndi查找。一切正常,但根据Tomcat站点中的Jndi资源reference,我们需要Web.xml中的<resource-ref>。我无法理解为什么我们需要这个。如果我在conf文件夹下有一个没有web.xml定义的context.xml,那么一切正常。

我的问题是,只有当我们通过普通的Java代码(<resource-ref>)而不是通过Spring查找Jndi时才需要InitialContext().lookup("...")。我不确定我们是否也需要这个。

我在What is resource-ref in web.xml used for?看到了对此的讨论,但下面的配置

<resource-ref>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
</resource-ref>
当我在应用程序的web.xml(在WEB-INF下)使用它时,

似乎没有按照规定工作。我认为这是JBoss web.xml特有的。请帮我理解。

1 个答案:

答案 0 :(得分:4)

Spring 普通Java代码。这不是黑魔法。

使用resource-ref是一种很好的做法,因为它允许使用Web应用程序本地名称,而不是使用容器中所有Web应用程序共享的全局名称。

假设您要在同一容器中部署同一应用程序的两个不同版本,并且两者都使用相同的全局JNDI名称。他们现在被迫使用相同的数据库,这是错误的。而如果您使用在web.xml文件中声明的本地名称,则可以将每个版本与其自己的全局名称相关联,因此两个版本都使用两个不同的数据库。

如果您部署两个完全不同的应用程序,并且两者都碰巧使用相同的jdbc/OracleDS全局名称,那么情况也是如此。