zoukankan      html  css  js  c++  java
  • 转:OSGI StartLevel explained and using 启动级别机制和使用

    OSGI StartLevel explained and using 启动级别机制和使用

    bundle startlevel

    实际的应用环境中,我们的 bundle 互相有一定的依赖关系,所以在启动的顺序上要有所区别,好比盖楼,
    要从打地基开始。
    实际上,OSGi 框架最初的 start level 是 0,
    启动顺序如下:将启动级别加一,如果发现有匹配的 bundle
    (即 bundle 的启动级别和目前的启动级别相等),则启动这个 bundle;
    继续第一步,直到发现已经启动了所有的 bundle,且活动启动级别和最后的启动的 bundle 启动级别相同。


    停止顺序,也是首先将系统的 start level 设置为 0:
    由于系统当前活动启动级别大于请求的 start level,所以系统首先停止等于当前活动启动级别的 bundle;
    将活动启动级别减一,继续第一步,直到发现活动启动级别和请求级别相等,都是 0。

    1静态的设置系统和各Bundle的启动级别,在启动系统时,OSGI框架将按照各Bundle
    的启动级别从小到大的启动,如启动级别相同,则按照Bundle ID从小到大的启动,一直启动到系统的启
    动级别为止。


    configration
      config.ini
          reference\:file\:bundles/fdsf.jar@4:start                //@4:start用于分别设置
          osgi.startLevel=                                   
    //静态的设置基于OSGI的应用系统的启动级别(不是system bundles(sb) ,sb == 0 forever!),默认
    为6
          osgi.bundles.defaultStartLevel=                    
     //  静态的设置各个bundles的启动级别,默认为4


    要保证“应用系统”的启动级别大于所有需要bundles的启动级别才能使应用系统正常运行!


    总之记住:
    系统是按照从小到大的level启动的,如果是相等的level,根据id从小到大启动就ok了!

    2动态的设置start level
    动态的设置系统和各Bundle的启动级别
    动态的设置系统和各Bundle的启动级别可通过在运行时调用StartLevelService来实现。
    同样的,既然要使用StartLevelService,先打开MANIFEST.MF,在import packages中
     import org.osgi.service.startlevel,
    通过BundleContext获取StartLevelService:
     ServiceReference serviceRef=bc.getServiceReference(StartLevel.class.getName());
     StartLevel startLevelSrv=(StartLevel) bc.getService(serviceRef);
    StartLevel提供了管理系统和各Bundle启动级别的API:
    ??  getBundleStartLevel(Bundle bundle)
    获取Bundle的启动级别。
    ??  getInitialBundleStartLevel()
    获取默认的Bundle的启动级别。
    ??  getStartLevel()
    获取系统的启动级别。
    ??  setBundleStartLevel(Bundle bundle,int startLevel)
    设置Bundle的启动级别,如设置的启动级别高于系统的启动级别,那么OSGI框架将会停止此Bundle,如设
    置的启动级别低于系统的启动级别,如此时Bundle尚未启动,OSGI框架则会启动此Bundle,如已启动,
    OSGI框架不会做任何动作。
    ??  setInitialBundleStartLevel(int startLevel)
    设置Bundle的默认启动级别,对于新安装的Bundle将使用此默认启动级别。
    ??  setStartLevel(int startLevel)
    设置系统的启动级别。
    如设置的系统启动级别和目前系统的启动级别一致,则OSGI框架会发布 FrameworkEvent.STARTLEVEL_CHANGED的事件;


    如设置的系统启动级别比目前的系统启动级别低,那么OSGI框架将现有的启动级别按1递减,
    并停止相应启动级别的Bundle,直至设置的系统启动级别,当系统的启动级别和设置的启动
    级别一致时,OSGI框架会发布FrameworkEvent.STARTLEVEL_CHANGED的事件;
    如设置的系统启动级别比目前的系统启动级别高,那么OSGI框架将现有的启动级别按1递增,
    并启动相应启动级别的Bundle,直至设置的系统启动级别,当系统的启动级别和设置的启动
    级别一致时,OSGI框架会发布FrameworkEvent.STARTLEVEL_CHANGED的事件。

    这些的应用很多哦,典型的就是系统启动前的闪屏,你可以将它的启动级别设置到“最低”!

  • 相关阅读:
    Intelij根据数据库表生成实体类
    RabbitMQ(二):入门案例
    RabbitMQ(一):简介和基本概念
    Python 第十课,面向对象补足,异常处理
    Python 第九课,面向对象进阶
    Python 第七课,模块
    Python 第六课,装饰器,生成器,迭代器,其他
    Python 第五课,正则表达式
    Python 第四课,内置函数,I/O操作。
    Python 第三课,函数。
  • 原文地址:https://www.cnblogs.com/phoebus0501/p/1905956.html
Copyright © 2011-2022 走看看