ServiceTracker与BundleTracker

时间:2012-07-12 13:14:17

标签: java osgi

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

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

由于

2 个答案:

答案 0 :(得分:4)

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

BundleTracker跟踪包,请参阅:

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

很明显,如果您对bundle的内容感兴趣,可以使用BundleTracker。如果您对服务实例感兴趣,请使用ServiceTracker。

答案 1 :(得分:0)

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

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

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

希望这会有所帮助:)