1. 说明题目2. 相关资料-链接(Click)3.分工总体测试部分framework部分+main部分core部分4.笔记3.1 什么是OSGi3.2 OSGi规范概要3.3 什么是Bundle3.4 模块层3.5 生命周期层3.6 服务层5.源码分析
1. 说明
题目
- 名称:OSGi源码分析(题目3)
- 关键词:OSGi,Felix,Java,Maven
- 主要工作:
- 下载OSGi规范的核心部分,并仔细阅读;
- 下载 JDK1.6.x 、 Apache 的构建工具 Maven 4 、 Eclipse 3.4,构建阅读代码的环境;
- 在详细阅读felix源代码的基础上,理解 OSGi规范的思想,并给出软件架构图;
- 在软件架构图的基础上,给出 felix 源代码的详细类图和核心过程的顺序图,说明 felix 源代码的设计如何与OSGi 框架对应;
- 在明确详细设计的基础上,以 felix 中的相关代码为例证明自己的判断;
- 通过阅读 OSGi 核心规范和 felix 源代码,深刻体会 OSGi 模块层的定义并通过一些典型操作证明 felix 是 如何支持 OSGi规范的。
(应该不用局限于老师给出的版本)
(Felix源码只需要下载并阅读main、framework、org.osgi.core三部分,不需要阅读全部!)
- 作业要求:
- 项目报告,详细说明主要工作2~5 & 小组分工情况 (30分)
- 讲解幻灯片,15分钟 (30分)
- 相关代码分析与注释 (20分)
- Felix的实现代码与OSGi的对应关系 (20分)
2. 相关资料-链接(Click)
Felix-related Links3.分工
总体
- 负责:Liu Yang
- 各任务的总结与对接
测试部分
- 负责:Zhang Di
- 用Maven托管部署Felix,使用相关的Maven插件,让Bundle的创建、安装更方便
- 写一个简单的Bundle,完成它的安装、启动、停止、卸载
- 写一个Bundle并将其添加到服务,使用其他Bundle调用这个服务
- Felix发行版

- Maven插件

framework部分+main部分
- 负责:Li Meng、Pan Kui Yu、Li Chen Yu
- 参考博客:https://www.cnblogs.com/ku1274755259/category/1493030.html(是本校学姐总结的)
- framework部分(看1.1)

- main部分(看圈出来的两个文件)

core部分
- 负责:Wu Geng Zhuo(Bundle相关部分)、Li Guang Chao(非Bundle相关部分)
- 参考博客:https://blog.csdn.net/FelixWang0515/article/details/72329257
按上述链接里所描述的模块分工。

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

组成OSGi的子规范可以分为两大部分:
- 描述OSGi的核心框架(OSGi Framework),一个可以运行OSGi系统的最小集合:
- 执行环境(Execution Environment)
- 安全层(Security Layer)
- 模块层(Module Layer)
- 生命周期层(Life Cycle Layer)
- 服务层(service Layer)
- 框架API(Framework API)
OSGi使用范围非常广,为了处理不同硬件、软件环境对OSGi造成的兼容性问题,建立其他约定前,必须先定义好系统的执行环境
难怪三个月了基于Java2安全架构实现的代码验证、JAR文件数字签名、数字证书服务、安全层贯穿了OSGi框架的其他各个层次
从“静态”的交付描述一个模块的元数据信息、执行环境定义、模块约束和解析过程
从”动态“的角度描述了一个模块从安装、解析、启动、停止、更新、卸载的过程,以及在这些过程中的事件监听和上下文支持环境
描述了如何定义、注册、导出、查找、监听和使用OSGi中的服务。服务层是所有OSGi标准服务的基础
由一系列通过Java语言实现的 接口和常量类构成,为上面的各层提供面向Java语言的编程接口
- 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方面的扩充:
- /META-INF/MANIFEST.MF文件用于描述JAR包的元数据信息,Bundle在该文件添加了大量扩展定义
如:该Bundle可以提供哪些资源、依赖哪些其他Bundle,启动或卸载时需要执行哪些动作
- /OSGI-OPT 文件夹(可选),在其中保存一些与Bundle运行无关的信息
如:Bundle源码、软件说明书等
- 一些具备特殊含义的程序和资源,如使用Bundle-Activator定义的初始化类、定义在OSGI-INF/110n目录下的本地化信息等
3.4 模块层
3.5 生命周期层
Bundle的安装、解析、启动、更新、停止、卸载
3.6 服务层
5.源码分析
(!!相关图示见实验报告!!)
org.osgi.coreorg.apache.felix.framework(Click!)(LiChenYu、PanKuiYu、LiMeng整理)