如何处理捆绑中服务创建的类的实例?当主机应用程序(具有嵌入式osgi容器的应用程序)保留实例并且更新包时,这会导致问题。更新后,有两个版本的类实例。不理想。
我找到了几个解决方案:
答案 0 :(得分:0)
在您的情况下(嵌入式OSGi容器),主机应用程序通常包含OSGi服务实现的接口。
根据您的最后三个选项,我想您不希望使用新的OSGi服务重新生成实例。如果API在主机应用程序中,则无需执行任何操作。实例的类型来自被删除的包,这无关紧要。只有API很重要。由于您的实例是Serializable,我猜他们不必关闭(关闭某些流或其他任何内容)。
如果您想在每次OSGi服务再次可用时重新生成实例,您可以在Host Application中实现ServiceTracker并捕获注册和取消注册OSGi服务的事件。
如果您的主机应用程序是一个捆绑包,您可以使用Declarative Services来实现您的逻辑,这样您就可以避免使用ServiceTracker等低级API。