`
killko
  • 浏览: 104736 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
Group-logo
Servicemix&Fu...
浏览量:0
社区版块
存档分类
最新评论

OSGI原由

    博客分类:
  • osgi
阅读更多
    软件的复杂度总是越来越高,为了解决人有限的处理能力和它之间的矛盾,就要用到“内聚”,也就是说将“复杂度”封装起来,只暴露出少量必要的部分。

    例如:高低电平信号->机器码->汇编指令->高级语言语句->函数(function或method)->类(class)->包(package) 就是一个复杂度封装的过程,就是一个“内聚”的过程。

    模块化也是一种更高层面的“内聚”,从java和osgi的角度看,模块化是在包(package)的层面上,更进一步“封装”。

    封装主要需要解决两个问题,一个是“隔离”,一个是“暴露”。

    那么osgi是怎么样解决这两个问题的呢?
    osgi是在jvm的classloader的机制层面上来实现模块化层面的封装。

    一、osgi如何实现模块间的“隔离“?
    jvm包括Bootstrap、Extension、Application和Custom四类Classloader,这4类Classloader之间存在父子关系。这些Classloader采用双亲委托模型(Parent Delegation Mode)实现Class的加载。也就是当一个Class要引用另一个Class时,会先在加载自己的Classloader查找是否有所需的类,否则就委托其父Classloader,一直到Bootstrap Classloader,直到查找到该Class为止,如果直到Bootstrap Classloader都没找到所需的Class,就由本级的Classloader尝试加载该Class,如果加载失败,则抛出ClassNotFound Exception。

    一般来说,在传统的java应用中,除了一些有特殊目的的应用外,通常会有Bootstrap、Extension和Application三个Classloader,应用中的类大部分都会由一个Application Classloader来加载,即使这些类是分布在不同的jar包里,所以在运行时,同一个应用中,不同jar包就可以很方便地通过这个Application Classloader互相引用彼此的类。

    而osgi则是通过在jar包里添加/META-INF/manifest.mf文件,成为一个bundle(所以bundle本质还是一个jar包),这些bundle就是osgi的模块化的具体表现。在运行时,osgi平台将加载这些bundle,而且每个bundle都使用独立的Classloader来加载其中的类。

    从Classloader的双亲委托模型可以看到某个类并不能被其Classloader的“兄弟”Classloader查找到。所以osgi正是利用这个特点,将每个bundle隔离开来,使bundle之间不能互相存取对方的类,这样就达到了模块间的“隔离”的目的。

    二、osgi如何让模块“暴露”出必要的类?
    模块与模块之间会有“耦合”的需要,也就是互相引用/调用彼此的服务的需要。而需要被其它模块引用/调用的服务部分,就需要“暴露”出去。

    在osgi的语境下,模块是通过Export Packages的方式来输出需“暴露”的Packages(这里如果翻译成“包”,和jar包之类的概念有冲突),具体做法就是在/META-INF/mainifest.mf里添加Export-Packages项,将需要输出的Packages列出来,如果有多项,可以用逗号分隔开来,而且可以对这些Packages指明版本号。

    从Classloader的角度看,Export Package则是将需输出的Packages委托其父Classloader来加载,而通常osgi的实现都是用同一个Classloader作为加载bundle的Classloader的父Classloader,所以委托父Classloader来加载,就可以被其他bundle的classloader“查找”到这些输出的Packages。

   
1
0
分享到:
评论
1 楼 hquxiezk 2012-09-24  
支持一下!!!

相关推荐

    OSGI 开发文档中文的

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

    OSGI 实例eclipse插件开发

    OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序由一系列可独立更新和替换的模块组成,这些模块称为“bundle”。在本实例中,我们将探讨如何利用OSGI技术来开发Eclipse...

    osgi介绍osgi介绍

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

    osgi,林昊写的osgi实战和进阶

    OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为一系列可独立部署、更新和交互的服务。林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合...

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

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

    OSGi入门教程(OSGi Introduce)

    OSGi(Open Services Gateway Initiative)是一种Java平台上的模块化服务框架,它定义了一种标准,使得开发者能够构建可互操作的、动态的、模块化的软件系统。OSGi的核心概念是基于Java的模块化,它的主要目标是为...

    OSGI规范中文版

    OSGi规范中文版是一本全面介绍OSGi技术的书籍,它不仅涵盖了OSGi技术的基础知识,还详细介绍了OSGi的内部结构和工作原理,对于想要深入学习和应用OSGi技术的开发者而言,是一本非常有价值的参考书。 ### OSGi规范的...

    osgi重要文档--osgi核心规范文档,osgi服务文档,osgi-最佳原理与实践(王昊编著,共79页)

    这个压缩包包含了关于OSGI的重要文档,分别是“OSGi R4核心规范文档”、“OSGi服务文档”以及“OSGi-最佳原理与实践”(王昊编著)。下面将详细介绍这些文档所涵盖的关键知识点。 首先,"OSGi R4核心规范文档"是...

    OSGI 入门资料PDF

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和动态的Java应用程序。它为Java开发人员提供了一个框架,使他们能够构建可热插拔的组件,从而实现更灵活、可扩展和可维护的软件系统。在本...

    OSGI原理与最佳实践

    资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...

    tomcat嵌入OSGI容器

    标题中的“tomcat嵌入OSGI容器”是指在Apache Tomcat服务器中集成OSGI(Open Service Gateway Initiative)框架,使得Tomcat能够支持模块化的应用程序部署和管理。OSGI是一种Java平台上的服务导向架构,它允许动态地...

    spring osgi相关资源

    Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的一种技术,它允许在OSGi容器中运行和管理Spring应用。OSGi是一种模块化系统,为Java应用程序提供了动态部署、版本控制和依赖管理的...

    OSGi原理与最佳实践(完整版)&OSGi_in_action

    OSGi(Open Services Gateway Initiative)是一种开放标准,用于创建模块化Java应用程序。它提供了一种动态的、可扩展的框架,使得开发人员可以构建、部署和管理软件组件。本资源包含两本书籍:“OSGi原理与最佳实践...

    Enterprise OSGI in action

    《企业OSGi实战》一书是OSGi企业应用的权威指南,它不仅涵盖了OSGi在企业环境中的应用,还提供了Java企业版(Java EE)与OSGi特性的融合方法。本书详细介绍了模块化编程的重要性,以及OSGi如何强化Java的模块化能力...

    osgi学习笔记(一)

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

    OSGI + Webservice 例子

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和可扩展的Java应用程序。它提供了一种灵活的框架,允许开发人员将应用程序分解为独立的模块,这些模块称为服务。OSGI的核心是它的模块系统...

    OSGI.rar_OSGI eclipse_eclipse osgi_java OSGI_osgi

    在"OSGI.rar_OSGI eclipse_eclipse osgi_java OSGI_osgi"这个压缩包中,我们可以找到"OSGI实战.pdf",这很可能是关于如何在Eclipse环境下使用OSGI进行实际开发的详细指南。该书可能会涵盖以下关键知识点: 1. **...

    利用R-OSGi实现分布式OSGi应用

    利用R-OSGi实现分布式OSGi应用 本文通过介绍传统 OSGi 应用程序及 R-OSGi 的实现方式入手,阐述了 R-OSGi 对于 OSGi 规范的实现方式。然后通过一个简单的功能实现由浅入深地讲述传统 OSGi 和 R-OSGi 上的两种不同...

    OSGI常用通信实例

    OSGI(Open Services Gateway Initiative)是一种开放的标准,用于创建模块化和可动态更新的应用程序和服务。在本实例中,我们看到OSGI与C++的结合,以及如何在Visual Studio 2010和Qt 5.11环境中实现插件间的通信。...

    OSGI进阶.pdf

    OSGi(Open Services Gateway initiative)是一种Java动态模块化系统规范,其核心思想是将应用分割成一系列的 bundles(模块),每个 bundle 都可以独立地安装、启动、停止、更新,而不会影响到其他 bundles。OSGi ...

Global site tag (gtag.js) - Google Analytics