OSGI bundle中组件激活方法的调用顺序
sequence of calling activate method of components in OSGI bundle
在 OSGI bundle 中,我们可以有很多具有 Activate 的组件 method.What 将在激活 bundle 后调用它们的顺序?
一旦组件的所有强制引用都存在,组件将被激活。如果在某一时间可以激活多个组件,则无法保证顺序。
如果捆绑包具有不同的起始级别,则较低起始级别捆绑包的所有激活方法将在较高起始级别捆绑包的激活方法之前执行。
通过这个逻辑,您可以控制激活方法的顺序,或者您可以根据日志确定发生了什么。
实际上,您的包必须按依赖项而不是起始级别排序。
正如克里斯蒂安所说,这是 未定义。一旦满足依赖关系,OSGI 将激活该服务。
第二点 - 您的服务不应依赖于启动顺序。如果他们这样做,那是不好的做法。为什么这与您的项目相关?也许我们可以帮助您构建它。
正如其他人所指出的,这没有定义。
也就是说,有时有充分的理由在激活期间按给定顺序调用多个方法。如果是这种情况,您始终可以使用一个 "Activate" 方法来调用所有其他方法。这样您就可以应用最适合您的用例的任何订单逻辑。如果需要,它甚至可以考虑配置值。
在 OSGI bundle 中,我们可以有很多具有 Activate 的组件 method.What 将在激活 bundle 后调用它们的顺序?
一旦组件的所有强制引用都存在,组件将被激活。如果在某一时间可以激活多个组件,则无法保证顺序。
如果捆绑包具有不同的起始级别,则较低起始级别捆绑包的所有激活方法将在较高起始级别捆绑包的激活方法之前执行。
通过这个逻辑,您可以控制激活方法的顺序,或者您可以根据日志确定发生了什么。
实际上,您的包必须按依赖项而不是起始级别排序。
正如克里斯蒂安所说,这是 未定义。一旦满足依赖关系,OSGI 将激活该服务。
第二点 - 您的服务不应依赖于启动顺序。如果他们这样做,那是不好的做法。为什么这与您的项目相关?也许我们可以帮助您构建它。
正如其他人所指出的,这没有定义。
也就是说,有时有充分的理由在激活期间按给定顺序调用多个方法。如果是这种情况,您始终可以使用一个 "Activate" 方法来调用所有其他方法。这样您就可以应用最适合您的用例的任何订单逻辑。如果需要,它甚至可以考虑配置值。