处理捆绑中服务创建的类的实例?

时间:2015-12-22 15:32:04

标签: java osgi

如何处理捆绑中服务创建的类的实例?当主机应用程序(具有嵌入式osgi容器的应用程序)保留实例并且更新包时,这会导致问题。更新后,有两个版本的类实例。不理想。

我找到了几个解决方案:

  • 让捆绑包负责类实例
  • 让主机应用程序在更新
  • 上序列化/反序列化实例
  • 使用反射来访问实例
  • 为所有服务使用不可更改的数据对象(例如散列映射)

1 个答案:

答案 0 :(得分:0)

在您的情况下(嵌入式OSGi容器),主机应用程序通常包含OSGi服务实现的接口。

根据您的最后三个选项,我想您不希望使用新的OSGi服务重新生成实例。如果API在主机应用程序中,则无需执行任何操作。实例的类型来自被删除的包,这无关紧要。只有API很重要。由于您的实例是Serializable,我猜他们不必关闭(关闭某些流或其他任何内容)。

如果您想在每次OSGi服务再次可用时重新生成实例,您可以在Host Application中实现ServiceTracker并捕获注册和取消注册OSGi服务的事件。

如果您的主机应用程序是一个捆绑包,您可以使用Declarative Services来实现您的逻辑,这样您就可以避免使用ServiceTracker等低级API。

相关问题