2012-09-06 33 views
1

我正在开发一个项目,我需要缓存一些需要这些类来实现可序列化的类。我收到的错误类似于这个“classcastexception:类demo.x.t.y.A(我序列化的任何类)不能转换为类demo.x.t.y.A”。我的意思是班级彼此完全相同。Java可序列化类生成的uuid不适用于ehcache

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

在上面的serialversionUUID的java默认类中,有一个注释完全类似于“/ **使用来自JDK 1.0.2的serialVersionUID来实现互操作性* /”。这是否意味着我应该使用jdk1.0.2生成uuid?我尝试了很多东西,并接受任何解决方案。谢谢你的回复。

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

既然我的第一个问题,对于我写的问题的任何错误抱歉。

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

回答

0

该问题可能不是由串行版本的UID造成的,而是由类加载器问题造成的。您可能尝试将类加载器类A(EHCache使用的类加载器)加载到类加载器B(您的Web应用程序的类加载器)加载的类中。

没有更多的细节,很难告诉你应该做什么,但要确保你的类可以被一个且只有一个类加载器加载。例如,如果该类既位于Web应用程序的类路径(WEB-INF/lib)中,也位于服务器类路径中,则可能是问题所在。

+0

要测试我是否使用ehcache犯了任何错误,我创建了具有非常简单的类的新项目,但不认为它们被复制到其他任何位置,但是我会查找类加载器问题。谢谢回复。如果我取得进展,我会尽力给予反馈。 – user