2011-07-16 45 views
5

我尝试学习osgi是如何工作的。我写了我的第一个hello-world包,它在bundle激活器类的start-method被执行时给出了一些控制台输出。现在,我已阅读了懒惰的启动机制,并将此标志放到了我的捆绑软件清单中。然后,我启动了Equinox控制台,安装了我的包并启动了它。但现在我已经期望我的包被标记为“开始”。但它已经将其称为启动方法并被标记为活动。 我是否了解懒惰启动机制的任何错误?osgi软件包生命周期问题

回答

8

如果您有其他捆绑包依赖于捆绑软件包中的捆绑包和类,则使用懒惰开始标志。

说你有两束A和B,其中

  • 一个出口C类
  • B依赖于一个
  • B包含一类d指向Ç

什么捆绑B被激活时发生?

没有 lazy-load标志,首先加载并激活A bundle。

随着的延迟加载标志,则一束未加载或激活,直到类d需要引用类C.

,可以使在所述的活动模式非常大的差异,如捆绑的加载和激活被推迟发生,尽可能延迟加载标志,所以来自捆绑的初始响应非常快...

相反,这个标志也使它成为一个更多的洞很难推断B中方法的执行时间,因为这可以在任何时候随着加载和激活bundle而被截获......

+0

非常感谢你们俩!这在我的书中没有得到很好的解释,但现在我明白了:-) – July

3

您说过,安装后您已经开始安装捆绑软件 - 如果您手动启动捆绑软件包,则无论采用惰性激活策略,它都会被激活。

根据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

您应该提供规范的来源。规范可能会随着时间而改变,未来的读者(像我)不知道你从哪个版本获得该报价。 –

+1

感谢您的评论;我已经添加了对规范的引用。 –