`
sangmin214
  • 浏览: 176513 次
  • 性别: 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. 安装并启动你的组件(服务提供方和用户组件)

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics