OSGi

《OSGi入门教程》笔记

2018-02-07  本文已影响21人  天未的博客

本文是对《OSGi入门教程》课程的笔记。

OSGi基础概念

基本概念

OSGi的一些定义

OSGi生态

OSGi生态

模块化

将大型系统分解为多个模块,通过设置模块的边界来改善系统的可维护性和封装性。

Java模块化的局限性

可见性控制不够

Jar包灾难

部署和管理缺少支持

OSGi三层架构

模块层:定义了OSGi中的模块Bundle。

Bundle所包含内容

生命周期层:提供运行时管理和框架访问接口。

服务层:关注模块间的交互。

OSGi介绍补充

OSGi严格的模块化特性的最大优势

OSGi传播的阻力

企业中的OSGi

小节

  1. OSGi提供了更粗粒度的模块化特征,可以解决Java模块化的局限性。
  2. OSGi中声明式和基于元数据的方法是非侵入式的。
  3. 生命周期层定义了模块动态且可控的生命周期模型,简化了系统管理。
  4. 服务层鼓励采用基于接口编程的方法,从而将接口与实现进行分类。

OSGi模块层

模块化

与面向对象的关系

模块化的意义

Bundle

基本概念

元数据定义

依赖解析

OSGi类查找顺序

多个提供者的选取规则

uses子句使用

  1. 使用uses子句来解决类空间不一致的问题。
  2. uses约束是可传递的。
  3. 谨慎使用uses,会大大限制解析的灵活性。
  4. 使用场景如下。
use子句使用

OSGi生命周期层

基本概念

生命周期管理

生命周期

生命周期层的作用

生命周期层状态转移

生命周期层状态转移

使用生命周期层

public interface BundleActivator{
    public void start(BundleContext context) throws Exception;
    public void stop(BundleContext context) throws Exception;
}
Bundle接口

Bundle的更新

两阶段更新

Bundle更新

刷新流程

  1. 从bundle开始计算受影响的bundle有向图。
  2. 处于ACTIVE状态的bundle被停止并被切换至RESOLVED状态。
  3. 处于RESOLVED状态的bundle,切换至INSTALLED状态,这些bundle的依赖关系不再被解析。
  4. 处于UNINSTALLED状态的bundle会从图中移除,同时也会被彻底地从框架中移除(GC)。
  5. 其它bundle如果在框架重启前处于ACTIVE状态,重启框架会对这些bundle及其依赖的bundle进行解析。
  6. 所有工作完成后,框架会触发一个FrameworkEvent.PACKAGES_REFRESHED事件。

小节

  1. BundleActivator是bundle的入口,与Java应用中的main函数类似。
  2. BundleContext为应用提供执行时操作OSGi框架的方法。
  3. Bundle代表了一个已安装到框架中的bundle,允许对其执行状态进行操作。

OSGi服务层

基本概念

什么是服务

面向服务的设计

OSGi服务

OSGi服务模型

OSGi服务

OSGi服务注册、更新与注销

服务使用

// 注册中心会增加一个使用计数。
A serviceA = (A)bundleContext.getService(reference); 
// 完成服务时应该通知注册中心。
bundleContext.ungetService(reference);  

服务监听

服务可以监听的事件包括:REGISTERED(注册)、MODIFIED(更改)、UNREGISTERING(注销)。

服务监听事件

OSGi开发环境

略,点击可查看原文

上一篇下一篇

猜你喜欢

热点阅读