WebSphere DynaCache脱盐问题

时间:2014-04-08 21:17:40

标签: java java-ee websphere websphere-portal dynacache

我有两个门户网站项目

PROJECT1

项目2

我有一个共享库(sharedLibrary.jar)集,它在上面的项目中使用。我的共享库用于查找dyna缓存并从中设置/获取数据。

我正在将自己的bean bean(比如com.test.UserBean)设置为来自项目1的dyna缓存。

现在从项目2开始尝试从缓存中检索bean(com.test.UserBean)。这样做时我得到classCastException。

但是当我像下面那样分配它时,它向我显示对象是com.test.UserBean

Object obj = distributedMap.get(); 我的bean实现了Serializable接口,并有一个serialVersionUID字段。

我不确定这里发生了什么。它是一个类加载器问题/其他。

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

这不太可能是序列化问题,更可能是类加载器问题。

如果两个portlet Web应用程序通过单个公共类加载器真正加载了类,则可以通过DynaCache共享实例。

但是,如果使用两个不同的类加载器从同一个.jar(磁盘上)加载相同的 .class,并且这两个应用程序共享一个实例(例如,通过DynaCache分发地图)你会遇到ClassCastException - 尽管如你所见,myInstance.getClass().getName()会产生相同的字符串。

要确认这一点,您可以enable a service并使用WebSphere classloader viewer。这将使您,按照模块,解决您的“两个类加载器,一个类”问题。 InfoCenter文档中有一个配套文档,可引导您完成troubleshooting process。类加载器查看器将向您显示使用哪个.jar和哪个类加载器在每个模块中加载com.test.UserBean。例如,您可能不小心将jar打包在一个而不是另一个的WEB-INF / lib中,并启用了父级最后一个类加载。

相关问题