`
sangmin214
  • 浏览: 178627 次
  • 性别: Icon_minigender_1
  • 来自: 黄山
文章分类
社区版块
存档分类
最新评论

OSGi 读书笔记 第一章

阅读更多

第一章 揭开OSGi

本书首先指出Java没有明确提供对构建模块化系统的支持,而只有普通的面向对象的数据封装。所以很多时候开发人员需要自己去弥补这方面。为了弥补这一块而让应用开发人员专注于应用的开发,OSGi服务平台应运而生。OSGi是OSGi联盟为了解决Java没有提供模块化支持而定义的一个工业标准。另外,它引入了一个新的面向服务的编程模型,也被叫做“虚拟机中的SOA”。

 

1.1 什么是OSGi以及为什么要用OSGi

简单的说,OSGi就是Java平台上的模块层。那什么是模块呢?模块就是软件应用的逻辑单元,各自负责相应的实现。为了讲清楚为什么要用OSGi,本书先讲了Java在模块化这方面的不足,然后介绍OSGi是如何弥补的。

 

1.1.1 Java在模块化方面的局限性

低层代码可见性的控制

虽然Java提供了一些控制修饰符,譬如public, protected, private或者包内的默认访问,但是它们都是用来控制这些低层数据对象的封装,而不是解决系统的逻辑单元的划分。Java使用了package关键字来分隔代码,但是只有声明为public的代码才能从另一个包访问(如果是继承关系的话,protected的代码是可以访问的)。所以如果应用的代码分布在不同的包里,而且它们需要相互访问,那就必须把那些方法设置成public的,这样的话,任何人都可以访问了。还有就是,这会暴露接口的实现细节,而导致以后如果想对实现做些修改,要考虑很多事情(很多直接调用实现代码的代码也可能需要修改)。

Java中嵌套的包看起来好像有逻辑上的关系,其实不是,它们是两个不同的包。也就是说org.foo和org.foo.hello这两个包是两个包,并没有看起来好像存在的继承关系,org.foo.hello中的类一般也只能访问org.foo中的public的类。这个嵌套的包只是为了避免包名的冲突而已,虽然很多时候它们提供了一些逻辑上代码的分割。

所以,在Java里

1. 为了防止暴露你不想公开的API,你可以把尽可能多的代码放在同一个包里(削弱应用的逻辑结构),或者

2. 使用多个包,并且暴露相应的API,来保证应用的逻辑结构

 

易引发错误的类路径

Java使用classpath来查找所需要的类而根本不管代码的版本,依赖以及一致性,它总是使用它最先找到的那个类。所以,你需要不断的添加库直到虚拟机停止抱怨找不到类。在比较大型的应用中,不同的组件很可能会使用相同组件的不同版本,而如果这个被使用的不同版本是不兼容的,那么这个应用就会出问题。

 

有限的部署和管理支持

Java中缺乏比较好的部署和管理你的应用的工具。虽然你可以使用类装载器来实现动态插入的功能,但是类装载器本身并不是用来为应用开发人员服务的常用工具。

 

1.1.2 OSGi也帮你什么

OSGi在你的代码运行之前会检查你的代码的依赖,OSGi会检查类路径中的库的依赖性和一致性,你可以打包并部署你需要的类(排除你不需要的),你可以明确控制你想暴露的接口,OSGi提供很强大的扩展机制(以及运行时的动态化)

 

1.2 OSGi大致介绍

OSGi服务平台包括两个部分:OSGi框架和OSGi标准服务。OSGi框架是实现并提供OSGi功能的运行时环境。OSGi标准服务为一些常用的任务定义了一些可重用的接口。

 

1.2.1 OSGi框架

OSGi联盟定义了OSGi的规范,然后第三方可以实现这个框架。比较著名的开源实现有Apache Felix,Eclipse Equinox,和Knopflerfish。OSGi规范把框架分成了3层:模块层,生命周期层和服务层。

 

【感觉我这个读书笔记写的过于详细和没有思想,从下面开始就结合自己的理解适当的抽象出来】

 

1.2.2 模块层

模块层定义了OSGi模块的概念,叫做bundle,其实就是一个jar文件以及额外的元数据。一个bundle包含你的类以及相关的资源文件。budle比普通的jar文件强大,你可以明确声明哪些包含的类是可以被外部访问的,在这一点上,bundle扩展了平常的访问修饰符(public, private, protected)。另一个强大之处在于你可以明确声明你的bundle依赖哪些外部的包。明确声明bundle提供给外部访问的类以及bundle依赖的类的好处是OSGi框架可以据此自动管理和验证你的budles的一致性,这个过程也叫budle解析。

 

 1.2.3 生命周期层

 生命周期层定义了bundle如何在OSGi框架中动态的安装和管理。生命周期层提供了两个不同的功能。在你的程序外部,生命周期层精确定义了bundle的生命周期的操作,譬如安装,更新,启动,停止和卸载。这些操作允许你动态的管理你的应用,你的bundle可以安全的加入或者移出框架而不要重启应用进程。在你的程序内部,生命周期层提供和OSGi框架交互的方式以及在运行时使用OSGi框架提供的设施。

 

1.2.4 服务层

这一层跟当前热门的SOA类似,就是面向服务的发布,查找和绑定:服务提供商发布他们的服务到一个服务注册部,服务的客户查找服务注册不获取服务去使用。

 

1.2.5 把3层结合起来

OSGi的框架是有这三层来组成的,那么我们如何在应用的开发中使用这三层呢?创建一个基于OSGi的应用主要有下面这么几步:

1. 把你的应用设计成面向接口的,以及使用这些接口的客户端

2. 使用你喜欢的工具和方法来实现服务提供方和用户组件

3. 把服务提供方和用户组件各自打包,并配以相应的OSGi元数据

4. 启动你的OSGi框架

5. 安装并启动你的组件(服务提供方和用户组件)

 

 

 

 

分享到:
评论

相关推荐

    osgi学习笔记(一)

    OSGi(Open Services Gateway Initiative)学习笔记(一) 在IT领域,OSGi是一种模块化系统和Java服务平台,它提供了一种动态管理软件组件的能力。本文将深入探讨OSGi的基本概念、架构以及如何使用它来构建可扩展和...

    osgi实战读书笔记

    ### OSGi实战读书笔记知识点总结 #### 一、Bundle的类型及特点 - **RequireBundles**: 使用了`Require-Bundle`头字段的Bundle能够访问该依赖Bundle中所有的资源文件和导出的包。这意味着如果一个Bundle声明了对另...

    osgi学习笔记(二)

    在本篇“osgi学习笔记(二)”中,我们将深入探讨OSGi(Open Services Gateway Initiative)框架的核心概念、工作原理以及如何在实际项目中应用它。OSGi是一种Java模块化系统,它允许开发人员创建可独立更新和依赖...

    OSGI学习笔记.doc

    OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为独立的模块,称为bundle,每个bundle包含自己的类加载器和资源。这些bundle可以通过动态安装、启动、停止、更新和卸载...

    osgi学习笔记(三)

    在本篇OSGi学习笔记中,我们将深入探讨OSGi(Open Service Gateway Initiative)这一模块化系统,特别是关于服务方面的知识。OSGi是一个Java平台上的动态模块化系统,它允许开发者创建可热部署、互相依赖的模块,...

    读书笔记:OSGI 实战 整合Maven 测试代码 .zip

    读书笔记:OSGI 实战 整合Maven 测试代码

    『原创』OSGI研究笔记1 - Equinox ServletBridge模式下调用Datasource

    标题中的“OSGI研究笔记1 - Equinox ServletBridge模式下调用Datasource”表明了这篇文章将探讨如何在OSGI(Open Service Gateway Initiative)环境下,利用Equinox的ServletBridge模块来访问和使用DataSource。OSGI...

    OSGi原理与最佳实践 学习笔记 一

    OSGi(Open Service Gateway Initiative)是一个基于Java语言的服务规范,旨在提供一个开放的服务平台,它允许多种设备通过网关来提供各种服务。OSGi Alliance是一个开放标准化组织,由多家公司共同创立,目的是为...

    OSGI原理与最佳实践(扫描版,带目录).pdf

    OSGi原理与最佳实践基于作者多年使用0SGi的经验而编写,涵盖了0SGi从/kfqN深入的知识体系,从OSGi的简介开始,介绍OSGi的作用及基本概念;其后进入OSGi实战,结合实例讲解如何基于OSGi框架编写模块...第12章 OSGi展望

    读书笔记:《Java应用架构设计模块化模式与OSGi》源代码.zip

    读书笔记:《Java应用架构设计模块化模式与OSGi》源代码

    Linux下OSGi框架实现笔记

    ### Linux 下 OSGi 框架实现笔记 #### 一、Linux 环境配置与准备 在开始实现 Linux 下的 OSGi 框架之前,首先需要确保已经正确配置了 Linux 的开发环境。 ##### 1. Linux 开发环境配置 **定义**:Linux 是一个...

    osgi karaf笔记

    OSGi(Open Service Gateway Initiative)是一种Java平台上的模块化系统和应用编程框架,用于构建可动态部署、管理和更新的模块化应用程序和服务。Karaf则是一个基于OSGi的容器,提供了丰富的功能和命令行接口,使得...

    OSGi入门笔记

    OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许开发人员创建可独立部署、可热更新和可交互操作的模块化应用程序。本文将深入介绍OSGi的基本概念,包括其与J2EE的对比,以及模块...

    OSGi原理与最佳实践pdf下载(完整版)

    OSGI原理与最佳实践的完整版,共12...第1 章OSGi 简介 第2 章OSGi 框架简介 第3 章基于Spring-DM 实现Petstore 第4 章基于Apache CXF 实现分布式Petstore 第5 章构建OSGI Bundle Repositor'y 第6 章OSGi 规范解读 ……

    osgi介绍osgi介绍

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它为开发人员提供了一种动态、模块化的运行时环境。在OSGi中,应用程序被分解为称为“bundle”的独立单元,这些bundle可以相互依赖并独立地加载、...

    OSGI 开发文档中文的

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建可模块化的Java应用程序。它提供了一种灵活的框架,使得开发者可以构建、部署和管理模块化组件,这些组件被称为服务或bundle。OSGI的核心理念是将...

    osgi最新规范第四版

    osgi最新规范第四版, eclipse插件结构就是基于此规范编写的

    OSGI组件编程(osgi.component.programming)

    OSGI组件编程是一种在Java平台上构建模块化应用程序的方法,它由OSGi联盟制定标准,并被广泛应用于企业级软件开发,尤其是对于需要高度可扩展性和动态性的系统。在本教程中,我们将深入探讨如何使用Eclipse和Equinox...

    OSGI规范中文版

    OSGi(Open Services Gateway Initiative)是一种在Java平台上进行模块化编程的规范,它为Java应用提供了动态化、服务化和模块化的运行环境。OSGi规范定义了一组核心的Java包和Java类的框架,允许一个应用程序或组件...

Global site tag (gtag.js) - Google Analytics