2011年 9月我参加了OSGi社区在达姆施塔特的会议,并且有机会与其他与会者探讨本机c++实现的OSGi规范的现状。在这一事件之前我也一直想写一篇博客,来描述关于当前实现OSGi规范的现状和努力——类似于C / c++实现的OSGI框架。最后,这篇文章会给出OSGi本机实现的概述。
简介我第一次了解OSGI组件模型是在7年前开发一个Eclipse RCP应用程序。我现在更多从事C++的开发工作,但是仍然关注JAVA和OSGI的发展趋势。尽管C++有许多高质量的库可以创建复杂的应用程序,但是 针对面向组件(或服务)的设计和实现,C++相关的类库和框架就显得有些匮乏了。我试着总结一下现在正在开发的用C/C++实现OSGI应用程序接口的项 目。一些复杂的中间件,比如:CORBA和SCA实现了一些面向服务的设计,不过都不是使用C++实现或者缺乏开发活跃度(Apache Tuscany C++项目最新的版本是2007年发布的),这些项目就不在讨论之列。
本地开发和OSGI的通用性2007年发布了RFP-89提案,该提案规范了一个通用OSGI的实现。在通用OSGI的邮件列表中有一些简短的讨论,Peter Kriens也发布了一篇博文讲述这个观点。简短地说,这个观点是使得其他语言开发的(非JAVA)服务对象可以通过OSGI注册项被访问(后台实现可能 类似于IPC机制)。其核心管理服务单元仍然使用JAVA实现OSGI,但是允许管理本机开发的组件(bundles). 原生OSGi似乎更经常被提及,将OSGi原则使用本机OSGi框架实现(例如C或c++)。本文将重点关注这些原生框架。当然,如果原生OSGI 框架在实现通用OSGI的规范时能提供和JAVA的互操作性,那么就会有更大的影响力(因为提供了一个更大的功能超集)。在这篇文章中,你可以找到一些关 于《自2008年9月以来的通用OSGI状态》。这里提到的论文《物联网软件架构》是由Jan Rellermeyer写的,描述了一个轻型JNI实现的本机C++和Java服务之间的互操作。不过,我没有发现相关的本机代码(倒是找到了Java实现的远程OSGI服务,见这里)。 大家对本机实现OSGI的兴趣并没有消退(见 1, 2, 3, 和 4),不过这样做还不是主流,另一篇由Peter Kriens 在2010年10月发布的博客文章(链接)指出了通用OSGI的观点和一个Apache基金会孵化的项目提供了C实现OSGI(celix)。我会在下一个章节详细介绍当前受关注的原生OSGI实现项目。
C/C++项目尽管原生OSGI并不指定特定的平台或者本机开发语言,不过人们更关注C和C++的实现版本(前面的连接也提到了)。最早的一个项目是OSGI for C++,最初是在2007年7月在SourceForge上注册的。不过这个项目没有发布任何源码和二进制产品,看起来像是被遗弃了。我会汇总一下我所知道的当前正在开发的C或者C++实现的相关项目,尽力以这些项目发布的时间顺序排列(以我所知的)。 声明:我是CTK插件框架的主要开发者。我对于其他项目的了解是通过不同互联网资源汇总而成的(我会提供相应的链接),不过可能存在不完善。不幸的 是,我没有足够的时间和精力来测试和使用所有的项目。所以,我对于这些项目的了解大部分来自阅读相关的文档和源码,如果你是下面提到的其中某个框架的开发 者,请联系我详细或修正相关信息。
POCO OSP2007年7月,POCO开放服务平台作为第一个用C++开发的类OSGI项目发布了。项目白皮书中的版权声明似乎显示项目是在2007年某个时间创建的。这个项目和其他C/C++项目有两个地方不同,第一,这是一个商业项目,第二,它使用了和OSGI规范相似的API。Bundles和service registry的概念是从OSGI规范中提取的。 在POCO OSP API的 文档中列举了一系列服务(如:首选项和用户管理),这些都和OSGI服务规范相似。它实现了OSGI框架的一个子集,并且提供了一个OSGI控制台,一个 基于Eclipse RCP的管理界面,支持远程服务调用,允许通过命令行对bundles进行签名并与框架进行交互。
SOF面向服务框架(SOF)是在2008年早些时候在SourceForge上注册的,这个项目是最早的可以使用的C++实现OSGI的开源项目。该项目实现了OSGI框架的一个子集,提供了一个OSGI控制台,一个基于Eclipse RCP的管理界面,并且支持远程服务。 SOF的远程服务能力是基于MICO(一个C++ CORBA实现)实现的。 |