2014-04-08 32 views
0

我有两个门户网站项目的WebSphere动态缓存脱盐问题

PROJECT1

项目2

我这是在上述两个项目中使用的共享库(sharedLibrary.jar)集。我的共享库用于查找动态缓存并从中设置/获取数据。

我设置一个我自己的豆豆(说它是com.test.UserBean)从项目1

从项目的凌晨2点

现在试图检索豆DYNA缓存(com.test.UserBean)来自缓存。当我这样做时,我得到了classCastException。

但是当我分配它像它下面我展示该对象是com.test.UserBean

对象OBJ = distributedMap.get(); 我的bean实现Serializable接口并有一个serialVersionUID字段。

我不知道这里发生了什么。这是一个类加载器问题/别的。

任何人都可以在这方面更多的了解吗?

+0

你是如何部署共享库的?另外,你可以发布完整的堆栈跟踪吗? – DanielBarbarian

回答

1

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

如果该类是由一个单一的通用类加载器通过两个portlet web应用程序真正加载,则可以通过DynaCache共享实例。

然而,如果2 不同类加载器被用于从相同的.jar(在磁盘上)加载相同的.class并且两个应用程序共享的单个实例(例如,经由动态缓存分布式地图)你会遇到ClassCastException - 尽管如您所见,myInstance.getClass().getName()会产生相同的字符串。

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

+0

谢谢scotth ..你的建议有很大帮助.. – Arajit