快速业务通道

Eclipse插件Lazy Start实现原理分析 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
Class方法:如果类型所在插件还没启动,启动它;如果正在启动, 则设置5000ms的超时,限时不能完成启动,则报错返回!

(附加说明:头一段时间在另外一篇随笔中,写了一些编写插件启动类应该注意的点,其中有一条就 是避免在插件启动方法中干耗时的事情。这里真正告诉我们了原因:如果超过5000ms不能完成启动--注 意这其中还不包含所依赖插件的启动时间,那么肯定会出现类加载超时的错误了:

While loading class "{1}", thread "{0}" timed out waiting ({4}ms) for thread "{2}" to finish starting bundle "{3}". To avoid deadlock, thread "{0}" is proceeding but "{1}" may not be fully initialized.

【EclipseLazyStarter是如何完成注册过程的?】

Eclipse插件Lazy Start实现原理分析 - 编程入门网

过程简要解释如下:

1、启动osgi framework,两种启动方式:如果想利用Eclipse的一些特性,则就以EclipseStarter为 入口点启动;否则,可以用命令行的方式,以Laucher.main为入口点启动

2、初始化FrameworkAdaptor(对应eclipse实现是BaseAdaptor)看一下接口说明:

/** * FrameworkAdaptor interface to the osgi framework. This class is used to provide * platform specific support for the osgi framework. * * <p>The OSGi framework will call this class to perform platform specific functions. * * Classes that implement FrameworkAdaptor MUST provide a constructor that takes as a * parameter an array of Strings. This array will contain arguments to be * handled by the FrameworkAdaptor. The FrameworkAdaptor implementation may define the format * and content of its arguments. * * The constructor should parse the arguments passed to it and remember them. * The initialize method should perform the actual processing of the adaptor * arguments. * <p> * Clients may implement this interface. * </p> * @since 3.1 */

Eclipse插件Lazy Start实现原理分析(4)

时间:2011-08-13 朱兴

显而易见,FrameworkAdaptor其实是osgi framework的****,提供平台附加支持。

看一下BaseAdaptor的构造函数:

1 /** 2   * Constructs a BaseAdaptor. 3   * @param args arguments passed to the adaptor by the framework. 4   */ 5   public BaseAdaptor(String[] args) { 6     if (LocationManager.getConfigurationLocation() == null) 7       LocationManager.initializeLocations(); 8     hookRegistry = new HookRegistry(this); 9     FrameworkLogEntry[] errors = hookRegistry.initialize(); 10     if (errors.length > 0) 11       for (int i = 0; i < errors.length; i++) 12         getFrameworkLog().log(errors[i]); 13     // get the storage after the registry has been initialized 14     storage = getStorage(); 15     // TODO consider passing args to BaseAdaptorHooks 16   } 

我们看到,调用了HookRegistry.initialize进行初始化

3、初始化HookRegistry,我们直接看一下HookRegistry.initialize方法实现

1 /** 2   * Initializes the hook configurators. The following steps are used to initialize the hook configurators. <p> 3   * 1. Get a list of hook configurators from all hook configurators properties files on the classpath, 4   *  add this list to the overall list of hook

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号