0

OSGi 企业规范定义了两种跟踪方式:按服务或按捆绑。

这两种方式有什么区别?在哪些情况下,应该使用一种方式而不是另一种方式?

谢谢

4

2 回答 2

4

取决于您愿意跟踪的内容。

BundleTracker 跟踪捆绑包,请参阅:

ServiceTracker 跟踪服务实例,请参阅:

所以很明显,如果您对捆绑包发生的事情感兴趣,您可以使用 BundleTracker。如果您对服务实例感兴趣,可以使用 ServiceTracker。

于 2012-07-12T13:34:26.757 回答
0

简单地说:捆绑就是罐子。您可以跟踪它是否已安装、成功启动、尚未启动等。

一个包可以发布零个或多个服务。OSGi 术语中的服务是活动的 java 对象,它为您提供做某事的方法。即使捆绑包在那里,它的服务也可能已经消失(例如,因为捆绑包已停止;或已安装但尚未启动)。即使 bundle 处于 ACTIVE 状态,它仍然可能在等待某些条件以提供其服务 - 它完全取决于 bundle 决定何时注册和取消注册其服务。

在最典型的情况下,您的代码与服务一起使用——例如,您获取 LogService 并调用它的 log() 方法。因此,在 99% 的情况下,您应该对 ServiceListener 感兴趣(或者,更好的是,使用 ServiceTracker,它的作用相同,但会为您处理一些典型的同步陷阱)。

希望这可以帮助 :)

于 2012-07-16T06:43:11.247 回答