`

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

    博客分类:
  • OSGI
阅读更多

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的事件。

 

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

分享到:
评论

相关推荐

    探索 OSGi 框架的组件运行机制

    探索 OSGi 框架的组件运行机制探索 OSGi 框架的组件运行机制

    OSGi and Equinox

    OSGi and Equinox, Creating Highly Modular Java Systems

    OSGi and Apache Felix 3.0 Beginner's Guide

    Build your very own OSGi applications using the flexible and powerful Felix Framework

    osgi介绍osgi介绍

    osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍

    OSGi and Apache Felix 3.0 Beginner's Guide 代码和书

    OSGi and Apache Felix 3.0 Beginner's Guide 英文版和代码

    OSGi and Equinox:Creating Highly Modular Java Systems

    阅读本书,首先你很快就会使用Eclipse bundle工具创建第一个基于OSGi的系统,进而转向复杂的产品开发。接下来,你将掌握一些用于创建具有特殊模块化、高效性和可维护性系统的最佳实践和技巧。你将了解所有的OSGi声明...

    OSGi Starter

    Learn what can be done with OSGi and what it can bring to your development structure. Build your first application and deploy to an OSGi runtime that simplifies your experience. Discover an ...

    OSGi and Apache Felix 3.0.pdf

    Build a completely operational real-life application composed of multiple bundles and a web front end using Felix. Get yourself acquainted with the OSGi concepts, in an easy-to-follow progressive ...

    osgi Equinox bridge and spring dm最新jar包

    osgi bridge and spring dm最新jar包

    OSGI框架实战

    6.4. 开发、发布和使用Service...........29 6.5. 测试和调试...33 6.6. 发布基于OSGI的系统.....34 6.7. Equinox基于OSGI的扩展...........37 6.8. 现有类型系统基于OSGI的开发..38 6.8.1. B/S.....38 6.8.2. C/S.....

    osgi,林昊写的osgi实战和进阶

    osgi,林昊写的osgi实战和进阶,学习osgi的好东西,入门的首选。

    Java Application Architecture Modularity Patterns with Examples Using OSGi Part2

    Java应用架构设计:模块化模式与OSGi 英文版 中文版介绍: 全球资深Java技术专家的力作,系统、全面地讲解如何将模块化设计思想引入开发中,涵盖18个有助于实现模块化软件架构的模式 中文目录: 第一部分 模块化...

    maven-and-osgi

    Maven is a new project management and comprehension tool which provides an elegant way to share build logic across projects. In terms of capabilities, Maven is an improvement to Apache Ant-thanks to ...

    《OSGi and Apache Felix 3.0 Beginner's Guide》源代码

    《OSGi and Apache Felix 3.0 Beginner's Guide》此书中例子的源代码,已使用过,是可以跑的

    OSGI入门和整合Spring

    OSGI入门和整合Spring OSGI入门和整合Spring

    OSGi.NET框架 Documentation

    本文档主要针对OSGi.NET模块化框架使用进行了描述 OSGi.NET框架是一个参照了OSGi规范的模块化管理框架。框架为应用程序(组件(bundle))提供了一个标准环境。整个框架可以划分为一些层次: 1.运行环境 2.模块...

    《OSGi实战》完整中文版

    《 OSGi实战》是学习OSGi的全面指导,利用与架构和开发人员相关的示例清楚地讲解OSGi概念,同时探讨了很多实践场景和技术,阐述了开发人员有多需要OSGi,怎么将OSGi嵌入其他容器中,将遗留系统移入OSGi的最佳实践,...

    OSGI原理与最佳实践

    资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...

Global site tag (gtag.js) - Google Analytics