微信号:infoqchina

介绍:有内容的技术社区媒体

OSGi中的服务模型与扩展者模型

2013-11-27 21:14 InfoQ

在OSGi中,实现bundle间交互和扩展性有两种常见的方式,也就是服务模型(service model)和扩展者模型(extender model)。


服务模型较为容易理解,在这个模型中包含了服务的提供者、使用者以及注册中心。服务接口构成了提供者和使用者之间的契约,提供者将希望别人调用的服务发布到注册中心,使用者到注册中心查找符合需求的服务。在传统的服务模型中,都是通过查找的方式使用服务,但是随着Declarative Service以及Blueprint的流行,服务可以在运行时注入,简化了开发人员的编码过程。

图1:OSGi中的服务模型(图片来源于《OSGi实战》)


扩展者模式更为灵活和抽象,它是与OSGi的生命周期相关联的。在《OSGi实战》一书中是这样描述扩展者模式的:扩展者模式背后的主要思想是,在其他bundle的生命周期事件(安装、解析、启动、停止等)上构建动态扩展性。通常,应用中的某个bundle扮演扩展者的角色:它负责监听bundle的启动、停止。当一个bundle启动时,扩展者会对其进行检测并判断它是否是一个扩展bundle。扩展者检查bundle的清单文件(使用bundle.getHeaders())或bundle的内容(使用bundle.getEntry()),以此来寻找它能够识别的特定元数据。如果这个bundle确实包含一个扩展,那么该扩展会通过元数据来描述。扩展者读取元数据并执行必要的任务,这有助于将扩展bundle集成到应用中。如果扩展bundle被停止,扩展者同样会监听到,此时扩展者会将相关的扩展从应用中移除。(《OSGi实战》一书由人民邮电出版社翻译出版,对应的文字来源于第89页)。在Eclipse插件开发中最常用的扩展点模型就是一种典型的扩展者模式,不过这是Equinox的特有实现,并不是OSGi规范的一部分。


***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿和加入编辑团队的流程。

***********************************

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 祝贺内蒙古自治区职业技能大赛圆满成功 为什么可以申请的内存超过物理内存 最好的结婚对象是你自己 如何做一个让人闻风丧胆的HTML5页面 R中的数据结构——列表