目前最新的OSGi规范是2012年7月发布的Release 5,Version5.0(后文简称为R5.0)版本,该规范定义了Java模块化系统所涉及的各种场景(开发、打包、部署、更新和交互等),以及其中用到的标准接口和参考模型。它是一份内容很全面、涉及范围很广泛的技术规范,从嵌入式系统到大型服务器系统,从模块的编码开发到部署使用,从OSGi核心框架到外围扩展服务都有专门的定义。

OSGi规范并不是单一的规范文档,而是由一系列子规范构成,这些子规范主要可分为两大部分,其中一部分用于描述OSGi的核心框架(OSGi Framework)。OSGi核心框架是一个可运行OSGi系统的最小集合,它由以下内容组成:

  • 执行环境(Execution Environment)。由于OSGi所适用的目标范围非常广泛,为了更好地处理不同硬件、软件环境对OSGi造成的兼容性问题,在建立其他约定之前,必须先定义好系统的执行环境。
  • 安全层(Security Layer)。描述了基于Java 2安全架构实现的代码验证、JAR文件数字签名、数字证书服务,安全层贯穿了OSGi框架的其他各个层次。
  • 模块层(Module Layer)。模块层从“静态”的角度描述了一个模块的元数据信息、执行环境定义、模块约束和解析过程、类加载顺序等内容。模块层是整个OSGi中最基础、最底层的层次。
  • 生命周期层(Life Cycle Layer)。生命周期层从“动态”的角度描述了一个模块从安装到被解析、启动、停止、更新、卸载的过程,以及在这些过程中的事件监听和上下文支持环境。
  • 服务层(Service Layer)。描述了如何定义、注册、导出、查找、监听和使用OSGi中的服务。服务层是所有OSGi标准服务的基础。
  • 框架API(Framework API)。由一系列通过Java语言实现的接口和常量类构成,为上面各层提供面向Java语言的编程接口。

构成OSGi规范的另外一部分内容是OSGi标准服务,这些标准服务试图以OSGi为基础,在软件开发的各种场景中(如配置管理、设备访问、处理网络请求等),建立一套标准服务和编程接口。软件开发所遇到的场景是多种多样、极其复杂的,因此OSGi对应定义的标准服务也非常庞大和复杂,OSGi所包含的数十个子规范大部分都用于定义这些标准服务。以下列举了一小部分较为常用的OSGi标准服务。

  • 事件服务(Event Admin Service)
  • 包管理服务(Package Admin Service)
  • 日志服务(Log Service)
  • 配置管理服务(Configuration Admin Service)
  • HTTP服务(HTTP Service)
  • 用户管理服务(User Admin Service)
  • 设备访问服务(Device Access Service)
  • IO连接器服务(IO ConnectorService)
  • 声明式服务(Declarative Services)

其他OSGi标准服务

大部分OSGi标准服务都没有写入OSGi核心(Core)规范之中,而是定义在OSGi服务纲要(Service Compendium)规范和企业级(Service Enterprise)规范之中。从上面对OSGi规范简要介绍我们可以总结出来,平时所说的“OSGi”大致包含了如下图所示的内容。

图:OSGI内容总览

虽然伴随着OSGi规范文档还发布了一些代码性质的内容,例如XML Schema定义和少量的JAR包,但是这些JAR包仅仅包含OSGi框架API及一些标准服务的接口。换句话说,仅仅靠这些随规范发布的代码是无法建立一个可运行的OSGi系统的。要让OSGi运行起来,还需要具体实现OSGi规范的程序才行,我们把这些程序称为“实现框架”或“OSGi实现”,如 Eclipse的Equinox、Apache的Felix和Makewave的Knopflerfish等都是常见的OSGi实现。

本文节选自《深入理解OSGi:Equinox原理、应用与最佳实践》第2章"模块层规范与原理"第1节”OSGi规范概要“。

《深入理解OSGi:Equinox原理、应用与最佳实践》作者:周志明,谢小明。

《深入理解OSGi:Equinox原理、应用与最佳实践》共14章,分4个部分。第一部分(第1章):走近OSGi,主要介绍了什么是OSGi以及为什么要使用OSGi。第二部分(第2~4 章):OSGi规范与原理,对最新的OSGi R5.0中的核心规范进行了全面的解读,首先讲解了OSGi模块的建立、描述、依赖关系的处理,然后讲解了Bundle的启动原理和调度管理,最后讲解了与本地及远程服务相关的内容。第三部分:OSGi服务与Equinox应用实践(第5~11章),不仅详细讲解了OSGi服务纲要规范和企业级规范中最常用的几个子规范和服务的技术细节,还通过一个基于Equinox的BBS案例演示了Equinox的使用方法,最重要的是还通过源码分析了Equinox 关键功能的实现机制和原理。第四部分:最佳实践(第12~14章),总结了大量关于OSGi的最佳实践,包括从Bundle如何命名、模块划分、依赖关系处理到保持OSGi动态性、管理程序启动顺序、使用API基线管理模块版本等各方面的实践技巧,此外还介绍了Spring DM的原理以及如何在OSGi环节中进行程序测试。

OSGi规范概要的更多相关文章

  1. 重新诠释的OSGi规范

    上周五部门开会讨论新一代产品(基于.net Winform)的设计规范,从设计规范慢慢讨论到体系结构等架构存在的问题,诸如菜单.工具条.状态条.界面布局等不能实现配置化和自动化,子系统之间拥有强依赖, ...

  2. OSGi规范的C#实现开源

    这是大约在3-4年前完成的一个C#实现的OSGi框架,实现的过程参照了OSGi规范与与一些实现思路(感谢当时的那些资料与项目),此框架虽然仅在几个小型项目有过实际的应用,但OSGi的规范实现还是相对比 ...

  3. AMD 规范与CMD 规范概要

    命名冲突和文件依赖,是前端开发过程中的两个经典问题.通过模块化开发来解决. AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMD CMD 规范在这 ...

  4. ROS C++ 规范概要

    一.动机 代码一致才能可读.联调.高效率.高复用.可移植性. 二.命名方式 CamelCased camelCased under_scored ALL_CAPITALS 2.1 Package命名方 ...

  5. OSGi——面向服务架构规范简述

    OSGi——面向服务架构规范简述 去年我们组要开发一个新的产品,在讨论产品架构路线的时候,美国的架构师向大家征集了架构设计思想(我推荐了SCSF),有一位工程师向他推荐了OSGi.以前我还没有听过OS ...

  6. Java模块化规范之争(转载)

    经过近20年的发展,Java语言已成为今日世界上最成功.使用的开发者人数最多的语言之一,Java世界中无数商业的或开源的组织.技术和产品共同构成了一个无比庞大的生态系统. 与大多数开发人员的普遍认知不 ...

  7. Java Script 编码规范【转】

    Java Script 编码规范 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 参考规范 ECMAScript 5.1 注解版 EcmaScript ...

  8. 开源协议:LGPL协议、OSGi协议---打酱油的日子

    本文介绍开源的协议. LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称 GNU Library General Publi ...

  9. osgi笔记

    Bundle-Classpath可以实现内嵌jar. 一个Bundle的Activator不需要进行Export 一个Package中的类被两个ClassLoader加载,包中的Private cla ...

随机推荐

  1. 【shiro】关于shiro匹配URL的小用法

    今天涉及到这个地方 1.登录请求需要带着username和password一起过去,这样的话发出的请求就是:http://localhost:8080/wxSecond/welcome/login.h ...

  2. 虚拟机选择配置:解决tomcat内存溢出

    用于解决java.tomcat内存溢出:-server -XX:PermSize=128M -XX:MaxPermSize=256m

  3. (转)HBase 常用Shell命令

    转自:http://my.oschina.net/u/189445/blog/595232 hbase shell命令                             描述  alter 修改 ...

  4. js调用高德地图的搜索api

    var city = $('#city')[0].value; AMap.plugin(['AMap.Autocomplete'],function(){ var autoOptions = { ci ...

  5. Scriptable render pipeline unity

    https://www.youtube.com/watch?v=zbjkEQMEShM LWRP https://blogs.unity3d.com/cn/2018/02/21/the-lightwe ...

  6. OIT

    https://matthewwellings.com/blog/depth-peeling-order-independent-transparency-in-vulkan/ depth peeli ...

  7. SVN-两种存储方式的比较(BDB vs. FSFS)

    Subversion 的版本库(repository),就是位于服务器端,统一管理和储存数据的地方.本文中,我们以 Linux 为例,介绍在服务器端配置和管理 Subversion 版本库的基本方法. ...

  8. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)如何修改标准驱动器编码器分辨率

    在某个轴的Enc上双击,可以修改Scaling Factor Numerator     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetao ...

  9. [android ndk] -android studio中编译生成so文件

    1.android.useDeprecatedNdk=true Error:Execution failed for task ':app:compileDebugNdk'.> Error: N ...

  10. Pthreads并行编程之spin lock与mutex性能对比分析(转)

    POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API.线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用 ...