基于Android平台的OSGi架构中间件的研究与应用
摘 要:为满足不同的Java环境和平台的需求,屏蔽了底层技术的复杂性,极大降低了智能家居应用系统的开发难度,深入地研究了基于OSGi架构的中间件技术,把OSGi技术和Android平台结合,通过编写OSGi模块层的Bundle,实现了屏蔽底层硬件和允许多个设备服务的动态热部署等中间件的功能。此研究成果对促进智能家居的推广应用具有重大意义。
关键词:中间件 OSGi 模块化
Research and Application on the Android platform middleware based on OSGi framework
Hunag Wen
Abstract: This article in view of the existing middleware system service module and dynamic development, upgrade and reform more difficult,On the basis of fully analyzing the middleware and intelligent gateway technology,Put forward a kind of support for dynamic development and efficient operation of the smart home middleware solutions,Through component Bundle dependencies between services and Service registration and access, realize the modular development of the middleware and its dynamic hot deployment.Finally, using the program developed the OSGi framework of smart home based on Android platform middleware, and achieved good effect in practical application.
Key words:Middleware, OSGi,Modular
1 引言
OSGi(Open Service Gateway Initiative,直译为“开放服务网关”)实际上是一个由OSGi联盟发起的以Java为技术平台的动态模块化规范。
OSGi联盟是由Sun Microsystems、IBM、Ericsson等公司于1999年3月成立的一个世界性的开放标准化组织,最初的名称为Connected Alliance,该组织成立的主要目的在于使服务提供商通过住宅网关为各种家庭智能化设备提供服务。OSGi规范主要关注于嵌入式领域,满足诸如机顶盒、服务网关、手机等应用环境的模块化需求。并且在这些领域中获得了很大的发展,成为嵌入式领域Java平台事实上的模块化规范。
中间件是一类连接软件组件和应用的计算机软件,它包括一组服务,以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一种分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括web服务器、事务监控器和消息队列软件。本文设计的中间件作为上层复杂应用软件与底层Zigbee节点的中间层存在,屏蔽了底层技术的复杂性,极大降低了智能家居应用系统的开发难度,是整个智能家居系统的核心。
2 系统总体设计
2.1 系统分析
通过分析,本文把家庭无线传感网中间件系统从底层向上的划分为四大逻辑单元:
1.数据存储单元,主要使用OSGi框架提供的Preferences服务来负责存储各种设备节点的信息,为用户端识别设备提供标识。
2.串口服务单元,该逻辑单元主要负责底层基于无线传感器网络的协调器与中间件之间的数据交互问题。
3.设备类型单元,主要是接收Socket转发过来的数据和控制信息,把这些信息转换成相应设备的控制命令。即负责数据包的解析,处理和封装的工作,用户发送过来的数据包不是直接的发送给协调器的,而是经过此单元的处理和转换成相应设备类型的控制命令,发送到目的设备节点。
4.Socket服务单元,它实现了Socket接口服务,通过TCP/IP协议,为用户连接中间件提供服务连接。
2.2 中间件系统总体架构
本文把系统的架构分成三个层次,每个层次按照系统中的所需要的优先级别和系统五大模块之间的相关依赖进行安排,得出如下图1的中间件系统架构图:

图1 中间件系统架构图
第一层主要是提供基本服务的模块,Serial Bundle主要属于Serial单元的实现,而Preferences Bundle则属于数据存储单元的实现。第二层的两个模块都是属于设备类型模块。第三层是此中间件系统的最上层的模块,本模块的主要作用就是为了连接用户,这里使用的基于TCP/IP协议的Socket通信技术,实现远程访问此中间件。
3 系统实现
3.1 Preferences Bundle模块
此模块主要是为存储信息做准备,即中间件如果要想和底层的设备节点进行通信,那么就必须区别不同的设备,同时也需要把设备的唯一性的信息记录起来。此模块的设计是类似于XML中的树状的存储框架,根节点代表和中间件连接的协调器,而各节点的各个子节点就是和协调器进行通信的设备节点。本研究只为设备节点存储设备的网络号和设备的类型这两个信息。最后向OSGi框架注册服务,为要使用此模块的存储功能的其他模块提供接口。结构如图2:

图2 存储的结构图
3.2 Serial Bundle模块
根据中间件的功能必须和底层的协调器进行通信,本文设计的中间件系统通过串口和底层的协调器进行连接。而在OSGi框架中开发的程序是运行在虚拟机上的jar包,所以想要访问硬件串口就必须使用JNI技术。本模块通过编译串口驱动程序生成驱动so动态库,它能在Android环境中动态加载,就像Linux下的驱动程序一样。然后把so动态库提供的接口进行进一步的封装成JAVA中的jar包。在Serial Bundle模块中使用上述的jar包,来提供串口的服务。如图3:

图3 串口动态so文件的调用图
3.3 Type0x Bundle模块
此模块代表两个类型的设备,即Type01代表电饭煲和Type02电灯。这两个模块主要是把从Socket中接收到的客户端的数据进行逻辑处理成硬件设备能识别的字符串,然后调用Serial Service中提供的服务,把字符串数据发送到对应底层的设备。
3.4 Socket Bundle模块
Socket 模块主要的功能就是负责和用户端进行相互通信的作用,通过建立Socket服务端等待用户的连接。它实现了每个客户端的连接,为每个客户端建立一个独立的线程会话来进行通信。它特点是能连接多个用户,也能响应多个用户的操作响应。
4 基于中间件的智能家居网系统
此研究的中间件的主要用途在智能家居控制系统中,下图4是智能家居控制系统的架构图,从图中可以看出中间件系统具有汇集各种信息,起到承上启下的的作用。

图4 智能家居网系统图
5 结论
本文研究开发的基于Android平台OSGi框架的中间件是对中间件技术的进一步拓展,传统的中间件一般都是搭建在x86平台上的,而本文研究的是可移植到基于ARM的嵌入式平台上,并且具有动态性。使中间件能达到一次开发多次利用,满足不同的Java环境和平台的需求,屏蔽了底层技术的复杂性,极大降低了智能家居应用系统的开发难度,是整个智能家居系统的核心。
参考文献
1 罗巨波.基于OSGi的Java中间件分析和设计.科技创业月刊,2005-6-9
2 黎 鹏.基于OSGi框架的RFID中间件系统的设计与实现.南昌大学 硕士论文,2010
3 Richard S.Hall,Karl Pauls,Stuart McCulloch.《OSGi in Action: Creating Modular Applications in Java》.Manning Publication,2011-4-21