概述什么是OSGi框架
现 在越来越多的Java开发人员在谈论OSGi是有其道理的。在几年前上学的时候我进行了比较多的Eclipse插件开发,当时就亲身感觉到Eclipse 插件体系的灵活与强大,而该体系与OSGi也可谓一脉相承、同气连枝。最近打算重新系统的研究一下OSGi,一边学习一边写一个OSGi探秘系列作为总 结,和大家分享,也请大家多给评价和建议。
在这一篇里面,我想先回答一个基本的问题:什么是OSGi?其实如果要很好地回答这个问题,也许先明白是什么导致了OSGi的产生和发展会有些帮助。
相信每个Java程序员都知道Classpath是什么。Java的类加载 器(Classloader)是一种分层结构,如下图所示,分为引导类加载器(Bootstrap Class Loader),扩展类加载器(Extension Class Loader),系统类加载器(System Class Loader)以及用户定义的类加载器(User-defined Class Loader)。引导类加载器在JVM时负责加载rt.jar里面的类,扩展类加载器负责加载在扩展目录下的jar文件中的类,系统类加载器则在 Classpath上面搜索类加载器,用户定义的类加载器则从用户指定的路径(比如一个网络URI)加载类。在该类加载体系中,一个类加载器总是先去上层 类加载器加载类,一层一层迭代,当无法找到需要的类时在自己加载。
在这种类加载机制中,存在以下几个问题:1)类版本冲突:当类路径上存在同一个类的不同版本时,如果类加载器找到一个版本,则不再搜索加载下一个版
本;2)无法确定jar之间的依赖关系:现有的JAR标准中缺乏对与Jar文件之间依赖关系的定义支持,因此只有在运行时间无法找到所需的类时,才会打出
java.lang.ClassNotFoundException,但这通常不能有效帮助开发人员解决问题;3)信息隐藏:如果一个jar在类路径上并
且被加载,那么所有该jar中的公共类(public
class)都会被加载,无法避免某些类被隐藏从而不被加载。尽管在J2EE中改进了类加载机制,可以支持以war或者ear应用为单元进行加载,但是这
些问题还是没有被很好地解决,并且热部署效果让人忧心。
OSGi就是为了克服这些问题而生,却又不局限与这些问题,对Java开发人员而言的确是好多顿大餐。OSGi是一个动态的Java模块(Module)
系统,它规定了如何定义一个Module以及这些模块之间如何交互。每个OSGi的Java模块被称为一个bundle。每个bundle都有自己的类路
径,可以精确规定哪些Java包和类可以被导出,需要导入哪些其它bundle的哪些类和包,并从而指明bundle之间的依赖关系。另外bundle可
以被在运行时间安装,更新,卸载并且不影响整个应用。通过这种方式,分层的类加载机制变成了网状的类加载机制。在应用程序启动之前,OSGi就可以检测出
来是否所有的依赖关系被满足,并在不满足时精确报出是哪些依赖关系没被满足。
当然,OSGi不止这些。我会在后续的系列文章中系统介绍什么是OSGi以及其内部的秘密。
概述什么是OSGi框架的更多相关文章
- Eclipse插件开发之基础篇(4) OSGi框架
转载出处:http://www.cnblogs.com/liuzhuo. 1. 什么是OSGi框架 OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环 ...
- OSGI框架学习
OSGI框架三个重要概念 OSGi框架是根据OSGi规范中定义的三个概念层设计的:模块.模块生命周期.服务. 模块层定义了OSGi模块的概念(bundle,即包含一个元数据MANIFEST.MF的JA ...
- Springboot Application 集成 OSGI 框架开发
内容来源:https://www.ibm.com/developerworks/cn/java/j-springboot-application-integrated-osgi-framework-d ...
- 将web容器置于OSGi框架下进行web应用的开发
将web容器置于OSGi框架下,其实就是将web容器做成OSGi支持的Bundle,再安装到OSGi框架中,这里使用的是Jetty容器. 1.创建一个Eclipse插件项目,在此插件下创建一个WebR ...
- OSGI框架—HelloWorld小实例
OSGi(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范.OSGi一方面指维护OSGi规范的OSGI官方联盟,另一方面指的是该组织维护的基于 ...
- [转]Eclipse插件开发之基础篇(4) OSGi框架
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_1.html 1. 什么是OSGi框架 OSGi(O ...
- OSGI框架
面向Java的动态模型系统 OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能.为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方. ...
- 想要将我们的OSGi框架中的批量日志单独打印到文件中
我们的日志虽然没有直接依赖logback,但遗憾的是也没有使用slf4j,而是使用了Apache Common-Logging slf4j 和 common-logging有什么区别呢 common- ...
- OSGI框架中通过BundleContext对象对服务的注册与引用
BundleActivator 在每个Bundle新建时都会默认生成Activator类,该类实现了BundleActivator类,实现了其start()和stop()两个方法 BundleCont ...
随机推荐
- Surrounded Regions
Surrounded Regions Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A ...
- NAND的一些相关概念
chipsize:整个NAND FLASH 的大小,单位为MB pagesize:一页的大小,单位为字节Byte erasesize:最小擦除大小,单位为字节Byte NAND写操作基本单位是页, ...
- Apache Spark探秘:三种分布式部署方式比较
转自:链接地址: http://dongxicheng.org/framework-on-yarn/apache-spark-comparing-three-deploying-ways/ 目 ...
- Matlab中sort函数的使用
主要看大神们如何使用,先模仿. [~,y] = sort(v),如果v是向量,那么y返回的是v中的下标(不好表达),看下面的,发现y是是下标,对应的是c中元素*(由小到大排序).使用c(y)就得到了由 ...
- 使用函数的递归调用来解决Hanoi(汉诺)塔问题。
#include<stdio.h> void hanoi(int n, char x, char y, char z); void move(char x, char y); int ti ...
- MyEclipse 简单快捷键
1) Ctrl+/ 注释当前行,再按则取消注释 2) Ctrl+M切换窗口的大小 3) Ctrl+Shift+O作用是缺少的Import语句被加入,多余的Import语句被删除. 4)Alt+/ 代 ...
- LoadAssetAtPath 与 Load 的区别
一.官方的文档 Resources.LoadAssetAtPath Returns a resource at an asset path (Editor Only). This function a ...
- unity与Android相互调用
原地址:http://www.cnblogs.com/ayanmw/p/3727782.html 现在unity 导出的android客户端需要调用 Android 的支付SDK,但是unity与an ...
- Unity3D开发之“获取IOS设备所在的国家代码"
原地址:http://dong2008hong.blog.163.com/blog/static/469688272014021025578/ 在前一段时间游戏开发中需要实现获取IOS设备所在的国家代 ...
- Spring Boot 快速入门
Spring Boot 快速入门 http://blog.csdn.net/xiaoyu411502/article/details/47864969 今天给大家介绍一下Spring Boot MVC ...