如果ID不需要按时间升序,为什么OSGi会选择ID最低的服务?

时间:2014-04-15 13:29:28

标签: java osgi

我正在读一本书(OSGi在实践中),并且有一部分关于服务的排名,它解释了所使用的规则:

  

首先要查看服务上的特殊 service.ranking 属性,可以在   代码为Constants.SERVICE_RANKING。该属性的值是一个整数   在Integer.MIN_VALUE(即-2,147,483,648)和Integer.MAX_VALUE之间   (2,147,483,647)。选择排名最高的服务 - 服务   没有显式排名属性的隐含值为零。如果   此规则产生平局,然后选择服务 ID 最低的服务。   第二条规则有些武断,但它往往导致“最古老”   选择服务,因为在大多数框架实现服务ID是   从递增计数器分配(虽然这种行为不是一部分   规范,不能依赖。)

为什么OSGi不强制执行服务 ID 的升序(按时间)?

为什么OSGi选择具有最低 ID 的服务,如果它们的排名相同?

1 个答案:

答案 0 :(得分:3)

服务ID由框架在服务注册时分配。每个新id必须大于以前使用的所有id(在该框架启动周期内)。这是OSGi规范的强制要求。请参阅核心规范中的5.2.5节(所以我猜这本书的主题是错误的)。

因此,较低的服务ID表示比具有较高服务ID的服务更早注册的服务。因此,当排名相等时,选择较早的注册服务。