zoukankan      html  css  js  c++  java
  • 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而做环境依赖等的设置。

  • 相关阅读:
    Sublime_text3怎么运行php代码
    (转)解决png图片在IE6下不透明的方法
    CSS+JS下拉菜单和纯CSS下拉菜单
    笔记本开了WIFI之后只能上QQ,上不了网页的解决方法
    常见的浏览器兼容问题
    学习正则表达式
    (转)各种排序比较 直观动画
    find job
    mongodb 索引,全文索引与唯一索引
    再谈闭包,几个例子分析
  • 原文地址:https://www.cnblogs.com/eastson/p/2500958.html
Copyright © 2011-2022 走看看