我正在创建一个MVC Spring webapp。 使用:Jetty(servlet容器),DataNucleus(dao平台),DB4O(嵌入式数据存储区)。
当我使用DataNucleus中的JDO持久保存一个对象(在Spring Controller中完成)时,它会存储到数据库中。
@PersistenceCapable
public class Test {
@Persistent
private String testString;
//getter-setters implemented
}
当我对我之前添加的对象进行简单查询时,我的Test类上有ClassCastException
(无法将a.b.c.Test
强制转换为a.b.c.Test
)。
JDO返回的Test的类加载器是(toString)[sun.misc.Launcher$AppClassLoader@5acac268]
,在我将它保存到数据库之前,Test类的类加载器是[WebAppClassLoader@1593275665]
我已经走到了这一步,但我真的不知道如何处理这样的类加载器问题,我以前从未在类加载器上花太多时间。任何方向都有帮助。
答案 0 :(得分:4)
要显示类强制转换异常,不需要有两个不同版本的类。 当由两个不同的类加载器加载时,即使是相同的类定义也被视为两个不同的类。这里的情况似乎就是这样。
不幸的是,我对您使用的平台并不熟悉,因此我无法提供比这更具体的建议:尝试将包含Test
类的jar移动到Web应用程序类路径上的不同位置,和/或重新配置Spring和Jetty类加载器,以便将Test
的加载委托给同一个父类加载器。
答案 1 :(得分:2)
我认为您的问题可能类似于here所描述的问题。
如果是这样,治愈似乎是为了确保jdo jar文件由类加载器的共同祖先加载。