2012-07-12 29 views
0

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

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

谢谢

+1

线索是在名称。它取决于你想跟踪的内容;-) – 2012-07-12 14:56:20

+0

@NeilBartlett好吧,我明白可以通过捆绑定义多个服务? – 2012-07-12 15:06:02

+3

软件包发布零到多个服务。真的,你不应该在这个阶段看这些公用事业。您应该专注于使用服务的简单方法,我推荐使用声明式服务。我还建议收到一本像“OSGi in Action”这样的书,而不是试图通过规范。 – 2012-07-12 15:33:34

回答

4

取决于你愿意跟踪什么。

的BundleTracker跟踪包,请参阅:

而且ServiceTracker的跟踪服务实例,请参见:

所以,很显然,如果你有兴趣在什么捆包带发生,您使用BundleTracker。如果你对服务实例感兴趣,你可以使用ServiceTracker。

0

说得很简单: 包是罐子。您可以跟踪它是否已安装,成功启动,尚未启动等。

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

在最典型的情况下,您的代码可以与服务一起工作 - 例如,你得到LogService并调用它的log()方法。因此,在99%的情况下,您应该对ServiceListener感兴趣(或者,更好的方式是使用ServiceTracker,它也是如此,但是会为您处理一些典型的同步缺陷)。

希望这有助于:)

相关问题