Service 为什么我更喜欢OSGi服务而不是导出的包?
我正试图了解OSGi服务。我一直在问自己的主要问题是:使用服务而不是使用捆绑包及其导出包有什么好处 据我所知,似乎后期绑定的概念与此有关。Bundle依赖项在Bundle开始时连接在一起,所以我想它们是相当固定的。但在服务方面,情况似乎几乎是一样的。捆绑包启动并注册服务或绑定到服务。当然,服务可以随时来来去去,你必须跟踪这些机会。但核心理念对我来说似乎没有什么不同 另一个方面似乎是服务更加灵活。对于一个特定的接口,可能有许多实现。另一方面,对于特定的导出包,也可能有许多不同的实现 在另一篇文章中,我读到使用导出包的缺点是它们使应用程序比服务更脆弱。作者写道,如果从依赖关系图中删除一个bundle,其他依赖关系将不再满足,因此可能会对整个图造成多米诺效应。但是,如果一个服务离线,难道不会发生同样的情况吗?在我看来,服务依赖性并不比捆绑依赖性好多少 到目前为止,我还没有找到一篇博客文章、书籍或演示文稿能够清楚地描述为什么服务比通过导出和导入包来公开功能更好 总结我的问题: 使用OSGi服务使其优于导出和导入包的主要好处是什么Service 为什么我更喜欢OSGi服务而不是导出的包?,service,osgi,late-binding,Service,Osgi,Late Binding,我正试图了解OSGi服务。我一直在问自己的主要问题是:使用服务而不是使用捆绑包及其导出包有什么好处 据我所知,似乎后期绑定的概念与此有关。Bundle依赖项在Bundle开始时连接在一起,所以我想它们是相当固定的。但在服务方面,情况似乎几乎是一样的。捆绑包启动并注册服务或绑定到服务。当然,服务可以随时来来去去,你必须跟踪这些机会。但核心理念对我来说似乎没有什么不同 另一个方面似乎是服务更加灵活。对于一个特定的接口,可能有许多实现。另一方面,对于特定的导出包,也可能有许多不同的实现 在另一篇文章中
附加 我试图收集关于这个问题的更多信息,并对包裹和服务的简单出口/进口进行比较。也许这会帮助我们找到一个令人满意的答案
Import-Package: net.jens.helloworld
如果net.jens.helloworld提供服务,我还需要导入包以获得接口
因此,在这两种情况下,它们都是某种“紧密耦合”到或多或少特定的包从建筑的观点来看,我也认为捆绑可以被看作是应用的基础。基础不应该在开始和停止捆绑时经常发生变化。该功能由该包的服务在“bundle层”之上的某种动态层中提供。这个“服务层”可能会经常更改。例如,如果数据库处于脱机状态,则查询数据库的服务将取消注册
你怎么看?我是否已经开始了解服务的全部要点,还是我的想法仍然错误?与导出包相比,我是否缺少了使服务更具吸引力的东西?我认为这篇优秀的文章可以回答您的许多问题:当您开始使用OSGi时,使用导出包方法总是更容易,它当然更像java。但是,当您的应用程序开始增长,并且您需要一点动态性时,服务就是最好的选择 导出包仅在启动时执行解析,而服务是一个持续的解析(您可能想要或不想要)。从支持的角度来看,拥有服务可能非常可怕(它是确定性的吗?我如何复制问题?),但它也非常强大 解释了为什么他认为服务是一种范式转换,就像OO在它的时代一样。见和
在我所有的OSGi经验中,我还没有机会实现复杂的服务(即多个层),当然注释似乎是一条可行之路。您还可以使用来减轻处理服务跟踪器的痛苦。(还有许多其他选项,如和)我建议购买这本书。它很好地解释了服务,并完成了使用OSGi服务的非平凡应用程序的构建 我的公司通常使用服务构建100多个捆绑应用程序。我们从使用服务中获得的主要好处是: 1) 生产者/消费者实现的松散耦合 2) 热插拔服务提供商 3) 清洁剂应用