- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
探索OSGi框架的组件运行机制.
探索 OSGi 框架的组件运行机制
级别: 初级
王 珏 (juewang@), 软件工程师, IBM
2008 年 7 月 24 日
OSGi 框架为基于 Java 的组件开发提供了一套通用的和标准的解决方案,通过 OSGi 框架可以轻松实现组件信息的隐藏和共享。本文介绍了 OSGi 框架中的组件(Bundle)的运行机制,并结合实际示例加以说明,读者可以进一步深入了解 OSGi 框架的基本原理,并解决实际开发工作中遇到的类似问题。
在 目前的 Java 开发平台中,对于组件开发过程,比如打包、部署和验证等,并没有一个统一的标准。正因如此,许多 Java 项目,例如 JBoss 和 Net Beans,都拥有一套自定义的组件开发规范和框架,但是实际上这些解决方案都是基于为组件分配独立的类加载器 (Class Loader) 的思想。 OSGi 框架为基于 Java 的组件开发提供了一套通用的和标准的解决方案,并已经成为事实上的工业标准。
OSGi 组件框架
在 OSGi 框架中,组件被称为 Bundle,它是由一些提供 Bundle 自身功能的资源 ( 如 Java 类文件、配置文件等 )、MANIFEST.MF 文件和其它资源文件构成。在运行时环境中,每个 Bundle 都有一个独立的 Class Loader,Bundle 之间通过不同的类加载器和在 MANIFEST.MF 文件中定义的包约束条件就可以轻松实现包级别的资源隐藏和共享,从而实现基于组件方式的开发和运行。 Class Loader 是实现这种运行方式的关键机制,每个 Bundle 的 Class Loader 必须在此 Bundle 得到正确的解析 ( Resolving ) 之后,再由 OSGi 框架创建。只有当一个 Bundle 中的所有包约束条件都满足时,它才被正确解析完毕。
Bundle 解析
Bundle 的解析是通过分析定义在 MANIFEST.MF 文件中的元数据 ( 主要定义了包约束条件 ),查找与包约束条件相匹配的 Bundle 并建立关联关系的过程。 MANIFEST.MF 文件中的包约束条件主要是通过 Import-Package、DynamicImport-Package、Export-Package 和 Require-Bundle 这四种表达方式来实现。下面简单介绍一下它们:
Import-Package:定义需要导入的包。默认是所有需导入的包必须都能够找到相应的导出 Bundle (Exporter),否则解析失败。
Export-Package:定义导出的包。在一个 Bundle 里面,一个包的导出定义并不意味着相应的包导入定义,而是这些类资源会在 Bundle 自身的类路径里面查找和加载。
Require-Bundle:定义依赖的 Bundle 。
DynamicImport-Package:定义需要动态导入的包。这部分定义没有在 Bundle 解析过程中使用,而是在运行时动态解析并加载共享包。
在 Bundle 得到正确解析后,OSGi 框架将会生成此 Bundle 的依赖关系表。在实际运行过程中,框架就可以通过此关系表找到 Bundle 依赖的外部 Class Loader,从而实现外部类资源的加载和运行 hg 。 Bundle 的关系图可以在 OSGi 的控制台中通过内部命令" bundle "来查看,如下图所示:
图 1. Bundle 依赖关系表 ( 点击这里 查看清晰大图。)
Bundle 运行
Bundle 的运行主要依靠于 OSGi 框架为其创建的类加载器(Class Loader),加载器负责查找和加载 Bundle 自身或所依赖的类资源。 ClassLoader 之间的依赖关系构成了一个有向图,如下图所示:
图 2. 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.bootde
您可能关注的文档
- 基础教育教学成果奖励申报表..doc
- 探析室内空间绿色设计及绿化设计..doc
- 基础护理工作流程图..doc
- 探析小型微型企业融资的税收扶持政策..doc
- 探析影响公路工程质量因素..doc
- 基础班教材(增加部分)..doc
- 探析我国煤矿安全生产现状与问题..doc
- 探析营业税改增值税对企业税收影响..doc
- 探析室内设计中的新中式风格..doc
- 探析蒙古族舞蹈在不同时期的创作风格..doc
- 第12课 大一统王朝的巩固 课件(20张ppt).pptx
- 第17课 君主立宪制的英国 课件.pptx
- 第6课 戊戌变法 课件(22张ppt).pptx
- 第三章 物态变化 第2节_熔化和凝固_课件 (共46张ppt) 人教版(2024) 八年级上册.pptx
- 第三章 物态变化 第5节_跨学科实践:探索厨房中的物态变化问题_课件 (共28张ppt) 人教版(2024) 八年级上册.pptx
- 2025年山东省中考英语一轮复习外研版九年级上册.教材核心考点精讲精练(61页,含答案).docx
- 2025年山东省中考英语一轮复习(鲁教版)教材核心讲练六年级上册(24页,含答案).docx
- 第12课近代战争与西方文化的扩张 课件(共48张ppt)1.pptx
- 第11课 西汉建立和“文景之治” 课件(共17张ppt)1.pptx
- 唱歌 跳绳课件(共15张ppt内嵌音频)人音版(简谱)(2024)音乐一年级上册第三单元 快乐的一天1.pptx
文档评论(0)