在 Eclipse 中停止 Tomcat 10 时出现 ClassCastException

问题描述 投票:0回答:2

我正在使用 Eclipse 2022-06 和 Tomcat 10.0.10。

通常,当关闭 Eclipse 中运行的 Tomcat 时,我会得到

WARNUNG: Failed to clear soft references from ObjectStreamClass$Caches for web application [ROOT]
java.lang.ClassCastException: class java.io.ObjectStreamClass$Caches$1 cannot be cast to class java.util.Map (java.io.ObjectStreamClass$Caches$1 and java.util.Map are in module java.base of loader 'bootstrap')
    at org.apache.catalina.loader.WebappClassLoaderBase.clearCache(WebappClassLoaderBase.java:2363)

...

我发现了this问题,但它并不真正适用:它是一个不同的类(Map而不是String),我找不到名为“SESSIONS.ser”的文件。我还已经从实际的 Web 服务部分中删除了所有内容(因此代码什么也不做)。我只是还没有开始删除所有可能自动加载的链接的 jar 文件。

有什么方法可以找出哪个类真正导致了问题?

顺便说一句,如果通过将 WAR 文件部署到 Eclipse 外部的 Tomcat 安装中,我无法重现日志中的错误。我不确定这是否意味着它没有出现。

java tomcat classcastexception
2个回答
11
投票

升级 IDE 后,我遇到了同样的问题。
比较了两个 tomcat 日志后,我发现使用了 2 个不同的 jvm。 确实我升级了jdk和ide!

jvm11.0.16 出现此问题,jvm11.0.11 即使在最新的 ide 版本上也不例外。

这是解释,但是保留旧jvm的解决方案可能不是很好......

所以我将 Tomcat 升级到最新版本(我的例子是 8.5.82),它解决了问题。我猜是由于这个功能(参见tomcat更新日志):

禁用Context启用的内存泄漏修正代码 在 JRE 上运行时属性clearReferencesObjectStreamClassCaches 其中包括对底层内存泄漏的修复。 (市场)


0
投票

对于我们来说,Spring Boot 3 需要升级到 Jakarta EE 9+。当我们运行 Tomcat9 时,Jakarta EE 9+ 需要 Tomcat 10.1.x。

所以我们的解决方案是也升级到最新的 Tomcat 版本。

© www.soinside.com 2019 - 2024. All rights reserved.