《深入理解OSGi:Equinox原理、应用与最佳实践》一3.5 系统Bundle

简介: 本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.5节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.5 系统Bundle

OSGi框架本身也会以一个Bundle的形式向其他Bundle提供资源、Package和服务,比如已经在书中多次出现的Bundle、BundleContext、FrameworkListener等接口,以及后面将会介绍的EventAdmin、PackageAdmin等服务都是由系统Bundle提供的。OSGi规范规定了系统Bundle的Bundle ID固定为0,Bundle的getLocation()方法返回固定字符串“System Bundle”,这些特征使得任何Bundle都可以很方便地从BundleContex.getBundle(0)或BundleContex.getBundle("System Bundle")方法中获取到系统Bundle的对象实例。
在OSGi容器中,系统Bundle可以认为是一定存在的,每一个Bundle都默认依赖这个系统Bundle。下面列出了Equinox框架的系统Bundle的元数据信息。

osgi> headers 0
Bundle headers:
 Bundle-Activator = org.eclipse.osgi.framework.internal.core.SystemBundleActivator
 Bundle-Copyright = Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the accompanying materials  are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
 Bundle-Description = OSGi System Bundle
 Bundle-DocUrl = http://www.eclipse.org
 Bundle-Localization = systembundle
 Bundle-ManifestVersion = 2
 Bundle-Name = OSGi System Bundle
 Bundle-RequiredExecutionEnvironment = J2SE-1.5,OSGi/Minimum-1.2
 Bundle-SymbolicName = org.eclipse.osgi; singleton:=true
 Bundle-Vendor = Eclipse.org - Equinox
 Bundle-Version = 3.8.0.qualifier
 Eclipse-BundleShape = jar
 Eclipse-ExtensibleAPI = true
 Eclipse-SystemBundle = true
 Export-Package = org.eclipse.osgi.event;version="1.0",
……//版面关系省略其他Package
 Export-Service = org.osgi.service.packageadmin.PackageAdmin,org.osgi.service.permissionadmin.PermissionAdmin,org.osgi.service.startlevel.StartLevel,org.eclipse.osgi.service.debug.DebugOptions
 Main-Class = org.eclipse.core.runtime.adaptor.EclipseStarter
 Manifest-Version = 1.0

系统Bundle与OSGi框架密不可分,由于它的特殊性,其生命周期变化过程也与普通Bundle有所区别。以下是OSGi规范对系统Bundle生命周期几个过程执行的动作规定。
启动过程:Bundle的start()方法为空操作,因为OSGi框架一启动,系统Bundle就已经启动。
停止过程:Bundle的stop()方法会立即返回并在另外一条线程中关闭OSGi框架。
更新过程:Bundle的update()方法会立即返回并在另外一条线程中重启OSGi框架。
卸载过程:系统Bundle无法卸载,如果执行了Bundle的uninstall()方法,那么框架会抛出一个BundleException异常。
系统Bundle的启动级别固定为0,这个启动级别是无法使用StartLevel接口中的set-BundleStartLevel()进行修改的;如果这样做了,那么OSGi框架将会抛出一个Illegal-ArgumentException异常。

相关文章
|
Java 程序员 数据中心
《深入理解OSGi:Equinox原理、应用与最佳实践》一第1章 Java模块化之路
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第1章,第1.1节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1466 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一2.2 Bundle
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第2章,第2.2节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1427 0
|
容器
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.6 Bundle上下文
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.6节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1205 0
|
容器
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.1 Bundle标识
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.1节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1163 0
|
Java Spring 容器
《深入理解OSGi:Equinox原理、应用与最佳实践》一2.4 Bundle的组织与依赖
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第2章,第2.4节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1432 0
|
Java 应用服务中间件
《深入理解OSGi:Equinox原理、应用与最佳实践》一导读
笔者自2007年接触OSGi以来,曾在数个大型系统中使用过OSGi作为软件的基础架构,这一方面使笔者深刻感受到了OSGi带来的诸多好处以及OSGi设计思想的魅力;另一方面也使笔者注意到OSGi的入门门槛相对较高,如果没有足够的指导材料,开发人员从零开始学习并探索出OSGi的最佳实践需要很高的成本。
1480 0
|
Java API
《深入理解OSGi:Equinox原理、应用与最佳实践》一2.8 本章小结
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第2章,第2.8节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1151 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.7 本章小结
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.7节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1295 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一1.3 本章小结
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第1章,第1.3节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1227 0