`

OSGi框架-初章-概念

阅读更多

1.OSGI组织架构图:

OSGI架构图

 

2.OSGI架构解决的问题:

 

1.模块分离:(模块之间相互独立)

     在传统的 Java 中有一个“classpath”(类路径),这是一个巨大的类列表,当多个类碰巧使用相同的名称时,总是使用第一个类,而第二个和其他所有的同名类将被忽略。除了这个问题主要还有一个问题就是,整个大的项目为一个整体导致不好维护。一旦一个小的点出现问题,整个项目都需要重新发布,这在时间人力上是极大的浪费。

     正式出于粒度上的考虑,我们不能只是依赖传统的classpath,这样会导致一个大的项目不可分割。为达到模块划分的目的,为每一个模块创建一个类加载器(class loader)。类加载器能够做到仅加载它能够直接识别的类,以及此类识别到的类,需要依赖的一些类。

2.模块之间的依赖及依赖粒度:

     如同一中所述,模块之间相互独立是有必要的,但是只是一味的独立。也存在很大的问题,如,功能的重用性问题,以及在保持模块独立的同时有保持模块的粒度,还有整个系统的功能强大,这个很难做到。所以,模块之间如果没有依赖也是不行的,不依赖和依赖程度过大会走向两个极端。

     对于一个模块而言,有四种依赖粒度:方法级别,类级别,包级别,模块级别。由于模块之间的依赖,会导致出现很长的依赖链(扇出),增加了系统模块间的耦合度。而方法之间的依赖和类之间的依赖太多,不易于管理。从各个角度进行权衡,OSGI最终选择了包之间的依赖,作为模块之间的主要依赖关系,当然模块之间也允许依赖(模块之间不依赖,模块之间的包也无法相互依赖了)。

 

 

3.OSGI架构

1.模块:

      OSGI框架将为这些模块构造实际的运行时实例。它将负责安装模块以及构造类加载器(这些类加载器知道相应模块的内容)。

2.模块之间的依赖:

      OSGI框架中定义两个依赖关系,模块之间的依赖和包之间的依赖,包之间的依赖建立在模块之间的依赖之上。也就是说只有模块之间存在依赖才有包之间的依赖关系。在模块中,会定义需要依赖的模块,需要依赖的包,以及可以被别的模块依赖的包。如果一个模块需要依赖另一个模块的包,必须满足同时依赖这个模块以及这个模块的这个包是公开的。

3.版本控制:

     在一个项目中,除了类可能会重名以外,包和模块都可能重名(一般都是由于版本的问题)。在OSGI中,通过对依赖规则进行版本控制,就是在依赖的时候会加上你所需要依赖的模块和包的版本。当然也可以通过制定版本范围的方式,扩大依赖的版本范围。

4.模块和元数据:

如同上面我们所描述的依赖关系,都需要在模块中得以体现,通过设置一些元数据来对其进行描述,然后通过MANIFEST.MF文件进行存储。模块以jar包方式发布。

5.扩展点功能:

      个人感觉这是OSGI最拉风的技能,其实模块划分和依赖什么的概念早就出现,OSGI只是对其合理实现。而扩展点功能,使得模块化架构能够真正的动态发布。

扩展点功能的原理大致是这样的,某个模块需要某个功能,但是这个功能从职责上由不应该由它自己去实现。另外,这个功能本身具有多态性,例如连接数据库,我们需要连接的数据是可变的,这样的话如果直接依赖某一个特定的连接数据库的功能模块,将变的不合理。

这个时候,此模块定义一个接口,这个接口定义一个虚拟的功能,这个功能就被命名为一个扩展点。其他的模块可以对这个虚拟的功能进行真实的实现,然后当模块需要用到此功能的时候,OSGI会在整个项目中去遍历实现了次扩展点的模块,找到合适的并加载它。

 

分享到:
评论

相关推荐

    osgi-resource-locator-1.0.1-API文档-中文版.zip

    赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...

    spring-osgi-1.2.1-with-dependencies.zip

    spring-osgi-1.2.1-with-dependencies.zip spring-osgi-1.2.1-with-dependencies.zip spring-osgi-1.2.1-with-dependencies.zip

    osgi-resource-locator-1.0.1-API文档-中英对照版.zip

    赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...

    spring-osgi-1.2.0-rc1-with-dependencies.zip

    "spring-osgi-1.2.0-rc1"是Spring OSGi的一个早期版本,"RC1"代表Release Candidate 1,意味着这是正式发布前的最后一个测试版本。在这个版本中,开发者可以期待一些新特性和改进,但同时也可能存在一些未发现的...

    spring-osgi-1.2.0-with-dependencies.zip

    spring-osgi-1.2.0-with-dependencies.zip spring-osgi-1.2.0-with-dependencies.zip spring-osgi-1.2.0-with-dependencies.zip

    killbill-osgi-bundles-lib-slf4j-osgi-0.8.4.zip

    【标题】"killbill-osgi-bundles-lib-slf4j-osgi-0.8.4.zip" 是一个基于OSGi的 Kill Bill 库,其中包含了SLF4J(Simple Logging Facade for Java)的OSGi兼容版本。SLF4J是一个为各种日志框架提供简单抽象的接口,...

    carrot-osgi-anno-scr-make-2.0.1.zip

    《Carrot-OSGi-Annotation-SCR-Make:探索开源项目的OSGI服务组件构建》 在软件开发领域,OSGi(Open Services Gateway Initiative)是一种模块化系统和Java应用程序框架,它使得开发者能够创建可独立更新和重用的...

    spring-osgi-1.2.1-with-dependencies

    本文将围绕“spring-osgi-1.2.1-with-dependencies”这一完整包展开,详细解析其包含的知识点和应用场景。 OSGi是Java平台上的一种模块化系统,它允许开发者将大型应用程序分解为独立的、可交互的组件,这些组件...

    OSGi -- Helloworld 学习记录一

    在"OSGi -- Helloworld 学习记录一"这篇博文中,作者很可能是分享了他/她初次接触并实践OSGi时的经验,通过创建一个简单的HelloWorld示例来介绍这个技术的基础概念。 首先,我们需要理解OSGi的核心特性:模块化。在...

    OSGi.NET-master.zip_c#osgi_osgi_osgi.net github_模块化

    标签"“c#osgi osgi osgi.net_github 模块化" 是对主题的关键词提炼,强调了C#语言、OSGi技术、OSGi.NET实现、代码托管于GitHub的事实,以及框架的主要特性——模块化。 **压缩包子文件的文件名称列表:** 由于只...

    osgi框架开发介绍

    一、OSGi框架基本概念 1. **模块系统**:OSGi的核心是其模块化系统,它通过Bundle(包)来组织代码。每个Bundle都是一个独立的部署单元,包含了类、资源以及元数据,类似于Java的JAR文件,但具有更高级别的封装和...

    OSGI进阶--OSGi开发指南

    OSGi开发文档和实践指南,描述了OSGI的开发流程

    OSGi-lib.rar

    标题"OSGi-lib.rar"暗示这是一个与OSGi相关的库文件集合,可能是为了开发OSGi应用或者研究OSGi技术而准备的资源包。描述中的重复信息"OSGi-lib.rar"可能是由于复制错误,但我们可以推测这个压缩包包含了关于OSGi的...

    osgi-in-action-20090225

    《OSGi实战》是关于Java平台上开放服务网关规范(OSGi)的一本经典书籍,其源代码在"osgi-in-action-20090225"这个压缩包中,提供了丰富的示例和实践内容,便于读者深入理解OSGi技术。下面,我们将详细探讨OSGi的...

    OSGi Modularity - Tutorial

    4. Telnet访问:OSGi控制台可以通过Telnet进行远程访问,这为远程调试或管理OSGi框架提供了便利。 5. 访问Eclipse OSGi控制台:Eclipse环境中的OSGi控制台为开发者提供了额外的便捷方式来管理和调试OSGi模块。 ...

    osgi-SpringDM

    Spring-DM指的是 Spring ...Spring-DM 的主要目的是能够方便地将 Spring 框架和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环境中,利用OSGi框架提供的服务,将应用变得 更加模块化。

    spring-osgi-1.2.0.zip

    标题"spring-osgi-1.2.0.zip"表明这是一个包含Spring OSGi 1.2.0版本的压缩包。这个版本可能包含了Spring框架与OSGi集成的相关库、文档、示例代码等资源,便于开发者在OSGi环境中使用Spring。 描述中提到"spring1.2...

    atlassian-plugins-osgi-2.6.0.jar.zip

    总的来说,Atlassian-plugins-osgi-2.6.0.jar是一个关键的组件,它推动了Atlassian插件系统的发展,提供了更高效、灵活的开发和部署方式。开发者可以利用OSGi的强大功能,创建出适应性强、易于维护的插件,进一步...

    maven-osgi-plugin-launcher-framework-equinox-1.0.15.jar

    maven-osgi-plugin-launcher-framework-equinox-1.0.15.jar

Global site tag (gtag.js) - Google Analytics