OSGI实战第一章

第一章         解开OSGI的面纱

  1. OSGI是什么?是Java平台的一个模块化层。
  2. 模块化:软件应用程序的代码被分割为表示独立内容的逻辑单元,可简化开发,可通过强化逻辑模块的界限来提高可维护性。
  3. Java模块化的不足

a)         Java使用访问修饰符(如public、protected、private和包级私有),解决底层面向对象封装,而不是逻辑系统划分。

比如,如果需要代码在多个包之间课件,那么包内的代码必须声明为public,那么所有的模块都可以使用这个public类。这样会暴露具体的实现细节,用户可能依赖于不想要公开的API,使后续的升级更加困难。

b)         易错的类路径概念、

原因是类路径隐藏了代码版本、依赖和一致性等特性。类路径不关系代码版本,无法明确描述依赖关系。建立类路径的过程是烦琐易错的,你只是不停地添加类库,知道虚拟机不再报找不到类的错误。经常出现一个JAR文件的类与另一个JAR文件中不兼容的类交互时会出现NoSuchMethodError异常。

c)         部署和管理支持上的不足。

在Java中存在对多个版本的依赖时,没有简单的方法来正确部署这些代码并执行。在部署之后更新应用和组件也会面临同样问题。

  1. OSGI的帮助

a)         当启动程序时,先确保代码满足依赖关系,然后才允许执行代码。不会出现由于类路径不正确导致ClassNotFoundException或NoSuchMethodError。

b)         要求在版本和其他约束条件方面上对依赖集进行一致性检查,不会出现由于依赖库的错误版本导致程序执行时错误。

c)         不必担心由于层次化的类加载模式隐含的限制,导致没款见共享类时导致类型不一致,如foo instanceof Foo == false。

d)        将一个程序打包成逻辑上独立的JAR文件,并且只部署哪些某个安装需要的部分。这大致阐述了OSGi的目的。

e)         OSGi为JAR文件定义了新一级的代码可见性。将一个程序打包成逻辑上独立的JAR文件,声明哪些代码是可以被其他JAR文件访问。

f)          为程序定义一个插件式的扩展机制。OSGi模块化特别适合提供强大的扩展性机制,包括支持执行时的动态性。

  1. 架构概览

OSGi服务平台包括OSGi框架和OSGi标准服务。

l  OSGI框架是实现并提供OSGi功能的运行环境。

l  OSGi标准服务定义了很多用于执行常见任务(如日志和首选项)的可重用API。

  1. OSGi框架

a)         框架的实现方式:Apache Felix, Eclipse Equinox,KnopFlerfish。Eqinox OSGi框架实现是Eclipse IDE的底层运行时环境。Apache Felix OSGi框架实现是GlassFish v3的运行环境。多种应用长江表明OSGi框架具有很高的价值和灵活性。

b)         OSGi框架的分层结构:

i.              模块层,关注于打包和共享代码。

ii.              生命周期层,关注于提供执行时环境模块管理和对底层OSGi框架的访问。

iii.              服务层,关注于模块,特别是模块内的组件间的交互和通信。

  1. 模块层

l  定义了OSGI模块的概念,并称为bundle。

l  Bundle是一个包含元数据、类文件和相关资源的JAR文件。

l  Bundle可以是一个普通的JAR文件+特殊的元数据,也可以是包含构成一个特定应用程序的多个逻辑模块组成的JAR。

l  Bundle比标准的JAR文件更强大,因为可以明确声明名导出包。从这个意义上说,Bundle扩展了Java的普通访问修饰符(public,private,protected)。

l  Bundle可以明确声明依赖哪些外部包(导入)。

l  明确声明导入包和导出包的好处是:OSGI框架可以自动地管理和验证它们的一致性,称为bundle解析,使导入包和导出包相匹配,确保bundle版本和其他方面约束的一致性。

  1. 生命周期层

l  定义了在OSGI框架中是如何动态安装和管理Bundle的。

l  目的一:在应用程序外部,精确定义啦bundle生命周期的操作(安装、更新、启动、停止和卸载)。

l  目的二:定义了bundle如何访问它们的执行环境。如何访问它们的执行环境。执行环境为bundle提供了一种与OSGi框架交互的方式和执行时的一些便利。

l  生命周期层整体支持创建可从外部(和远程)管理的而应用程序,或者完全自我管理的应用程序,或者两者的任意组合。

  1. 服务层

l  使用基于接口的面向服务的交互模式。

l  主要涉及面向服务的发布、查找和绑定。服务提供者将服务发布到服务注册中心;服务客户端通过搜索服务注册中心,查找可供使用的服务。

l  基于接口,提倡接口与实现之间的分离。OSGI服务是Java接口,表示服务提供者和服务客户端之间的一种契约。服务层通过基于服务的动态性(服务可以在任何时刻出现或消失)来扩展声明周期层基于bundle的动态性。结果产生了一种支持模块化和灵活性的编程模式。

  1. 如何使用OSGi框架中的层?

a)         涉及应用,将它分解为一些服务接口(普通的基于接口和编程)和这些接口的客户端。

b)         使用你选定的工具和方法来实现服务提供者和客户端组件。

c)         将服务提供者和客户端组件打包成独立的JAR文件,然后用合适的OSGi元数据扩展每个JAR文件。

d)         启动OSGi框架

e)         安装和启动所有来自步骤c的JAR文件。

时间: 2024-12-21 22:07:52

OSGI实战第一章的相关文章

2017.2.20 activiti实战--第一章--认识Activiti

学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis 2.原生支持spring,可以轻松集成spring 3.引擎的Service接口 Activiti引擎提供了7大Service接口,均通过processEngine获取,支持链式API风格. Service接口 作用 RepositoryService 流程仓库服务,管理流程仓库,比如部署.删除.读取流程资源

核心系统命令实战 第一章Linux命令行简介

第一章Linux命令行简介 1.1 Linux命令行概述 1.1.1 Linux 命令行的开启和退出 开启:登陆账号密码进入系统 退出:exit/logout  快捷键:Ctrl+d 1.1.2 Linux命令行提示符介绍 (1)提示符由PS1环境变量控制.实例代码如下: [[email protected] ~]# set | grep PS1 PS1='[\[email protected]\h \W]\$ ' 这里的PS1='[\[email protected]\h \W]\$ ',可以

DirectX12 3D 游戏开发与实战第一章内容

DirectX12 3D 第一章内容 学习目标 1.学习向量在几何学和数学中的表示方法 2.了解向量的运算定义以及它在几何学中的应用 3.熟悉DirectXMath库中与向量有关的类和方法 1.1 向量 向量是一种兼具大小和方向的量,具有这两种的量都称为向量值物理量,在几何学中我们一般用一条有向线段来表示一个向量 1.1.1 向量与坐标系 前提:计算机无法直接处理以几何方法表示的向量,所以需要寻求一种用数学方法来表示向量 在这里我们会引入一种3D空间坐标系,通过平移操作使向量的尾部位于原点,然后

机器学习实战——第一章

分类:将实例数据划分到合适的分类中.目标变量是离散型. 回归:预测数值型数据.目标变量是连续型的数值. 监督学习:必须知道预测什么,即目标变量的分类信息.目标变量是机器学习算法的预测结果. 开发机器学习应用程序的步骤:1)收集数据:2)准备输入数据:3)分析输入数据:4)训练算法:5)测试算法:6)使用算法. 1 from numpy import * #将numpy函数库中的所有模块引入当前命名空间 2 random.rand(4,4) #构造4*4的随机数组array 3 randMat =

机器学习实战--第一章 Numpy使用

导入numpy 并简单赋值 import numpy as np a = np.array([0, 1, 2, 3, 4, 5]) print a # 数组转换到2D矩阵 变成三行两列 b = a.reshape((3, 2)) print b # .ndim(空间维度的意思)即矩阵列数 print a.ndim print b.ndim # .shape查看矩阵形态,即几行几列 print b.shape# numpy避免复制操作 直接修改值,a,b的值都变化 b[1][0] = 77prin

[Python编程实战] 第一章 python的创建型设计模式1.1抽象工厂模式

注:关乎对象的创建方式的设计模式就是"创建型设计模式"(creational design pattern) 1.1 抽象工厂模式 "抽象工厂模式"(Abstract Factory Pattern)用来创建复杂的对象,这种对象由许多小对象组成,而这些小对象都属于某个特定的"系列"(family). 比如说,在GUI 系统里可以设计"抽象控件工厂"(abstract widget factory),并设计三个"具体子

java并发编程实战第一章

线程不安全代码测试 private static class UnsafeSequence { private int value; public int getNext() { return value++; } } 使用两个线程分别调用上面的getNext方法1000次,出现了一次线程不安全的情况,在转出的结果中有两个1311: 图片.png 原因分析,与书上说的一致: 图片.png 完整的代码 import java.io.PrintWriter; import java.util.con

OSGi原理与最佳实践:第一章 OSGi框架简介(2)

OSGi原理与最佳实践:第一章 OSGi框架简介(2) 由  ValRay 发布 已被浏览4884次 共有3条评论 已被3个人收藏 2013-08-16 21:23 顶(0) 踩(0) osgi原理与最佳实践 1.1.4 开发传统类型的应用 1.1.4.1 B/S 我们首先来看一下,如何基于 OSGi 来开发 B/S 结构的应用.B/S 结构应用程序的开发,可有两个选择:一个是在 OSGi 的框架中嵌入 Http 服务器,另外一个是在 Servlet 容器中嵌入 OSGi 框架.下面分别介绍这两

OSGi原理与最佳实践:第一章 OSGi框架简介(5)Spring-DM

OSGi原理与最佳实践:第一章 OSGi框架简介(5)Spring-DM 由  ValRay 发布 已被浏览8409次 共有3条评论 已被2个人收藏 2013-08-16 21:29 顶(1) 踩(0) osgi原理与最佳实践 1.3 Spring-DM 1.3.1 简介 Spring-DM 指的是 Spring Dynamic Modules.Spring-DM 的主要目的是能够方便地将 Spring 框架 和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环