`

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 and Apache Felix 3.0 Beginner's Guide

    通过使用StartLevels,可以详细控制OSGi环境中束的激活顺序,这对于复杂系统的启动和关闭非常有帮助。 Apache Felix不仅仅是OSGi的一个实现,它还包含了一些子项目。这些子项目是Apache Felix项目下的一些附加工具...

    OSGi and Equinox

    标题“OSGi and Equinox”和描述“OSGi and Equinox, Creating Highly Modular Java Systems”表明本文旨在介绍OSGi框架以及它在Eclipse环境下的具体实现Equinox。OSGi是一个Java模块化平台,它允许多个独立的模块...

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

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

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

    2. **Apache Felix框架**:学习Apache Felix的安装、配置和使用,包括如何启动和停止OSGi容器,以及如何通过命令行接口或图形用户界面管理bundle。 3. **Bundle生命周期**:理解bundle的安装、启动、更新和卸载过程...

    osgi Equinox bridge and spring dm最新jar包

    这些bundles可以独立更新、启动和停止,无需重启整个系统。这种模块化设计提高了系统的可维护性和可扩展性。Equinox作为OSGi的实现,提供了运行时环境和管理工具,帮助开发者管理这些bundles。 Spring DM(现在被...

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

    《OSGi and Apache Felix 3.0 Beginner's Guide》是一本专为初学者设计的书籍,深入浅出地介绍了OSGi(Open Service Gateway Initiative)框架和Apache Felix这一实现OSGi规范的开源项目。源代码包包含了书中各个...

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

    4. **生命周期管理**:OSGI框架提供了组件的生命周期管理,包括启动、停止、更新和卸载。学习这部分可以帮助开发者理解如何动态地更新和维护应用。 5. **依赖注入**:书中可能涵盖OSGI中的依赖注入机制,这是实现松...

    OSGi Concepts and Architecture

    3. **生命周期管理**:OSGi提供了一套完整的生命周期管理机制,包括启动、停止、安装、更新和卸载bundle。这使得开发者可以在运行时动态地管理应用的组件,无需重启整个系统。 4. **版本控制**:OSGi支持多版本共存...

    spring-osgi 入门手册和代码

    Spring OSGi 是一个将 Spring 框架与 OSGi(Open Service Gateway Initiative)容器相结合的开源项目,旨在提供一种在 OSGi 环境下使用 Spring 的方式。OSGi 是一种模块化系统,它允许开发人员创建可热部署、可升级...

    OSGI的消息机制及注册服务

    在OSGI环境中,消息机制是实现bundle之间通信的关键部分,而服务注册是OSGI中实现模块间服务发现和交互的核心功能。下面将详细探讨这两个知识点。 首先,我们来了解一下OSGI的消息机制。在OSGI框架中,bundle之间的...

    OSGI入门和例子

    OSGI的核心是其模块系统,称为"bundle",每个bundle都是一个独立的代码单元,有自己的类加载器,可以独立地加载、启动、停止和更新。这个框架的出现极大地改善了Java应用的复杂性管理和版本依赖问题。 标题"OSGI...

    OSGI入门和整合Spring

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和动态的Java应用程序。它提供了模块化的类加载...通过理解OSGI的模块化机制和Spring的依赖注入原理,可以构建出更加高效和可扩展的Java应用。

    OSGI 实例eclipse插件开发

    4. `org.springframework.osgi.extender`:这是Spring OSGI扩展器,它允许在OSGI环境中启动和管理Spring应用上下文。它监控bundle的生命周期,并在适当的时候初始化和销毁Spring应用上下文。 5. `osgi_serviceImpl`...

    osgi介绍osgi介绍

    在OSGi中,应用程序被分解为称为“bundle”的独立单元,这些bundle可以相互依赖并独立地加载、启动、更新和卸载,而无需重启整个系统。OSGi的核心理念是促进组件化开发,提高软件的可维护性、可扩展性和可重用性。 ...

    OSGi入门教程(OSGi Introduce)

    1. **宝马汽车的应用控制系统**:利用OSGi的模块化特性,实现复杂系统的快速启动和高效运行。 2. **Eclipse集成开发环境**:Eclipse从3.0版本开始采用OSGi框架(Equinox),提升了性能、可扩展性,并简化了二次开发...

    osgi服务发布和获取方式

    OSGi 服务发布和获取方式是 OSGi 框架中的一种核心机制,用于发布和获取服务。下面将详细介绍 OSGi 服务发布和获取的多种方式。 1. 最原始方式 最原始方式是 OSGi 服务发布和获取的基本方式。这种方式的优点是逻辑...

Global site tag (gtag.js) - Google Analytics