• OSGi系列 我理解的OSGi


    估计很多人都接触过路由器,大部分的路由器都支持模块的热插拔,这就意味着可以在路由器运行的状态下给它动态的增加新的功能或者卸载不需要的功能,硬件界的这种热插拔技术一直就是软件界所追求的,而OSGi则使得热插拔技术在软件界成为现实。

    基于OSGi的系统,可以通过安装新的Bundle﹑更新或停止现有的Bundle来实现系统功能的插拔。

    那么到底什么是Bundle呢?Bundle其实就是一个jar文件,这个jar文件和普通的jar文件唯一不同的地方就是META-INF目录下的MANIFEST.MF文件的内容,关于Bundle的所有信息都在MANIFEST.MF中进行描述,也就是说,这些都是Bundle的元数据,包含有象Bundle的名称﹑描述﹑开发商﹑classpath﹑需要导入的包以及输出的包等等。

    Bundle通过实现BundleActivator接口去控制其生命周期,在Activator中编写Bundle启动﹑停止时所需要进行的工作,同时也可以在Activator中发布或者监听框架的事件状态信息,以根据框架的运行状态做出相应的调整。但同时要注意,如果框架是被类似Ctrl+C等方式强行终止的话,那么Activator中的stop方法是不会被调用的。

    在OSGi框架中对于每个Bundle采用的是独立的classloader机制,这也就意味着不能采用传统的如引用其他Bundle的工程来实现Bundle间的协作了,那么在OSGi框架中Bundle之间是怎样协作的呢?在OSGi框架中对于每个Bundle可以定义输出的包以及引用的包,这样在Bundle间就可以共享包中的类了。尽管这样也可以实现简单的Bundle的协作,但在OSGi框架中更加推荐的是采用Service的方式。Service-Oriented的概念大家都接触多了,OSGi框架也同样是如此的,每个Bundle可以通过BundleContext注册对外提供的服务,同时也可以通过BundleContext来获得需要引用的服务,采用Service-Oriented的方式可以使得对外提供的服务能够更加的封闭,不需要为了使用别的Bundle提供的Service而做环境依赖等的设置。

  • 相关阅读:
    Android 的快速增长让一些开发人员担忧 狼人:
    Android程序开发入门教程 狼人:
    2010:Android 商机之年 狼人:
    控制力的较量 Android上的博弈 狼人:
    深度解析Windows Phone 7 开发 狼人:
    图解iPhone开发入门教程 狼人:
    用Android LiveCD体验Android 操作系统的魅力 狼人:
    Android 教程之实现动作感应技术 狼人:
    Android版多功能日历,欢迎大家测试 狼人:
    iPhone、Windows Mobile、Symbian、Android移动开发前景分析 狼人:
  • 原文地址:https://www.cnblogs.com/eastson/p/2500958.html
Copyright © 2020-2023  润新知