OSGi R4服务平台核心规范 :第一章 简介

OSGi服务平台标准的核心是提供一个通用、安全并且可管理的Java框架,该框架支持可扩展部署和下载的应用程序(称之为bundle)。 OSGi设备可以下载和安装bundle,并且可以在不需要的时候将其移除,在一个OSGi环境中,bundle的安装、更新由框架统一动态管理,为此,需要框架对服务和bundle之间的依赖细节进行管理。


OSGi R4服务平台核心规范 :第四章 生命周期层(1)

生命周期层提供了bundle的生命周期管理和安全控制的API。本层是建立在在模型和安全层之上的。 生命周期层还具有完整性、深入性、安全、可管理性等特点,提供了包括bundle安装、启动、停止、更新、卸载和管理的所有状态的API。


OSGi R4服务平台核心规范 :第四章 生命周期层(2)

本周介绍了系统bundle、事件以及安全。 与普通bundle相比,框架本身也是一个bundle。这些bundle称之为系统bundle。通过系统bundle,框架可以注册供其他bundle使用的服务。例如包管理和权限管理服务。


OSGi R4服务平台核心规范 :第二章 安全层

OSGi安全层是OSGi服务框架的一个可选的层。它基于Java 2 安全体系结构,提供了对精密控制环境下的应用部署和管理的基础架构。 要点:精密控制(fine grained)—在OSGi框架下的应用控制必须达到精细粒度的控制;可管理性—安全层本身没有定义API来控制应用,对安全层的管理交由生命周期层;可选性—安全层是可选的。


OSGi R4服务平台核心规范 :第三章 模块层(1)

Java平台只提供了对打包、部署和对Java应用和组件检验的最小支持。因此,很多基于java的项目,如JBoss、NetBeans,常常借助于专用的类加载器来创建用户模块层,以实现打包、部署和对Java应用和组件检验。OSGi框架提供了对java模型化的一般和标准的解决方案。


OSGi R4服务平台核心规范 :第三章 模块层(2)

框架中安装的bundle只有在解析之后才能关联到类加载器。bundle解析之后,框架必需为每一个非fragment的bundle创建一个类加载器。框架也可以延迟创建类加载器,直到它实际需要才创建。每个bundle对应一个类加载器的机制使得bundle中的所有资源对于bundle中位于同一个包的其他资源具有包级别的访问权限。


OSGi R4服务平台核心规范 :第六章 Framework API(3)

BundleActivator是一个当bundle启动或者停止时实现的接口。如果需要,框架可以创建bundle的BundleActivator。如果BundleActivator的实例的start方法成功执行,那么就可以保证同一个实例的stop方法将在停止bundle的时候进行调用。


OSGi R4服务平台核心规范 :第六章 Framework API(1)

框架可以通过BundleContext.addServiceListener方法来注册一个AllServiceListener对象。当注册、修改或者正在处理取消注册一个服务,就会通过一个ServiceEvent对象来调用AllServiceListener对象。发送给AllServiceListener对象的ServiceEvent对象是已经过滤了的,使用的过滤器是在注册监听器时指定的过滤器。


OSGi R4服务平台核心规范 :第六章 Framework API(2)

返回bundle区域的标识符。 bundle区域标识符是当安装bundle时,发送给BundleContext.installBundle的区域。只要当bundle还是安装好的,那么bundle的区域标识符就不会改变,即使对bundle进行更新。 如果bundle的状态是UNINSTALLED,那么本方法必须还要能返回bundle的区域标识符。


OSGi R4服务平台核心规范 :第五章 服务层(1)

OSGi服务层定义了一个和生命周期层紧密结合的动态协作模型。服务模型包括发布、查找和绑定模型。一个服务(service)就是一个通过服务登记来注册到一个或者多个Java接口下的Java对象。bundle可以注册服务,查找服务,接收注册服务的状态改变信息。


OSGi R4服务平台核心规范 :第五章 服务层(2)

框架提供了一个Filter接口,并且在方法getServiceReferences中使用过滤器语法(在过滤器语法一节中定义)。通过调用BundleContext的方法createFilter(String)或者是FrameworkUtil的方法createFilter(String)来创建一个Filter对象,


OSGi R4服务平台核心规范 :第六章 Framework API(4)

框架描述的bundle生命周期改变的事件。当在bundle的生命周期内发生了改变,那么发出一个BundleEvent对象。为了将来扩展,定义了类型代码来标识这种事件类型。OSGi联盟保留对事件类型的扩充权力。


OSGi R4服务平台核心规范 :第六章 Framework API(5)

用于指出发生了bundle生命周期问题的框架异常。 由框架来创建BundleException对象,用于标识在bundle生命周期中的异常状况。BundleExceptions不应该由bundle开发人员来创建。 为了和一般的异常链机制一致,可以对异常进行更新。


OSGi R4服务平台核心规范 :第六章 Framework API(6)

框架环境属性(org.osgi.supports.framework.fragment),表示框架是否支持片断bundle。如果这个值为true,那么框架支持片断bundle。缺省值为false。</br>可以通过调用BundleContext.getProperty获得这个属性值。


OSGi R4服务平台核心规范 :第七章 包管理服务规范(1)

bundle可以将包提供给其他bundle。这种导出建立了导出包的bundle和使用导出包的bundle之间的依赖关系。当对导出包的bundle进行卸载或者更新,那么需要对它共享的包进行决策处理。 Package Admin服务给管理代理提供了这种决策的接口。


OSGi R4服务平台核心规范 :第七章 包管理服务规范(2)

这个接口是一个框架服务,允许bunlde的开发人员审查框架中bundle的连接状态,同时提供了bundle之间的类加载网络的相关功能。 目前,只能允许有一个PackageAdmin的实例对象注册到框架。


OSGi R4服务平台核心规范 :第六章 Framework API(7)

框架使用BundleContext.addServiceListener方法来注册一个ServiceListener对象。当注册、修改或者是处理取消注册服务时,传入一个ServiceEvent 对象调用ServiceListener对象。


OSGi R4服务平台核心规范 :第八章 启动平台服务规范

本章规范描述了在OSGi服务平台下,如何实现管理代理对启动和停止bundle的顺序进行控制。启动级别服务给每一个bundle分配一个启动级别(start level)。管理代理可以修改bundle的启动级别,并通过设置框架激活启动级别(active start level)来启动和停止相关的bundle。只有启动级别小于或者等于激活启动级别的bundle才可以激活。


OSGi R4服务平台核心规范 :第九章 条件权限管理规范(1)

OSGi安全模型是基于功能强大,适应性强的Java 2安全架构,特别是它的权限模型。本规范在此基础上增加了一些特性,以适应OSGi开发人员的一些特殊要求。 与其他Java执行模型相比,OSGi框架提供了良好定义的API来进行权限管理,而其他的执行模型将权限管理留给具体的开发实现。


OSGi R4服务平台核心规范 :第九章 条件权限管理规范(2)

当安全管理器使用权限P为参数来调用checkPermission方法时,就开始了权限检查。框架必须实现安全管理器,称之为框架安全管理器(Framework Security Manager)。并且必须将它完全和条件权限管理服务(Conditional Permission Admin service)集成。


OSGi R4服务平台核心规范 :第九章 条件权限管理规范(3)

本标准提供了一系列的标准条件式。OSGi规范中的JAR文件中包含了规范的类,在JAR文件中,也包含了关于这些条件式的非功能实现。框架的实现者必须实现这些类,并替代原来的非功能实现类,这些类的实现和框架的有效性相关。


OSGi R4服务平台核心规范 :第十章 权限管理服务规范

在框架中,bundle都有一个单独的权限集合。通过使用这些权限来验证bundle是否具有对一些特权代码的执行权限。例如,一个FilePermission定义了使用哪个文件以及如何使用文件的方法。


OSGi R4服务平台核心规范 :第十一章 URL处理服务规范(1)

本规范定义了如何注册一个新的URL类型,如何将一个java.io.InputStream类转换为一个指定的Java类。 本规范定义了对Java运行时的通过bundle来对URL资源类型和内容处理器的扩充处理标准机制。在OSGi平台中,支持对URL类型的动态扩展,这是OSGi服务平台的一个具有重要作用的特性。


OSGi R4服务平台核心规范 :第十一章 URL处理服务规范(2)

OSGi URL流和内容处理器API包,版本规范:1.0。 需要使用这个包的bundle必须要导入这个包,通过在bundle清单文件中的Import-Package头标中描述。例如: Import-Package: org.osgi.service.url; version=1.0