我从Tomcat 8.0.18升级到8.0.23,突然间我遇到了JNDI问题。我查看了更改日志,Tomcat 8 Changelogs,我看到了三个JNDI更改,但没有一个让我觉得会破坏之前正在运行的配置。
JNDI相关的更改是针对错误49785,57587,以及在“其他”下的8.0.19下的条目。
当我使用8.0.23启动Tomcat时,我收到此异常:
javax.naming.NameNotFoundException: Name [jdbc/MyCluster] is not bound in this Context. Unable to find [jdbc].
在我的Web应用程序中,我定义了一个资源链接:
<Context>
<ResourceLink name="jdbc/MyCluster" global="jdbc/MyCluster" auth="Container" type="javax.sql.DataSource" />
</Context>
我将Tomcat配置为:
<Resource name="jdbc/MyCluster" global="jdbc/MyCluster" ......./>
我很难过...我无法弄清楚在我从18升级到23之后是什么让我的代码中断:(
答案 0 :(得分:1)
万一有人好奇如何从Tomcat 8.0.18升级到8.0.24真的会导致JNDI搞砸,答案就在于ANT。
我自己和其他一些工程师不知道如果你要覆盖的文件有一个更新的时间戳,ANT Copy什么都不做......谁知道副本有这么复杂的条件!?!我相信这就是为什么我和多个人从未看过文档,这是一种意想不到的行为。
无论如何,通过升级到较新版本的Tomcat,我的包含resourcelink jdbc / MyCluster的context.xml未能覆盖Tomcat的默认context.xml的更新和更新的时间戳!一旦overwrite标志设置为true,JNDI再次工作:)