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

Java 如果ID不需要按时间升序,为什么OSGi会选择ID最低的服务?,java,osgi,Java,Osgi,我正在读一本书(OSGi在实践中),其中有一部分是关于服务排名的,解释了使用的规则: 第一个是查看一个特殊的服务。在服务上对属性进行排名,可以在 代码为常量。服务等级。该属性的值是一个整数 介于Integer.MIN_值(即-2147483648)和Integer.MAX_值 (2,147,483,647). 将选择排名最高的服务-服务 没有显式排序属性的,取隐式值零。如果 此规则生成平局,然后选择服务ID最低的服务。 第二条规则有些武断,但它往往会导致“最古老的” 正在选择服务,因为在大多数框

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

第一个是查看一个特殊的服务。在服务上对属性进行排名,可以在 代码为常量。服务等级。该属性的值是一个整数 介于
Integer.MIN_值
(即-2147483648)和
Integer.MAX_值
(2,147,483,647). 将选择排名最高的服务-服务 没有显式排序属性的,取隐式值零。如果 此规则生成平局,然后选择服务ID最低的服务。 第二条规则有些武断,但它往往会导致“最古老的” 正在选择服务,因为在大多数框架实现中,服务ID是 从递增计数器分配(尽管此行为不是部分 不符合规范要求,不可依赖)

为什么OSGi不强制执行服务IDs的升序(时间顺序)


如果级别相同,OSGi为什么选择ID最低的服务呢?

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


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

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


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

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


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

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


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

书中说
此行为不属于规范的一部分,不能依赖。
。这本书是错误的。“框架为每个已注册的服务对象分配了一个唯一的service.id。此数字将添加到服务对象的属性中。框架为每个已注册的服务对象分配一个唯一值,该值大于为所有以前注册的服务对象提供的值。”这本书说,
这种行为不属于规范的一部分,不可信赖。这本书是错误的。“框架为每个已注册的服务对象分配了一个唯一的service.id。此数字将添加到服务对象的属性中。框架为每个已注册的服务对象分配一个唯一值,该值大于为所有以前注册的服务对象提供的值。”这本书说,
这种行为不属于规范的一部分,不可信赖。这本书是错误的。“框架为每个已注册的服务对象分配了一个唯一的service.id。此数字将添加到服务对象的属性中。框架为每个已注册的服务对象分配一个唯一值,该值大于为所有以前注册的服务对象提供的值。”这本书说,
这种行为不属于规范的一部分,不可信赖。这本书是错误的。“框架为每个已注册的服务对象分配了一个唯一的service.id。此数字将添加到服务对象的属性中。框架为每个已注册的服务对象分配一个唯一值,该值大于为所有以前注册的服务对象提供的值。”