我正在使用<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特有的。请帮我理解。
答案 0 :(得分:4)
Spring 是普通Java代码。这不是黑魔法。
使用resource-ref
是一种很好的做法,因为它允许使用Web应用程序本地名称,而不是使用容器中所有Web应用程序共享的全局名称。
假设您要在同一容器中部署同一应用程序的两个不同版本,并且两者都使用相同的全局JNDI名称。他们现在被迫使用相同的数据库,这是错误的。而如果您使用在web.xml文件中声明的本地名称,则可以将每个版本与其自己的全局名称相关联,因此两个版本都使用两个不同的数据库。
如果您部署两个完全不同的应用程序,并且两者都碰巧使用相同的jdbc/OracleDS
全局名称,那么情况也是如此。