OSGi中的反序列化问题

时间:2014-11-19 06:57:54

标签: java serialization osgi deserialization

我正在使用OSGi插件,而且我遇到了反序列化问题。

假设有两个插件A和B.插件A是通用的,可以在很多应用程序中使用,而插件B仅适用于一个应用程序。插件A基本上是所有应用程序的框架。插件B使用插件A的API来保存状态信息。因此,插件B依赖于A但A不依赖于B.

为简单起见,假设我将信息存储在插件A的HashMap中。实现Serializable的类X存在于插件B中。插件A序列化并存储。在反序列化过程中,插件A无法找到类X并且失败。我不能将Class X添加到插件A中,因为插件A是通用的,在A中没有任何意义。

X类在运行时可用。解决这个问题的正确和干净的方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:1)

听起来像插件A是缓存。插件A的设计方式应该是在初始化期间(或在每个请求期间)传入classLoader的方式。如果它不是以这种方式设计的,它实际上并不是OSGi友好的,它不应该在OSGi环境中使用。

例如:EHCache,Infinispan和其他缓存引擎允许您在缓存初始化期间传递Classloader实例。

答案 1 :(得分:0)

您可以为包含A的捆绑包A创建Fragment Bundle