首先让我们来查看OSGI的框架图:
除去OS Hardware和JVM,还有Class Loading(类加载)、Life Cycle(生命周期管理)、Service Registery(服务注册)、Service(规范服务)、Security(安全层)。
Class Loading(类加载机制):Bundle的运行主要依靠于OSGi 框架为其创建的类加载器(Class Loader),加载器负责查找和加载 Bundle 自身或所依赖的类资源。Class Loader 能加载的所有类的集合构成了 Bundle 的类空间 (Class Space) 。类空间包含的类资源主要来自于以下几个方面:
- 父 Class Loader 可加载的类集合;
- Import-Package 定义的依赖的包;
- Require-Bundle 定义的依赖的 Bundle 的类集合;
- Bundle 自身的类集合,通常在 Bundle-Classpath 中定义;
- 隶属于 Bundle 的 Fragment 类集合。
在实际运行环境中,Bundle 的 Class Loader 根据如下规则去搜索类资源。规则简要介绍如下:
- 如类资源属于 java.* 包,则将加载请求委托给父加载器;
- 如类资源定义在 OSGi 框架中启动委托列表(org.osgi.framework.bootdelegation)中,则将加载请求委托给父加载器;
- 如类资源属于在 Import-Package 中定义的包,则框架通过 Class Loader 依赖关系图找到导出此包的 Bundle 的 Class Loader,并将加载请求委托给此 Class Loader ;
- 如类资源属于在 Require-Bundle 中定义的 Bundle,则框架通过 Class Loader 依赖关系图找到此 Bundle 的 Class Loader,将加载请求委托给此 Class Loader ;
- Bundle 搜索自己的类资源 ( 包括 Bundle-Classpath 里面定义的类路径和属于 Bundle 的 Fragment 的类资源);
- 若类在 DynamicImport-Package 中定义,则开始尝试在运行环境中寻找符合条件的 Bundle 。
如果在经过上面一系列步骤后,仍然没有正确地加载到类资源,则 OSGi 框架会向外抛出类未 发现异常。
Life Cycle(生命周期管理):用于动态管理Bundle的生命周期,可以动态安装、启动、停止、更新和卸载这些Bundle。Bundle依赖于模块层的CLASS载入但是添加了为运行时管理的API。生命周期管理层引入了应用程序通常不具有的动态性。有扩展的依赖机制用来保证环境的正确运行。
Service Registery(服务注册):服务注册表为bundles的动态特征提供了协作模型。Bundles之间可以使用传统的类共享机制实现协作,但是类共享机制对于动态安装和卸载的模块来说无法提供一致性,因此服务注册表为bundles之间共享对象提供了一致的模型。许多服务与服务器端对象相似,如Http服务器,其他的服务代表这真是世界中的一个对象,例如身边的蓝牙电话。这个服务模块提供了完整安全保障。该服务安全模块使用了一个很聪明的方式来保障bundles之间通信安全。
Service(规范服务):服务层定义了一个动态的协作模型,服务模型是定义在模块(bundle)的基础上的。Bundle可以动态的发布,查找service,并且当该服务的状态(生命周期)改变时,更够发出通知,这样所有对该service关心的bundle,可以通过注册监听器的方式,接收消息,做后续的处理。
下面是它的模型:
下面简单的加以说明:
在OSGi平台中,各个模块(bundle)可以提供服务,并且可以引用其他的服务,而这些服务都有统一的管理注册中心(ServiceRegistry),该注册中心由框架提供,运行在框架之上的。
这样的一些服务都是归bundle所有并且运行在它的bundle上的;所以可以通过bundle的bundlecontext把这些服务注册在ServiceRegistry中,以便能够由框架统一管理,并且能够被其他的bundle所引用。这样当bundle的生命周期发生变化的时候,如stop,那么就能够通过框架,来自动的卸载提供的服务,并且解决好bundle之间的服务引用依赖关系。
服务对象serviceobject,类似与pojo,调用它的接口,可以提供服务。这样的一个serviceobject可以实现ServiceFactory接口,也可以实现其他的接口。如果实现了ServiceFactory,那么对于每一个bundle对服务的引用来说,都是一个通过ServiceFactory创建新的实例。否则所引用的服务对象就是通过bundlecontext注册的绑定在ServiceRegistration 的原始对象。
ServiceReference类似于服务对象的句柄,通过它可以查找到真实的服务对象。其实它只是包含了对对象的描述,如该服务是位于哪一个bundle上的,该服务的bundle是否已经停 止,以及服务的描述等等。
对于引用该服务的bundle来说,只是保存的service的句柄,真实的service对象可以不存在,这样的模式被广泛应用在动态的环境中。
ServiceListener可以通过BundleContext注册在框价ServiceRegistry中,这样在服务的生命周期改变时候,可以接收消息,每个bundle可以在自己的lisitener里,做出相应的处理,如释放响应的资源等等。
BundleContext提供了注册服务,注册服务,框架,bundle的监听器,查找服务的统一入口。
Security(安全层):安全机制是基于Java 和Java2的安全模型,这个语言的设计减少很多可能的安全漏洞,比如,病毒使用缓冲区溢出就不可能了。访问限制使得对其他程序员代码的可视性受到了限制。OSGi通过私有的class扩从了这个模型。一个在标准Java环境里面无法达到的机制。Java2 安全模型提供了一种合理的模型来检查代码和资源的访问。OSGi 添加了完整的动态管理权限的机制。
分享到:
相关推荐
OSGi(Open Services Gateway Initiative)框架是一个用于Java应用程序模块化的开放标准。它的核心特性是将应用程序分解为可独立部署、动态组合的模块,这些模块称为服务。OSGi框架的引入,旨在解决Java应用程序的...
四大OSGI框架最新技术对比分析 一、Apache Felix ### 1.1 概述 Apache Felix 是一个致力于实现 OSGi R4 Service Platform 和其他与 OSGi 相关的技术的社区项目,遵循 Apache 许可。最初,OSGi 规范的目标是嵌入式...
探索 OSGi 框架的组件运行机制探索 OSGi 框架的组件运行机制
### OSGi框架详解与首个HelloWorld项目实践 #### OSGi框架概述 OSGi(Open Service Gateway Initiative),作为一个强大的Java动态模块化平台,它的设计理念是实现真正意义上的模块化及动态化设计。这一理念体现在...
标题"基于osgi框架实战源码"揭示了本次学习的主题,即OSGi框架在实际项目中的应用。"osgi实战源码"这一描述进一步强调了这是一份可以动手实践的源代码,它以一个具体的购物车案例为背景,展示了如何在项目中运用OSGi...
资源名称:OSGi相关框架学习资料资源目录:【】EclipseRCP与SpringOSGi技术详解与最佳实践【】osgi.core.javadoc-5.0.0【】OSGi_R4_Spec_zh_cn_origional【】OSGi原理与最佳实践【】OSGi原理与最佳实践的源码【】...
在IT行业中,OSGi(Open Services Gateway Initiative)框架是一个用于构建模块化Java应用程序的强大工具,它允许开发者将应用分解为可独立更新和管理的小模块。本文将深入探讨基于OSGi框架的客户端接口设计,以及...
### Linux 下 OSGi 框架实现笔记 #### 一、Linux 环境配置与准备 在开始实现 Linux 下的 OSGi 框架之前,首先需要确保已经正确配置了 Linux 的开发环境。 ##### 1. Linux 开发环境配置 **定义**:Linux 是一个...
本文档主要针对OSGi.NET模块化框架使用进行了描述 OSGi.NET框架是一个参照了OSGi规范的模块化管理框架。框架为应用程序(组件(bundle))提供了一个标准环境。整个框架可以划分为一些层次: 1.运行环境 2.模块...
标题"OSGI入门和例子"意味着我们将探讨OSGI的基本概念以及如何通过实例来学习和理解这个框架。下面,我们将深入讨论OSGI的关键知识点: 1. **模块系统**:OSGI的核心是模块化,它定义了一种基于Java导出和导入包的...
【基于OSGi框架的网络操作工单管理系统设计与实现】 随着网络信息技术的飞速发展,网络规模持续扩大,网络设备的数量呈指数级增长,对网络操作管理的需求也随之提高。现有的网络管理系统虽然具备丰富的管理功能,但...
该界面框架是在ModernUI(http://mui.codeplex.com/)基础上开发的非常现代、漂亮的通用界面框架,通过简单的配置,您可以将自定义的功能注册到页面。它支持三级菜单、支持更换皮肤和字体调整。 使用的OSGi.NET插件 ...
带有嵌入式OSGI的Spring Boot 这是一个嵌入了Felix OSGI框架的示例Spring Boot项目。 其他项目是API(接口和模型类)及其实现。 Spring Boot应用程序将这些程序包作为OSGI框架的额外程序包公开(以便能够使用公开的...
其后进入OSGi实战,结合实例讲解如何基于OSGi框架编写模块化、动态化的各种Java应用;最后对0SGi知识进行深入讲解,通过对0SGi规范和实现框架(Equinox、Felix、Spring—DM和Apache CXF)的分析,以及最佳实践的介绍,...
OSGi的入门资料,网上找的,初探OSGi 的全文
支持模块化的动态部署基于OSGi而构建的系统可以以模块化的方式(例如jar文件等)动态地部署至框架中,从而增加、扩展或改变系统的功能。要以模块化的方式部署到OSGi中,必须遵循OSGi的规范要求, 支持模块化的动态...
OSGi(Open Services Gateway Initiative)框架是一种用于创建和管理模块化Java应用程序的平台,它允许在运行时动态地安装、卸载和更新软件模块,即所谓的"bundles"。基于OSGi框架的网络操作工单管理系统设计与实现...