Tomcat 8 升级后的 JNDI NameNotFoundException

JNDI NameNotFoundException after Tomcat 8 upgrade

我从 Tomcat 8.0.18 升级到 8.0.23,突然我遇到了 JNDI 问题。我查看了更改日志,Tomcat 8 Changelogs,我看到了三个 JNDI 更改,尽管 none 让我觉得会破坏以前工作的配置。

针对错误 49785、57587 和 "Other".

下 8.0.19 下的条目进行了 JNDI 相关更改

我在使用 8.0.23 启动 Tomcat 时收到此异常:

javax.naming.NameNotFoundException: Name [jdbc/MyCluster] is not bound in this Context. Unable to find [jdbc].

在我的 Web 应用程序中,我定义了一个资源 link:

<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 后中断:(

万一有人好奇从 Tomcat 8.0.18 升级到 8.0.24 真的会导致 JNDI 搞砸,答案就在 ANT 中。

ANT Copy documentation

我自己和其他一些工程师不知道如果您要覆盖的文件具有较新的时间戳,ANT Copy 什么都不做...谁知道副本有如此复杂的条件!?!我相信这就是为什么我和很多人从未看过文档的原因,这是一种意想不到的行为。

无论如何,通过升级到更新版本的 Tomcat 我的 context.xml 包含资源链接 jdbc/MyCluster 无法覆盖 Tomcat 的更新和最近的时间戳的默认 context.xml!一旦覆盖标志设置为真,JNDI 再次工作:)