我正在使用 OSGi 插件,但遇到反序列化问题。
假设有两个插件 A 和 B。插件 A 是通用的,会在很多应用程序中使用,而插件 B 只特定于一个应用程序。插件 A 基本上是所有应用程序的框架。插件 B 使用插件 A 的 API 来保存状态信息。因此,插件 B 依赖于 A,但 A 不依赖于 B。
为了简单起见,假设我将信息存储在插件 A 的 HashMap 中。实现 Serialized 的类 X 存在于插件 B 中。插件 A 将其序列化并存储。在反序列化过程中,插件 A 无法找到类 X,因此失败。我无法将 X 类添加到插件 A,因为插件 A 是通用的,在 A 中没有任何意义。
X 类在运行时可用。解决这个问题的正确而干净的方法是什么?
提前致谢。
最佳答案
听起来插件 A 是一个缓存。插件 A 的设计方式应该是在初始化期间(或在每次请求期间)可以传入类加载器。如果不是这样设计的,那么它并不是真正的OSGi友好的,不应该在OSGi环境中使用。
例如:EHCache、Infinispan等缓存引擎允许在缓存初始化期间传递Classloader实例。
关于java - OSGi 中的反序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27010799/