- 浏览: 1146833 次
- 性别:
- 来自: 火星郊区
博客专栏
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
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的事件。
这些的应用很多哦,典型的就是系统启动前的闪屏,你可以将它的启动级别设置到“最低”!
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的事件。
这些的应用很多哦,典型的就是系统启动前的闪屏,你可以将它的启动级别设置到“最低”!
发表评论
-
关于Felix Log Service
2012-12-07 16:44 1565OSGi服务纲要规范中定义了服务于OSGi平台的通用日志服 ... -
Maven 3 Felix 4 Eclipse 的搭建与部署(部分转载自别人文章)
2012-10-18 10:24 20274.1.开发环境搭建 4.2开发工具 Maven 3 F ... -
【绝对路径】OSGi环境中获取Plugin/Bundle中文件资源的绝对路径
2012-10-08 10:53 2483摘要:在进行Eclipse RCP开发的过程中,需要使用一 ... -
OpenCore:基于OSGi开发纯插件体系结构的WEB应用程序
2012-09-21 17:46 1419随着OSGi/Equinox逐渐成为Java EE服务端的基础 ... -
OSGi技术在Java Web开发中的应用
2012-09-20 11:26 1407随着 Java SE 对模块化功能原生支持的一再推迟(据最 ... -
OSGI典型的应用案例
2012-09-20 11:26 1630OSGI典型的应用案例主要有两个:分别是Eclipse和BMW ... -
OSGi特点
2012-09-20 11:26 12461、JRE版本无关性。虽然Java一直被人们认为是“Write ... -
OSGI与JMX 的关系
2012-09-19 17:09 1055不过重点是: JMX 本来设计的用途就只为了管理,我们不 ... -
在equinox环境开发web应用的"利器" -- registerResources()方法 详解
2012-09-19 17:07 1226registerResources()方法详解 1、简介 ... -
在equinox环境开发web应用的"利器" -- 序
2012-09-19 17:05 1358在equinox环境中开发web应用必须要借助一些工具包提供的 ... -
equinox环境下web应用资源的部署
2012-09-19 17:04 1304osgi的equinox实现环境下,web服务器和web应用都 ... -
OSGi产生的背景--在繁荣的混乱之中走出困惑
2012-09-19 16:58 1163软件的复杂性正在以惊 ... -
将web容器置于OSGi框架下进行web应用的开发
2012-09-16 14:26 3534将web容器置于OSGi框架下,其实就是将web容器做成OSG ... -
在Eclipse中开发OSGi Bundle
2012-09-16 14:26 1328Eclipse为开发OSGI Bundle提供了良好的支持,它 ... -
【第一代服务注册形式】 - 将一个Bundle注册为服务
2012-09-14 10:09 11531、创建业务接口类及其实现类 Java代码 ... -
Declarative Services规范简介及应用
2012-09-14 10:08 1419Declarative Services 是一 ... -
用FileInstall管理Bundle的动态安装、启动、卸载
2012-09-14 10:07 13281、文件目录如下: F:\study_osgi ... -
服务工厂 - Bundle消费者返回不同的服务对象
2012-09-14 10:03 1206一般情况下,服务对象在注册后,任何其它的Bundle在请求 ... -
服务跟踪(ServiceTracker)
2012-09-14 09:58 1155当多个Bundle使用同一 ... -
OSGi容器中Bundle之间Synchronous Communication
2012-09-11 17:07 1556OSGi Core定义了一个服务层,提供了一个Bundl ...
相关推荐
通过使用StartLevels,可以详细控制OSGi环境中束的激活顺序,这对于复杂系统的启动和关闭非常有帮助。 Apache Felix不仅仅是OSGi的一个实现,它还包含了一些子项目。这些子项目是Apache Felix项目下的一些附加工具...
标题“OSGi and Equinox”和描述“OSGi and Equinox, Creating Highly Modular Java Systems”表明本文旨在介绍OSGi框架以及它在Eclipse环境下的具体实现Equinox。OSGi是一个Java模块化平台,它允许多个独立的模块...
探索 OSGi 框架的组件运行机制探索 OSGi 框架的组件运行机制
2. **Apache Felix框架**:学习Apache Felix的安装、配置和使用,包括如何启动和停止OSGi容器,以及如何通过命令行接口或图形用户界面管理bundle。 3. **Bundle生命周期**:理解bundle的安装、启动、更新和卸载过程...
这些bundles可以独立更新、启动和停止,无需重启整个系统。这种模块化设计提高了系统的可维护性和可扩展性。Equinox作为OSGi的实现,提供了运行时环境和管理工具,帮助开发者管理这些bundles。 Spring DM(现在被...
《OSGi and Apache Felix 3.0 Beginner's Guide》是一本专为初学者设计的书籍,深入浅出地介绍了OSGi(Open Service Gateway Initiative)框架和Apache Felix这一实现OSGi规范的开源项目。源代码包包含了书中各个...
4. **生命周期管理**:OSGI框架提供了组件的生命周期管理,包括启动、停止、更新和卸载。学习这部分可以帮助开发者理解如何动态地更新和维护应用。 5. **依赖注入**:书中可能涵盖OSGI中的依赖注入机制,这是实现松...
3. **生命周期管理**:OSGi提供了一套完整的生命周期管理机制,包括启动、停止、安装、更新和卸载bundle。这使得开发者可以在运行时动态地管理应用的组件,无需重启整个系统。 4. **版本控制**:OSGi支持多版本共存...
Spring OSGi 是一个将 Spring 框架与 OSGi(Open Service Gateway Initiative)容器相结合的开源项目,旨在提供一种在 OSGi 环境下使用 Spring 的方式。OSGi 是一种模块化系统,它允许开发人员创建可热部署、可升级...
在OSGI环境中,消息机制是实现bundle之间通信的关键部分,而服务注册是OSGI中实现模块间服务发现和交互的核心功能。下面将详细探讨这两个知识点。 首先,我们来了解一下OSGI的消息机制。在OSGI框架中,bundle之间的...
OSGI的核心是其模块系统,称为"bundle",每个bundle都是一个独立的代码单元,有自己的类加载器,可以独立地加载、启动、停止和更新。这个框架的出现极大地改善了Java应用的复杂性管理和版本依赖问题。 标题"OSGI...
OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和动态的Java应用程序。它提供了模块化的类加载...通过理解OSGI的模块化机制和Spring的依赖注入原理,可以构建出更加高效和可扩展的Java应用。
4. `org.springframework.osgi.extender`:这是Spring OSGI扩展器,它允许在OSGI环境中启动和管理Spring应用上下文。它监控bundle的生命周期,并在适当的时候初始化和销毁Spring应用上下文。 5. `osgi_serviceImpl`...
在OSGi中,应用程序被分解为称为“bundle”的独立单元,这些bundle可以相互依赖并独立地加载、启动、更新和卸载,而无需重启整个系统。OSGi的核心理念是促进组件化开发,提高软件的可维护性、可扩展性和可重用性。 ...
1. **宝马汽车的应用控制系统**:利用OSGi的模块化特性,实现复杂系统的快速启动和高效运行。 2. **Eclipse集成开发环境**:Eclipse从3.0版本开始采用OSGi框架(Equinox),提升了性能、可扩展性,并简化了二次开发...
OSGi 服务发布和获取方式是 OSGi 框架中的一种核心机制,用于发布和获取服务。下面将详细介绍 OSGi 服务发布和获取的多种方式。 1. 最原始方式 最原始方式是 OSGi 服务发布和获取的基本方式。这种方式的优点是逻辑...