当前位置:首页 > 体育

bundle OSGi模块化框架详解

OSGi模块化框架是一个很早就出现的插件框架。Eclipse最早以它而闻名,但最近几年它并不太受欢迎,尽管OSGi已经发布了版本1到5。目前最常用的是基于Equinox的OSGi实现,这也是Eclipse的核心。弹簧动态模块也基于Equinox。OSGi框架为java系统提供了一个通用的容器,这个系统中的包可以在不停止系统的情况下安装和卸载。OSGi是目前Java中唯一的模块化动态规范。OSGi联盟研究模块化已经很多年了,所以OSGi规范对于模块的物理隔离、模块的交互和多版本有一个完善的机制,它也已经被几乎所有的应用服务器厂商或开源社区所认可,但是到目前为止还没有被JAVA包含在语言级别中(有待观察)。OSGi的突出特点包括:

模块可以在不停止服务的情况下动态加载、更新和卸载

实现系统的模块化和版本化,允许多个版本的bundule同时服务

服务模型允许模块/插件相互依赖但松散耦合,使得共享服务更加容易

OSGi在JVM上运行,其体系结构图如下图所示:

下图对此进行了更详细的解释:

OSGi Service

服务——服务是在它实现的一个或多个接口和属性映射下公开的对象实例。简而言之,服务模型允许每个包共享一组服务,其他包可以调用这些接口的服务。OSGi束就是这么称呼的。服务可用于:

将功能从一个包导出到其他包

从其他包中导入功能

为来自其他包的事件注册侦听器

向其他OSGi捆绑包公开外部设备,如UPnP设备甚至硬件。参见《加拿大日报》

将运行在OSGI中的java代码暴露给外部网络,例如通过UPnP或protocols。

捆绑配置,使用配置管理器

实际上,接口和实现通常是分开的。接口放在一个包中。实现(服务)放在另一个捆绑包中,类似下图,捆绑包a和b是服务,它们的接口放在捆绑包C中:

或者提供一个其中定义了扩展接口的jar包,然后规定新的扩展捆绑包必须实现jar包中定义的接口。实现图如下(OsgiCommand接口在扩展点jar包中定义,新捆绑包必须包含):

捆绑服务之间的交换模式和注册模式:

通过bundleContext.registerService注册服务,然后通过bundleContext获取服务。getServiceReference(不推荐)

使用监听器listeners

ServiceListener和ServiceTracker提供对捆绑包和服务的动态监控,ServiceTracker可以动态监控未来的捆绑包和服务(通常推荐使用OSGi版本2提供的ServiceTracker)

用声明式服务(OSGiDS,或者Spring Dynamic Module(DM))(OSGi 4版)的方法,推荐!)

通过ServiceTracker查询或侦听服务注册和注销的第二个示例代码:

package com . IBM . OSG . example . mygetservice;

import org . OSGi . framework . Bundleactivator;

import org . OSGi . framework . bundlecontext;

import org . OSGi . util . tracker . ServiCe tracker;

import com . IBM . OSG . example . mt service . MyTestServiCe;

公共类MyBundleActivator

实现BundleActivator,可运行

{

private布尔值done = false

私有服务跟踪器测试服务跟踪器;

//捆绑激活器启动方法

公共void start(Bundelecontext上下文)

{

/*这里我们初始化并打开我们的服务跟踪器。

它将跟踪在下注册的任何服务

" com . IBM . OSG . example . mt service . MyTestServiCe "

界面。

*/

testServiceTracker =

新的服务跟踪器(上下文,

" com . IBM . OSG . example . mt service . MyTestServiCe ",

null);

testservicetracker . open();

//这里我们开始一个线程,它将继续

//使用我们的服务,直到

//捆绑停止。

线程t =新线程(this);

t . SetName(" my getservice thread ");

t . start();

}

/*捆绑激活器停止方法-我们到此为止

线程并关闭

ServiceTracker*/

公共无效停止(BundleContext上下文)

{

done = true

testservicetracker . close();

}

//这里有一个使用服务的方法

//我们正在追踪。首先我们得到

//服务

//从跟踪器,然后我们调用它的printMessage

//方法。

public void useService(字符串消息){

我的测试服务测试服务=(我的测试服务)

testservicetracker . getservice();

if( testService!= null)

{

//如果服务可用,请使用它。

testService.printMessage(消息);

}

else{

//如果服务不可用,则执行可接受的操作。

//在这里,我们只需打印消息以进行标准化并指明服务

//不可用。

System.out.println("没有可用的MyTestService消息);

}

}

//只是继续使用测试服务

//直到设置了done标志。

public void run(){

int I = 0;

done = false

while(!完成){

useService("来自测试的消息"+i++);

尝试{

thread . sleep(1000);

}

catch(断续异常)

}

}

}

}

OSGi简单起步

从Eclipse创建OSGi包非常简单

Slideshare: OSGi理论与实战

OSGi动态加载删除bundle

使用侦听器

ServiceListener和ServiceTracker提供对捆绑包和服务的动态监控,ServiceTracker可以动态监控未来的捆绑包和服务(ServiceTracker由OSGi第2版提供,一般推荐)。在这里我推荐一个建筑学习交流小组。交流学习组号:948368769将分享一些资深架构师录制的视频:Spring、MyBatis、Netty源代码分析、高并发、高性能原理、分布式和微服务架构、JVM性能优化、分布式架构等等,成为架构师必备的知识体系。你也可以获得免费的学习资源,目前受益匪浅

用声明式服务(OSGiDS,或者Spring Dynamic Module(DM))(OSGi 4版)的方法,推荐!)

具体实施:

有了DS,

有了Spring DM,

分布式OSGi(Distributed OSGi)

OSGi集装箱可以装几千箱,但是如何处理几十万箱呢?怎么能像EJB3一样分布式、可移植?有一个OSGi的子项目(分布式OSGi。

上图是一个演示,两个分布式的OSGi容器,都部署了Greeter接口包,基于分布式的OSGi实现,可以实现分布式调用OSGi服务。OSGi(分布式OSGi也可以与RESTful服务集成(JAX-RS/JSR-339)。如何管理分布式OSGi中的几十万个捆绑包是一个问题,如何启动和停止,启动顺序是什么?可管理性是个问题,ACE项目试图解决。

DOSGi的原理(分发提供商为OSGi服务创建Endpoint,这样就可以在OSGi集装箱外访问这些服务,另一端创建代理;此外,还有一位听众聆听OSGi服务的创建、开始和停止等。):

分布式OSGi与ZooKeeper

ZooKeeper是Hadoop的一个子项目,Hadoop是一个可靠的大规模分布式系统的协调系统。其功能包括配置维护、名称服务、分布式同步、群组服务等。ZooKeeper的目标是封装复杂易错的关键服务,为用户提供易用的界面和高性能稳定功能的系统。

分布式OSGi(分布式OSGi)在发现中使用动物园管理员。所谓的发现模块用于发现和监听分布式远程可用端点。由zookeeper分配的发现的体系结构图:

参考:DOSGi使用ZooKeeper服务器的安装和演示

1.《bundle OSGi模块化框架详解》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《bundle OSGi模块化框架详解》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/tiyu/817590.html

上一篇

江南布衣jnby JNBY江南布衣女装2017春夏新品秀场直击

下一篇

章莹颖案嫌犯出庭新闻 章莹颖案嫌犯谋杀罪名成立 父亲:我们的愿望永远都是带莹颖回家

北京中关村地图 北京将推出“中关村科学城双创大数据地图” 动态展示双创建设发展态势

北京中关村地图 北京将推出“中关村科学城双创大数据地图” 动态展示双创建设发展态势

创业公司有哪些?风险投资机构有哪些?R&D平台上有哪些最新的R&D项目?这些与双创相关的元素会整合在一张海淀的电子地图上。记者从今天下午举行的“创造中国”北京海淀站暨京津冀双创示范基地联盟推介会上获悉,在中关村科技园海淀区,将正式推出“中关村科技城双创大数据地图”,...

龙飞船返航 龙飞船返航:这是一个重要里程碑,也可能是它面临的最大挑战

据《The Verge》报道,SpaceX“载人龙”飞船的首次试飞将于美国当地时间8日结束,届时飞船将脱离国际空间站空并尝试跳伞降落大西洋。这是这次试飞任务的最后一个重要里程碑,也可能是载人飞船面临的最大挑战。资料图 龙飞船升空 新华社/美联载人龙飞船需要证明其新颖...

睡不着图片带字 晚安睡觉动态带字图片

睡不着图片带字 晚安睡觉动态带字图片

1.今晚,你会梦见一朵花,花瓣是:安心,雄蕊是:睡觉,花是:平安。花语是:祝你做个好梦。我会亲手折起这朵花,在夜晚的微风中,传递给你甜蜜的梦。晚安!...

娱乐圈男神 娱乐圈男神的择偶标准,难怪你只是一个小粉丝

  • 娱乐圈男神 娱乐圈男神的择偶标准,难怪你只是一个小粉丝
  • 娱乐圈男神 娱乐圈男神的择偶标准,难怪你只是一个小粉丝
  • 娱乐圈男神 娱乐圈男神的择偶标准,难怪你只是一个小粉丝
中国不惧怕美欧欺凌 又是一个辛丑年 西方列强再也不敢欺负中国了

中国不惧怕美欧欺凌 又是一个辛丑年 西方列强再也不敢欺负中国了

大年初一,北京迎来了又一个黎明,顺着我们附近的长安街向东遥望,除了曙色中高高耸立的528米的北京尊,便是遥远东方天际线那刚刚露出的一抹鱼肚白,它宣告:一个新的辛丑年的第一天开始了。“辛丑”,多么遥远,60年才遇到一次,但对每一个中国人来说,这是多么熟悉、多么沉重而难忘的两个字眼,大凡稍微有一点历史常识的中国人,说到辛丑,就会立即想到与此相关的另外四个字:《辛丑条约》。那是距今120年前,也是一个辛...

北京机场航班动态 首都机场昨日取消航班125架次 今日进行除冰工作请旅客注意航班动态

今晨7时30分,记者获悉,首都机场从昨天下午到午夜有降雪,持续时间较长,累计降雪为小雪。首都机场部分出入境航班延误取消。首都机场正在进行除冰工作昨天,首都机场全天共飞行1474架次,确保出入境旅客23.49万人次。与此同时,Xi、郑州等地也出现降雪。由于该场降雪等综...

锦衣夜行月关 奇啦专访《锦衣夜行》作者月关:我依旧是一个写故事的人

月官是中国网络文坛公认的大神作家之一。他的历史小说《归明朝为君》、《步步长莲》、《锦衣夜游》等脍炙人口,人气不减。2017年初,他一直在搬家。他不仅宣布自己已经转行去读文学,想在那里开新书,还加入东伦传媒做CCO。带着了解他近期变化的内在原因和大神作家转型前后经历的...

德国玛雅祛疤 贾爽:带你认识市面上常见的德国ESI玛雅外置USB音频接口声卡

  • 德国玛雅祛疤 贾爽:带你认识市面上常见的德国ESI玛雅外置USB音频接口声卡
  • 德国玛雅祛疤 贾爽:带你认识市面上常见的德国ESI玛雅外置USB音频接口声卡
  • 德国玛雅祛疤 贾爽:带你认识市面上常见的德国ESI玛雅外置USB音频接口声卡