Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Osgi Eclipse插件的延迟激活_Osgi_Eclipse Rcp - Fatal编程技术网

Osgi Eclipse插件的延迟激活

Osgi Eclipse插件的延迟激活,osgi,eclipse-rcp,Osgi,Eclipse Rcp,我想知道Eclipse清单编辑器中的“加载某个类时激活此插件”复选框对您有用 我认为Eclipse总是使用“延迟初始化”方法。该选项是否与插件的BundleActivator类相关?初始化和激活有什么不同吗 是一个类似的问题,但我不完全理解。勾选该框会导致在清单中设置以下标题: Bundle-ActivationPolicy: lazy 我将从“纯”OSGi如何处理这个问题开始。如果捆绑包是使用START_ACTIVATION_策略标志启动的,那么捆绑包将进入STARTING状态,但不会调用a

我想知道Eclipse清单编辑器中的“加载某个类时激活此插件”复选框对您有用

我认为Eclipse总是使用“延迟初始化”方法。该选项是否与插件的BundleActivator类相关?初始化和激活有什么不同吗


是一个类似的问题,但我不完全理解。

勾选该框会导致在清单中设置以下标题:

Bundle-ActivationPolicy: lazy
我将从“纯”OSGi如何处理这个问题开始。如果捆绑包是使用START_ACTIVATION_策略标志启动的,那么捆绑包将进入
STARTING
状态,但不会调用activator的START()方法,也不会为捆绑包分配类加载器。包一直处于启动状态,直到出于任何原因需要从包中加载类为止。此时,将分配一个类加载器,并实例化激活器(如果有),并在加载请求的类之前调用其start()方法

但是,Eclipse在顶部添加了额外的语义。作为后台,Eclipse总是试图避免启动捆绑包,以使其启动时间保持最少。默认情况下会启动一组非常小的核心包(列表位于configuration/config.ini中),其中一个包称为p2“simpleconfigurator”。simpleconfigurator查找具有
Bundle ActivationPolicy:lazy
头的Bundle,并使用START\u ACTIVATION\u策略标志启动它们。。。因此,这些捆绑包将按上述方式“延迟”启动

重要的一点是,在Eclipse下,所有不包含头的其他捆绑包都不会启动。它们将保持解析状态,不会调用它们的激活器,如果它们包含任何声明性服务组件,则不会加载它们。这是因为声明性服务只查看处于活动或启动状态的捆绑包

因此,如果我们想要编写一个包含需要在Eclipse下工作的声明性服务组件的包,那么使用头的主要原因是。


在其他环境中,不需要使用标头。大多数普通的OSGi应用程序只是启动所有捆绑包,而不是有选择地启动捆绑包的子集。请注意,这并不意味着OSGi应用程序不用担心延迟加载!声明性服务已经支持延迟加载,而不会与bundle类加载触发器混淆。在我看来,Eclipse弄错了这一点,给包的生命周期增加了不必要的复杂性。尽管如此,如果您在Eclipse中运行,那么您别无选择,只能理解并处理它的局限性。

回答得不错。我仍然有几个问题。1) 当我在产品配置中将插件设置为autoStart:true时,它将被启动,而与Bundle ActivationPolicy头无关?2) 开始到底意味着什么?你说“他们根本不会启动”。插件未启动时如何工作?1)是的。2) Started表示调用捆绑包的激活器,并实例化/管理DS组件。未启动的捆绑包(即已解决的捆绑包)仍然可以提供依赖项,例如导出可由其他捆绑包加载的包。这对被动库之类的东西很有用。顺便说一句,你所说的DS。它们都是那些扩展点,比如菜单贡献、工作台部件贡献等等?因为当我创建一个插件,为透视图提供一个视图,而不将其设置为Bundle ActivationPolicy:lazy时,视图仍然可见!?不,DS是用于OSGi服务的,您谈论的是Eclipse扩展,它们在plugin.xml中声明。它们不要求捆绑包处于活动状态,只需要解决(顺便说一句,Eclipse的另一个错误选择…)。