Java STS3.2——即使没有在web.xml中注册,JNDI仍然可以访问

Java STS3.2——即使没有在web.xml中注册,JNDI仍然可以访问,java,spring,tomcat,jndi,Java,Spring,Tomcat,Jndi,可能问题应该是“applicationContext.xml和web.xml之间的关系是什么,是父子关系还是兄弟关系” 当前的Spring应用程序在Tomcat中定义JNDI,并在web.xml中的中注册JNDI。有几个JNDI资源bean是由在applicationContext.xml中创建的: 现在有趣的发现是,在注释掉web.xml中的所有之后,JNDI数据源仍然可以访问,这让我怀疑应用程序通过applicationContext.xml直接访问Tomcat(在哪里可以找到JNDI名

可能问题应该是“applicationContext.xml和web.xml之间的关系是什么,是父子关系还是兄弟关系”

当前的Spring应用程序在Tomcat中定义JNDI,并在
web.xml
中的
中注册JNDI。有几个JNDI资源bean是由
applicationContext.xml
中创建的:


现在有趣的发现是,在注释掉
web.xml
中的所有
之后,JNDI数据源仍然可以访问,这让我怀疑应用程序通过
applicationContext.xml
直接访问Tomcat(在哪里可以找到JNDI名称),而不需要通过
web.xml


还必须提到的是,这种现象只在STS3.2/tomcat-7.0.35.B.RELEASE中发生,而在STS2.9.2/tomcat-7.0.30.A.RELEASE中不发生

您是否在相同的tomcat容器中安装了具有相同JNDI名称的其他web应用程序?如果是这样的话,你的应用程序将查找它。尝试重新启动tomcat,可能之前的数据源尚未完全卸载,因此您仍然可以在上发现它JNDI@gerrytan非常感谢。我在STS和ts服务器上进行了一次新的安装,因此不应该缓存任何内容,一旦我在
web.xml
中运行了没有JNDI源代码的应用程序,就可以了。但是,这个版本的Tomcat仍然允许
applicationContext.xml
直接从Tomcat
context.xml
访问JNDI。只是不知道什么样的配置可以让这变成另一种方式。
<jee:jndi-lookup id="dataSource_A" jndi-name="jndi/sourceA" />
<jee:jndi-lookup id="dataSource_B" jndi-name="jndi/sourceB" />
<jee:jndi-lookup id="dataSource_C" jndi-name="jndi/sourceC" />