【问题标题】:Will eclipse/osgi activators always be called at least once before code is accessed?在访问代码之前,eclipse/osgi 激活器是否总是至少被调用一次?
【发布时间】:2009-08-10 07:59:16
【问题描述】:
在 Eclipse (3.3) 中,我有一个插件 User,具体取决于插件 Provider。 Provider 有一个激活器。在提供者的插件编辑器上,它有一个复选框“加载其中一个类时激活此插件”。选中/取消选中此项将更改 Manifest 设置:Eclipse-LazyStart 为 true/false。
我的问题是,对我来说,该复选框意味着如果未选中,则激活器可能不会运行,而该设置意味着激活器将始终运行,无论您是否希望它与 eclipse 一起加载。
- 如果你有激活器
在 a 之前总是至少运行一次
下游插件调用代码,不管这个复选框?
- 此复选框是否仅适用于
立即启动还是延迟启动?
【问题讨论】:
标签:
eclipse
eclipse-plugin
osgi
【解决方案1】:
Eclipse-LazyStart: true -> 表示插件将在该插件中的类加载时自动启动。
Eclipse-LazyStart: false -> 表示插件/bundle 在该插件中的类加载时不会启动。它将需要您发出明确的Bundle#start() 调用,而不是从 Equinox OSGI 框架自动启动。
是的,这本支票簿仅适用于该设置。
注意:对于OSGI4.1,也可以设置新的Bundle-ActivationPolicy setting。
来自OSGI design:
延迟激活
延迟激活是一种生命周期策略,它要求必须在第一次成功请求从该捆绑包加载类时激活捆绑包。
有时这被称为自动启动,因为捆绑包会在第一次加载时自动激活。
这种设计将始终使用术语惰性而不是自动,因为自动启动可能意味着每次启动框架时始终自动启动包。
这里的选择是“延迟启动 vs 不启动”,而不是“延迟启动 vs 急切启动”。
因此,即使使用 Activator,您的插件提供程序也不会启动,直到它的一个类被加载 (lazy-start true) 并显式调用(如果 lazy start false)