1. 说明

题目

  • 名称:OSGi源码分析(题目3)
  • 关键词OSGiFelixJavaMaven
  • 主要工作
      1. 下载OSGi规范的核心部分,并仔细阅读;
      1. 下载 JDK1.6.x 、 Apache 的构建工具 Maven 4 、 Eclipse 3.4,构建阅读代码的环境;
        1. (应该不用局限于老师给出的版本)
      1. 在详细阅读felix源代码的基础上,理解 OSGi规范的思想,并给出软件架构图;
        1. (Felix源码只需要下载并阅读mainframeworkorg.osgi.core三部分,不需要阅读全部!)
      1. 软件架构图的基础上,给出 felix 源代码的详细类图和核心过程的顺序图,说明 felix 源代码的设计如何与OSGi 框架对应;
      1. 在明确详细设计的基础上,以 felix 中的相关代码为例证明自己的判断;
      1. 通过阅读 OSGi 核心规范和 felix 源代码,深刻体会 OSGi 模块层的定义并通过一些典型操作证明 felix 是 如何支持 OSGi规范的。
  • 作业要求
      1. 项目报告,详细说明主要工作2~5 & 小组分工情况 (30分)
      1. 讲解幻灯片,15分钟 (30分)
      1. 相关代码分析与注释 (20分)
      1. Felix的实现代码与OSGi的对应关系 (20分)

2. 相关资料-链接(Click)

🎿
Felix-related Links

3.分工

总体

  • 负责:Liu Yang
  • 各任务的总结与对接

测试部分

  • 负责:Zhang Di
  • 用Maven托管部署Felix,使用相关的Maven插件,让Bundle的创建、安装更方便
  • 写一个简单的Bundle,完成它的安装、启动、停止、卸载
  • 写一个Bundle并将其添加到服务,使用其他Bundle调用这个服务
  • Felix发行版
    • notion image
  • Maven插件
    • notion image

framework部分+main部分

  • 负责:Li Meng、Pan Kui Yu、Li Chen Yu
  • framework部分(看1.1)
    • notion image
  • main部分(看圈出来的两个文件)
    • notion image

core部分

  • 负责:Wu Geng Zhuo(Bundle相关部分)、Li Guang Chao(非Bundle相关部分)
notion image
 

4.笔记

3.1 什么是OSGi

  • Open Service Gateway Initiative,开放网关服务
  • 以Java为技术平台的动态模块化规范
  • Java平台上事实上的模块化规范
  • 不只是一门技术,更多的是一种做系统架构的工具和方法论
  • 由数十个自规范构成,有上千个API接口
  • 拆分模块是JAR包就能做到的事,真正的模块化是考虑模块中类的导出,隐藏、依赖、版本管理、生命周期变化和模块间交互等一系列问题(这也是OSGi所完成的)
  • 模块化推重架构师设计出能在一定范围内自治的代码,可以使开发人员只了解当前模块的只是就能高效编码,也有利于代码出现问题时隔断连锁反应

3.2 OSGi规范概要

notion image
组成OSGi的子规范可以分为两大部分:
  1. 描述OSGi的核心框架(OSGi Framework),一个可以运行OSGi系统的最小集合:
      • 执行环境(Execution Environment)
        • OSGi使用范围非常广,为了处理不同硬件、软件环境对OSGi造成的兼容性问题,建立其他约定前,必须先定义好系统的执行环境
      • 安全层(Security Layer)
        • 难怪三个月了基于Java2安全架构实现的代码验证、JAR文件数字签名、数字证书服务、安全层贯穿了OSGi框架的其他各个层次
      • 模块层(Module Layer)
        • 从“静态”的交付描述一个模块的元数据信息、执行环境定义、模块约束和解析过程
      • 生命周期层(Life Cycle Layer)
        • 从”动态“的角度描述了一个模块从安装、解析、启动、停止、更新、卸载的过程,以及在这些过程中的事件监听和上下文支持环境
      • 服务层(service Layer)
        • 描述了如何定义、注册、导出、查找、监听和使用OSGi中的服务。服务层是所有OSGi标准服务的基础
      • 框架API(Framework API)
        • 由一系列通过Java语言实现的 接口和常量类构成,为上面的各层提供面向Java语言的编程接口
  1. OSGi标准服务,以OSGi为基础,在软件开发的各种场景中,建立一套标准服务和编程接口
      • 例:
        • 事件服务(Event Admin Service)
        • 包管理服务(Package Admin Service)
        • 日志服务(Log Serveice)
        • HTTP服务(HTTP Service)
        • ......
      • 大部分OSGi标准服务没有写入到OSGi核心规范(Core)中,而是定义在OSGi服务纲要(Service Compendium)规范和企业级(Service Enterprise)规范中

3.3 什么是Bundle

Bundle是OSGi中最基本的单位,Bundle可以通俗地理解为 “模块化开发体系” 中的 “模块”
一个符合OSGi规范的Bundle,必须是一个符合JAR文件格式规范的JAR包。
Bundle对JAR文件进行了3方面的扩充:
  1. /META-INF/MANIFEST.MF文件用于描述JAR包的元数据信息,Bundle在该文件添加了大量扩展定义
    1. 如:该Bundle可以提供哪些资源、依赖哪些其他Bundle,启动或卸载时需要执行哪些动作
  1. /OSGI-OPT 文件夹(可选),在其中保存一些与Bundle运行无关的信息
    1. 如:Bundle源码、软件说明书等
  1. 一些具备特殊含义的程序和资源,如使用Bundle-Activator定义的初始化类、定义在OSGI-INF/110n目录下的本地化信息等

3.4 模块层

3.5 生命周期层

Bundle的安装、解析、启动、更新、停止、卸载

3.6 服务层

5.源码分析

(!!相关图示见实验报告!!)
🛑
org.osgi.core
org.apache.felix.framework(Click!)(LiChenYu、PanKuiYu、LiMeng整理)