调用OSGI包中组件的activate方法的顺序

调用OSGI包中组件的activate方法的顺序,osgi,aem,Osgi,Aem,在OSGI捆绑包中,我们可以有许多具有激活方法的组件。激活捆绑包后调用它们的顺序是什么?一旦所有必需的引用都存在,组件将被激活。如果在某一时间可以激活多个组件,则无法保证顺序。如果捆绑包具有不同的启动级别,则较低启动级别的捆绑包的所有激活方法将在较高启动级别的捆绑包激活方法之前执行 使用此逻辑,您可以控制激活方法序列,也可以根据日志确定发生了什么 实际上,您的捆绑包必须按依赖项排序,而不是按起始级别排序。正如Christian所说,这没有定义。一旦满足依赖关系,OSGI将激活该服务 第二点,您的

在OSGI捆绑包中,我们可以有许多具有激活方法的组件。激活捆绑包后调用它们的顺序是什么?

一旦所有必需的引用都存在,组件将被激活。如果在某一时间可以激活多个组件,则无法保证顺序。

如果捆绑包具有不同的启动级别,则较低启动级别的捆绑包的所有激活方法将在较高启动级别的捆绑包激活方法之前执行

使用此逻辑,您可以控制激活方法序列,也可以根据日志确定发生了什么

实际上,您的捆绑包必须按依赖项排序,而不是按起始级别排序。

正如Christian所说,这没有定义。一旦满足依赖关系,OSGI将激活该服务


第二点,您的服务不应该依赖于启动序列。如果他们这样做了,那就是坏习惯。为什么这与您的项目相关?也许我们可以帮助您构建它。

正如其他人所指出的,这是没有定义的


也就是说,有时有很好的理由在激活过程中按给定顺序调用几个方法。如果是这样的话,您可以始终使用一个Activate方法来调用所有其他方法。通过这种方式,您可以应用最适合您的用例的任何顺序逻辑。如果需要,它甚至可以考虑配置值。

Hi.谢谢你的回答,但我的问题是关于在单个包中激活组件内部的方法?AFAIK,框架使用标准Java反射API查询具有@activate属性的类中的方法。您可以定义服务依赖项,但如果没有,大多数类及其激活器方法将以未排序/无序的方式枚举,因为反射API都不遵循任何排序顺序。因此,您的问题的答案是,调用activation方法的顺序未定义。此外,对于延迟的组件,只有在有人实际请求组件实例时才会调用activate。