1.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会在整个项目中去遍历实现了次扩展点的模块,找到合适的并加载它。
分享到:
相关推荐
赠送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
赠送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"是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
【标题】"killbill-osgi-bundles-lib-slf4j-osgi-0.8.4.zip" 是一个基于OSGi的 Kill Bill 库,其中包含了SLF4J(Simple Logging Facade for Java)的OSGi兼容版本。SLF4J是一个为各种日志框架提供简单抽象的接口,...
《Carrot-OSGi-Annotation-SCR-Make:探索开源项目的OSGI服务组件构建》 在软件开发领域,OSGi(Open Services Gateway Initiative)是一种模块化系统和Java应用程序框架,它使得开发者能够创建可独立更新和重用的...
本文将围绕“spring-osgi-1.2.1-with-dependencies”这一完整包展开,详细解析其包含的知识点和应用场景。 OSGi是Java平台上的一种模块化系统,它允许开发者将大型应用程序分解为独立的、可交互的组件,这些组件...
在"OSGi -- Helloworld 学习记录一"这篇博文中,作者很可能是分享了他/她初次接触并实践OSGi时的经验,通过创建一个简单的HelloWorld示例来介绍这个技术的基础概念。 首先,我们需要理解OSGi的核心特性:模块化。在...
标签"“c#osgi osgi osgi.net_github 模块化" 是对主题的关键词提炼,强调了C#语言、OSGi技术、OSGi.NET实现、代码托管于GitHub的事实,以及框架的主要特性——模块化。 **压缩包子文件的文件名称列表:** 由于只...
一、OSGi框架基本概念 1. **模块系统**:OSGi的核心是其模块化系统,它通过Bundle(包)来组织代码。每个Bundle都是一个独立的部署单元,包含了类、资源以及元数据,类似于Java的JAR文件,但具有更高级别的封装和...
OSGi开发文档和实践指南,描述了OSGI的开发流程
标题"OSGi-lib.rar"暗示这是一个与OSGi相关的库文件集合,可能是为了开发OSGi应用或者研究OSGi技术而准备的资源包。描述中的重复信息"OSGi-lib.rar"可能是由于复制错误,但我们可以推测这个压缩包包含了关于OSGi的...
《OSGi实战》是关于Java平台上开放服务网关规范(OSGi)的一本经典书籍,其源代码在"osgi-in-action-20090225"这个压缩包中,提供了丰富的示例和实践内容,便于读者深入理解OSGi技术。下面,我们将详细探讨OSGi的...
4. Telnet访问:OSGi控制台可以通过Telnet进行远程访问,这为远程调试或管理OSGi框架提供了便利。 5. 访问Eclipse OSGi控制台:Eclipse环境中的OSGi控制台为开发者提供了额外的便捷方式来管理和调试OSGi模块。 ...
Spring-DM指的是 Spring ...Spring-DM 的主要目的是能够方便地将 Spring 框架和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环境中,利用OSGi框架提供的服务,将应用变得 更加模块化。
标题"spring-osgi-1.2.0.zip"表明这是一个包含Spring OSGi 1.2.0版本的压缩包。这个版本可能包含了Spring框架与OSGi集成的相关库、文档、示例代码等资源,便于开发者在OSGi环境中使用Spring。 描述中提到"spring1.2...
总的来说,Atlassian-plugins-osgi-2.6.0.jar是一个关键的组件,它推动了Atlassian插件系统的发展,提供了更高效、灵活的开发和部署方式。开发者可以利用OSGi的强大功能,创建出适应性强、易于维护的插件,进一步...
maven-osgi-plugin-launcher-framework-equinox-1.0.15.jar