Celix, OSGi in C

celix的目标是用C来实现OSGi规范,原生OSGi是用Java实现的,虽然概念上没有差别,但是c语言实现起来相对会更难一些。参考原生的Java版本OSGi,C语言版本OSGi需要解决如下问题:

    服务接口(Service Interfaces)

    原生OSGi使用Java接口类(Interface)来描述和开放(expose)接口,这样就可以不用开放服务实现的细节。C语言中可以在头文件中描述服务,但是,却不能开放服务接口。为达到Java Interface类似的功能,定义了一个包含函数指针的结构体,其中指针由激活器(Activator)来初始化,然后结构体对象被当做服务来进行注册。

    部署(Deployment)

    原生OSGi使用bundle(实际上就是jar文件)来部署一个或多个服务。bundle中包含了库(library)、资源(resource)和一个manifest文件(用来描述bundle的内容)。但是在C的库中只包含源码编译出来的目标文件(objects),没发加入资源和manifest文件。为在C中实现bundle类似文件,使用zip压缩方式,对库、资源等文件进行打包。


    导出包(Exported Packages)

原生OSGi使用包(package)来导出服务和类型。由于C中没有包和命名空间(namespace)的概念,也就没发通过一个包来导出一组服务。C语言中额外定义了一些宏定义来表示包的导出。    



*参考链接*
*  http://incubator.apache.org/celix/background.html

你可能感兴趣的:(方法和技术)