Java可序列化类生成的uuid不适用于ehcache

标签 java ehcache serializable

我正在开发一个项目,我需要缓存一些类,这些类需要这些类实现可序列化。我收到的错误类似于“classcastException:类 demo.x.t.y.A(我序列化的任何类)无法转换为类 demo.x.t.y.A”。我的意思是类(class)彼此完全相同。

经过深度尝试,当我使用java自己的实现可序列化的类而不是我的可序列化类时,我发现程序可以工作。我使用 netbeans 网站中建议的插件在 netbeans 中生成了 uuid。我很确定原因是我自己生成的 uuid,但为什么 uuid 不起作用?生成 uuid 后我不会对类进行任何更改。

在serialversionUUID之上的java默认类中,有一个与此完全相同的注释“/**使用JDK 1.0.2中的serialVersionUID来实现互操作性*/”。这是否意味着我应该使用jdk1.0.2生成uuid?我尝试了很多事情并对任何解决方案持开放态度。感谢您的回复。

为了帮助可能遇到相同问题的开发人员,我有一个我不想使用的解决方案。您可以单独缓存每个变量,而不是缓存整个类。

由于这是我的第一个问题,对于我在编写问题时犯的任何错误表示歉意。

编辑: 我正在使用servlet。当我运行 servlet 时,它工作正常,但在另一次部署后它失败。

最佳答案

该问题可能不是由串行版本 UID 引起的,而是由类加载器问题引起的。您可能尝试将一个类由类加载器 A(EHCache 使用的类加载器)加载的类的对象强制转换为由类加载器 B(您的 Web 应用程序的类加载器)加载的类。

如果没有更多细节,很难说出您应该做什么,但请确保您的类可以由且仅一个类加载器加载。例如,如果该类同时位于 Web 应用程序的类路径 (WEB-INF/lib) 和服务器类路径中,则可能是问题所在。

关于Java可序列化类生成的uuid不适用于ehcache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12293390/

相关文章:

java - 使用 CSS : Selenium 按选择列表的内容查找 WebElement

java - 即使我发送的所有对象都是可序列化的,也收到 NotSerializedException

java - 监控 Ehcache 统计信息?

hibernate - 实体子类的专用缓存区域?

java - 为什么 java.lang.Object 不实现 Serializable 接口(interface)?

java - Mvel的编译表达式如何存储在数据库中

java - 如何提供多个数组输入而不引起数组越界异常

java - 在 spring mvc 中获取 java.lang.NullPointerException

java - 我想创建一个文件并存储在 HTTPS 路径中,下面的文件适用于本地存储,您能帮助我了解如何存储文件 http 路径吗?

java - Spring EhCache 中多个缓存不起作用