我尝试学习osgi是如何工作的。我写了我的第一个hello-world包,它在bundle激活器类的start-method被执行时给出了一些控制台输出。现在,我已阅读了懒惰的启动机制,并将此标志放到了我的捆绑软件清单中。然后,我启动了Equinox控制台,安装了我的包并启动了它。但现在我已经期望我的包被标记为“开始”。但它已经将其称为启动方法并被标记为活动。 我是否了解懒惰启动机制的任何错误?osgi软件包生命周期问题
回答
如果您有其他捆绑包依赖于捆绑软件包中的捆绑包和类,则使用懒惰开始标志。
说你有两束A和B,其中
- 一个出口C类
- B依赖于一个
- B包含一类d指向Ç
什么捆绑B被激活时发生?
没有 lazy-load标志,首先加载并激活A bundle。
随着的延迟加载标志,则一束未加载或激活,直到类d需要引用类C.
,可以使在所述的活动模式非常大的差异,如捆绑的加载和激活被推迟发生,尽可能延迟加载标志,所以来自捆绑的初始响应非常快...
相反,这个标志也使它成为一个更多的洞很难推断B中方法的执行时间,因为这可以在任何时候随着加载和激活bundle而被截获......
您说过,安装后您已经开始安装捆绑软件 - 如果您手动启动捆绑软件包,则无论采用惰性激活策略,它都会被激活。
根据the OSGi specification以下是激活真:
懒惰的激活策略表示捆绑,一旦开始,必须 不能直到一类是从它加载启动;在正常的 类加载期间或通过Bundle loadClass方法。资源加载 不会触发激活。此默认激活策略的更改会反映在捆绑包的状态及其 事件中。当包使用lazy激活策略启动,必须采取 以下步骤:在束创建
- 一个包上下文。
- 捆绑包状态被移动到STARTING状态。
- LAZY_ACTIVATION事件被触发。
- 系统等待来自包发生的类加载。
- 正常的STARTING事件被触发。
- 该包已激活。
- 捆绑包状态被移至ACTIVE。
- STARTED事件被触发。
如果因为包激活启动方法 抛出的异常激活失败,则必须捆绑而不调用 包激活停止方法停止。这些步骤如图4.29中的流程图 所示。该流程图还显示了正常激活激活的 激活策略和激活的惰性激活策略之间的差异。
更新:我不能说我写的,我当时已经打开了规范版本的答案(不过,我相信,这是不是4.2或4.3),我检查了电流,V5 .0规范,第4.4.6.2节包含实际的,语义上相同的地方。
您应该提供规范的来源。规范可能会随着时间而改变,未来的读者(像我)不知道你从哪个版本获得该报价。 –
感谢您的评论;我已经添加了对规范的引用。 –
- 1. Android生命周期问题
- 2. Android生命周期问题
- 3. 页生命周期问题
- 4. 软件开发生命周期资源
- 5. OSGi软件包启动问题
- 6. 会话生命周期问题
- 7. 活动生命周期中的问题
- 8. JSF 2 f:ajax生命周期问题
- 9. Android活动生命周期问题
- 10. ASP.NET页面生命周期问题
- 11. 关于asp.net生命周期的问题
- 12. ASP.net页面生命周期问题
- 13. iOS 5.0查看生命周期问题
- 14. Glassfish战争生命周期问题
- 15. 活动生命周期相关问题
- 16. JSF - 关于生命周期的问题
- 17. Axapta:表单生命周期问题
- 18. asp.net页面生命周期问题
- 19. 问题与页面生命周期(asp.net)
- 20. 活动生命周期问题
- 21. 页面生命周期问题
- 22. OSGi的DS组件的生命周期和参考
- 23. Silverlight控件生命周期
- 24. MXML组件生命周期
- 25. 微件生命周期?
- 26. WCF生命周期事件
- 27. WinForms事件生命周期
- 28. OSGI捆绑软件依赖问题
- 29. 问题与takari生命周期maven插件下载maven版本
- 30. servlet生命周期
非常感谢你们俩!这在我的书中没有得到很好的解释,但现在我明白了:-) – July