【问题标题】:Java serializable classes generated uuid does not work for ehcacheJava 可序列化类生成的 uuid 不适用于 ehcache
【发布时间】:2012-08-30 21:04:57
【问题描述】:

我正在开发一个项目,我需要缓存一些需要这些类实现可序列化的类。我收到的错误类似于“classcastexception: class demo.x.t.y.A(any class I serialized) cannot be cast to class demo.x.t.y.A”。我的意思是类彼此完全相同。

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

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

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

自从我的第一个问题以来,对于我写问题的任何错误,我们深表歉意。

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

【问题讨论】:

    标签: java ehcache serializable


    【解决方案1】:

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

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

    【讨论】:

    • 为了测试我是否在使用 ehcache 时犯了任何错误,我使用非常简单的类创建了新项目,我认为它们不会在其他任何地方复制,但我会四处寻找类加载器问题。谢谢回复。如果我有任何进展,我会尽力提供反馈。
    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 2012-05-07
    • 2016-08-03
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多