OSGi——面向服务架构规范简述

去年我们组要开发一个新的产品,在讨论产品架构路线的时候,美国的架构师向大家征集了架构设计思想(我推荐了SCSF),有一位工程师向他推荐了OSGi。以前我还没有听过OSGi这玩意,虽然我参加工作后,现学了Java和Flex,但非常菜。在工作之前我用了4年的.NET。接触了OSGi后,发现它是一个面向Java的服务规范,还没有一个像样的面向.NET的框架(有个EgeyeAddIn,据说兼容OSGi,我看了源代码了,觉得它离OSGi较远http://www.codeplex.com/EgeyeAddIn)。随着对其概念的模糊了解,我觉得这玩意不错,于是我准备自己做个基于.NET的OSGi框架(因为我在业余的时候在设计一个UI框架,原先准备采用SCSF,接触了OSGi后,我决定将二者合并,重新设计OSGi+CAB的框架)。于是,我在互联网找了很多次关于OSGi的资料,但很失望,没有得到多少需要的东西。因此,我只好自己翻译了OSGi规范前6章,边翻译,边理解(当我翻译完第6章的时候,发现网上已经有OSGi规范中文版了,给自己省了点事),期间我翻译了SCSF英文指南,看了EgeyeAddIn、SharpDeveloper Core和Eclipse OSGi的源代码,最终设计了基于.NET的OSGi规范和OSGi.NET概要图,目前OSGi.NET测试版已经完成,预计年底可以发布。因此,对OSGi和SOA有了更深一步的了解。

在我理解中(对于SOA,我不专业,如果有误,大家批评),目前大部分应用的SOA中的S,已经不是传统意义的Web Service或者远程Service类似的Heavy Service,而更偏向于暴露出一个接口,向其它模块提供通用功能的服务(或类)。在分层应用,上层类将调用下层的类,这种依赖是层与层之间的依赖,相比没有分层的混沌状态的类间依赖要好很多;在SOA应用,模块间通过服务依赖,这种依赖是可以管理的,非常清晰,每一个模块也很容易被重用。下图是我理解的分层和SOA的比较。

OSGi规范是一个服务框架的规范,在OSGi中,(1)每一个模块叫Bundle,即服务包,每个服务包向其它服务包暴露其服务,服务包间服务的引用是可以管理的;(2)每一个服务包类似一个模块,其实更是一个插件,可以被动态的加载到OSGi框架,动态注册、引用、回收和卸载服务,也可以被动态的卸载;(3)服务包在运行时的依赖是通过可管理的服务来体现,在设计时,从功能复用的角度,即一个服务包会使用另一个服务包的类,服务包之间在设计时有一种依赖,这种依赖在服务包清单配置文件中定义,由Export、Import、Require、DynamicImport配置节组成。Export即这个服务包暴露出的可被别的包使用的类型集合定义,Import是服务包引用其他服务包Export的定义,Require则是引用了另一个服务包的所有Export定义。因此,OSGi还定义了类型加载模型,用于实现一个服务包从OSGi系统加载其依赖的类型。

OSGi内核在实现上,有点复杂,在此不过说,估计关心的人会少一点,能把OSGi的SOA思想和应用用好就Very Good了。OSGi.NET是我们团队利用业余时间开发的,从2008年10月份开始,借鉴了SharpDevelop、EgeyeAddin和Eclipse OSGi设计,用分层方式,划分成配置成、解析元数据层、解析层、运行时加载层、Bundle层、Core层和Adapter层,当然最重要的是面向最终用户的公共接口层了,第一个版本的设计是大部分兼容OSGi规范,把认为复杂的需求给去掉了,也简化了Service的设计。由于接触SOA时间比较晚,对SOA的理解没有SOA专家体会的深,欢迎批评指正。

有任何技术问题,可以加入iOpenWorks插件仓库平台QQ交流群: 121369588。

本文基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名道法自然(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。

OSGi——面向服务架构规范简述的更多相关文章

  1. SOA面向服务架构简述

    在上篇中我们简单谈了下架构设计中服务层的简单理解,在这里我们将继续服务层的架构,在本节我们将重点在于分布式服务.在分布式系统中表现层和业务逻辑层 并不处于同一物理部署,所以我们必须存在分布式服务,以契 ...

  2. 面向服务架构(SOA)和企业服务总线(ESB)

    http://www.cnblogs.com/shanyou/archive/2008/04/19/1161452.html 学习和研究在企业中实施面向服务架构(SOA),简单回顾SOA和ESB,重点 ...

  3. MicroService 微服务架构模式简述

    开源地址: https://github.com/TheCodeCleaner/MicroService4Net 本文内容 微服务 微服务风格的特性 组件化(Componentization )与服务 ...

  4. 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训

    [编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...

  5. [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店

    一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Byteart Retail案例并没有对其形成过程做一步步分析,而是把整个DDD的实现案例展现给我们,这 ...

  6. (转)漫谈SOA(面向服务架构)

    http://blog.csdn.net/luohuacanyue/article/details/12521699 面向服务架构的思想在整个软件的架构中已经不是什么新鲜的东西.我简单的认为服务化是模 ...

  7. [置顶] 漫谈SOA(面向服务架构)

    面向服务架构的思想在整个软件的架构中已经不是什么新鲜的东西.我简单的认为服务化是模块化的延伸,所以服务化有着和模块化类似的优点和缺点.这里不再讨论这些服务定义服务与服务之间的通信协议(像WSDL等等) ...

  8. SOA面向服务架构

    SOA面向服务架构 风尘浪子 只要肯努力,梦想总有一天会实现 随笔分类 - SOA面向服务架构 结合领域驱动设计的SOA分布式软件架构 摘要: 领域驱动设计DDD的总体结构,Repository层使用 ...

  9. SOA(面向服务架构)——踩坑后反思:这样值得吗?

    SOA(面向服务架构)——踩坑后反思:这样值得吗?

随机推荐

  1. 9.13 JS循环

    循环:循环操作某一个功能(执行某段代码) 四要素: 循环初始值 循环条件 状态改变 循环体       for  穷举     迭代            i++;等价于i=i+1;  ++I;等价于 ...

  2. electron-Node.js Error: Module version mismatch. Expected

    本来以为是nodejs的版本问题,后来才发现是electron用本地包的问题 Installing modules and rebuilding for Electron You can also c ...

  3. UIProgressView(进度条控件)

    UIProgressView *pr=[[UIProgressView alloc]init]; pr.frame=CGRectMake(150.0, 190.0, 130.0, 30.0);//进度 ...

  4. Java数据结构——哈希表

  5. VC----Class Style类风格和窗口风格

    CS_BYTEALIGNCLIENT:以字节边界来对齐窗口客户区,这个风格会影响 窗口 的宽度和水平位置.实际上没有看到效果. CS_BYTEALIGNWINDOW:以字节边界来对齐窗口,这个风格会影 ...

  6. ecshop if标签,超过N条,就输出记录 elseif、库存显示方式

    <!--商品详情右侧 相关商品推荐--> <!-- {if $related_goods} --> <!--{foreach from=$related_goods it ...

  7. ajax传输 基础一

    一个简单页面的传输 index.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

  8. EasyDarwin

     1.EasyDarwin多媒体点播实现 新版本EasyDarwin都加入了中心管理服务EasyCMS, 对于点播系统,EasyCMS不是必须的. MP4点播,需要将mp4文件hint之后才行,MP4 ...

  9. C- 流程控制(顺序结构,选择结构,循环结构)

    一.选择结构 1.if 特点: 同一时刻,只有一个大括号里面的代码会被执行 2,switch 特点 默认情况下,只有一个case后面的代码会被执行 如果一个case后面没有break,而且这个case ...

  10. 安装RabbitMQ遇到的问题

    消息队列RabbitMQ在安装的时候出现了问题.. 我这里是参考的 .NET 环境中使用RabbitMQ 进行安装的..首先声明 这篇博文没有问题.. 但是在我安装的时候发现..ErLang环境装完 ...