首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >osgi包生命周期问题

osgi包生命周期问题
EN

Stack Overflow用户
提问于 2011-07-16 14:57:05
回答 2查看 2K关注 0票数 5

我试图了解osgi是如何工作的。我已经编写了我的第一个hello-world包,当执行包激活器类的start-method时,它会给出一些控制台输出。现在,我已经了解了延迟启动机制,并将此标志添加到我的包清单中。然后,我启动了equinox控制台,安装了我的包并启动了它。但现在我希望我的捆绑包被标记为“开始”。但是它已经调用了它的start方法,并被标记为活动的。我理解懒惰启动机制有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-16 16:44:38

当您有其他依赖于您的包和包中的类的包时,可以使用lazy-start标志。

假设您有两个包A和B,其中

  • A导出类C
  • B依赖于A
  • B包含引用C

的类D

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

如果没有lazy-load标志,则首先加载并激活A包。

使用lazy-load标志,直到类D需要引用类C时,才加载或激活A包。

这可能会在激活配置文件中产生非常大的差异,因为使用lazy-load标志将bundle的加载和激活推迟到尽可能晚的时间,因此来自bundle的初始响应非常快……

相反,这个标志也使得B中方法的执行时间更难推断,因为这可以在任何时候通过加载和激活包来截获……

票数 8
EN

Stack Overflow用户

发布于 2011-07-16 16:44:09

您说过,您已经在安装后启动了捆绑包-如果您手动启动捆绑包,则无论延迟激活策略如何,它都会被激活。

根据the OSGi specification的说法,对于激活,以下情况是正确的:

捆绑激活策略指出,捆绑包一旦启动,就不能被激活,直到从它加载了一个类;无论是在正常的类加载过程中,还是通过

loadClass方法。资源加载不会触发激活。这种对默认紧急激活策略的更改反映在捆绑包及其事件的状态中。当使用惰性激活策略启动捆绑包时,必须执行以下步骤:

  • 为该捆绑包创建了捆绑包上下文。
  • 将捆绑包状态转移到正在启动状态。
  • 将激发LAZY_ACTIVATION事件。
  • 系统将等待从捆绑包加载类。启动正常启动事件将被激发。<

>H213

  • 捆绑包状态将变为活动。
  • 将激发STARTED事件。

如果由于Bundle Activator start方法抛出异常而导致激活失败,则必须在不调用bundle Activator stop方法的情况下停止捆绑包。这些步骤如图4.29中的流程图所示。此流程图还显示了正常紧急激活和懒惰激活的激活策略的差异。

更新:因为我不能说我在写答案的时候打开了哪个版本的规范(然而,我相信它是4.2或4.3),我已经检查了当前的v5.0规范,4.4.6.2节包含了实际的、语义等价的地方。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6715909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档