Live a simple life

沉默(zhu_xing@live.cn)
随笔 - 48, 文章 - 0, 评论 - 132, 引用 - 0
数据加载中……

【原创】编写插件启动类代码时候的注意点!

        在Eclipse开发过程中,编写插件启动类(Activator)代码时候的注意点,简要列举如下。
        众所周知,org.eclipse.core.runtime.Plugin类中最核心的两个方法:start和stop,开发者通过覆写这两个方法,可以参与到osgi framework针对你贡献的Bundle的生命周期管理。注意点和简要理由列举如下:
       1、start方法中只干必须要干的事情。不是插件启动的必要条件的东西,一律不要防止到start逻辑中。根据
            个人经验,这种场景非常少,常用的功能是在AbstractUIPlugin启动的时候申请系统资源。
             【常犯的错误】
              最近发现一些人写start逻辑的时候,喜欢包含扩展加载的代码(自己定义了一个扩展点,在插件启动逻辑代码中预加载扩展)。完全不必要这么做,第一操作Eclipse扩展注册表本身是比较耗时的操作,而且如果加载的代码逻辑中包含了创建类实例的代码(IConfigurationElement.createExecutableExtension),很可能引起其他扩展插件的过早启动
    
      2、start方法中的自定义逻辑代码一定要确保安全。否则,可能一个简单的异常情况就使得你辛苦写的插件当掉了~_~,而且会间接引起对应扩展插件也启动不了

     3、如果start方法中干了活有一定耗时的嫌疑,简单的用时间戳测试一下大致的耗时
              【常见的错误】
              Eclipse底层在加载新类型的时候,会启动一个新的线程,而且该线程设置的超时限制。Eclipse加载你贡献的插件中的类型时,肯定要先启动你的插件。如果你的启动逻辑过于耗时,则有可能引起类加载超时的问题,最可恶的是,这种问题具有一定的偶然性

    4、建议保存Eclipse默认提供的Plugin Activator。发现有些人喜欢删除默认的启动类,他感觉他的插件不需要编写额外的启动逻辑代码。个人建议不要这么做,因为很多底层问题需要调试到插件启动的层面来判断,保留默认启动类,便于调试和跟踪插件的启动

    5、要假设stop方法只有在Eclipse实例退出的时候才被调用。关于这个问题的分析,最近两天有时间我会额外写一篇文章来分析一下(一般只有osgi framework在osgi应用退出的时候或者osgi console命令行管理中会调用这两者,自己一般不要去调用)。
         【常犯的错误】
          不少开发者假设自己写的插件真的会在不需要的时候被stop,这种想法过于天真。(首先如何判断不被需要对osgi的实现者来说就是很大的挑战,尤其是设计到有状态服务等的时候....这个问题很复杂,以后有机会和大家讨论)

    6、在starp和stop逻辑代码中,尽量不要去显式敢于Eclipse对插件生命周期的管理。这可能会引起很多莫名其妙的问题(请相信我,我曾经很多次用Bundle.start来启动我想启动的插件,结果出现见鬼的问题。以后和大家分享)。
        【常犯的错误】
          开发者显示调用Bundle的start和stop来控制一个目标插件,千万不要轻易这么干!!!如果想预启动,尽量使用Eclipse提供的startup扩展点,其在app laucher中会帮你预启动。


其他的问题,一时想不起来了。希望对插件开发的同行有帮助!


本博客中的所有文章、随笔除了标题中含有引用或者转载字样的,其他均为原创。转载请注明出处,谢谢!

posted on 2008-08-04 18:10 zhuxing 阅读(1572) 评论(0)  编辑  收藏 所属分类: Eclipse Plug-in & OSGI


只有注册用户登录后才能发表评论。


网站导航: