3.1 何为Toast

Toast是远程信息管理(Telematic)和车队管理领域中的示例应用。虽然你可能不熟悉这些术语,但一定会对这个概念本身有一定的了解。维基百科中是这样描述远程信息管理的:

Telematics是远程通信的电信学与信息科学的合成词。更具体地说,它是通过通信设备实现信息发送、接收和存储的学科。

在汽车导航和娱乐设备中,你都能见到它的身影。典型的远程信息管理系统会通过接口装入车载设备,并提供与设备交互和管理的用户接口;更成熟也更复杂的系统则可以通过无线网络,与车辆管理系统的控制中心连接,从而可以远程控制设备。

Toast的最终版本将涵盖上述所有功能,它可以连接模拟的GPS和安全气囊,也可集成谷歌地球(Google Earth),还能与使用了多种协议、基于OSGi的车辆管理控制中心通信。

从较高层面来看,Toast由客户端后端组成。Toast客户端提供多种功能,包括一个会在安全气囊展开时向控制中心通报车辆GPS位置的应急应用,一个追踪车辆GPS位置并定期通报给控制中心的应用,一个控制车辆音频系统和气候系统的触摸屏接口,以及一个逐向道路导航系统。

本书将介绍Toast后端的开发过程,将其从一个简单的紧急情况监视台,改进为一个可扩展的、用于管理和控制车辆的车辆管理平台,包括车辆定位、追踪和软件管理或预配置(provisioning)。

作为示例,Toast的吸引力不只局限于其众所周知的远程信息管理、车辆管理和大量应用功能的内容。它具有极强的可扩展性,我们可以合理开发不同技术,不需要做出弥补。更为重要的是,这些场景使得我们能够讨论现实中与OSGi相关的各种挑战。

Bundle粒度——一套部署好的Toast系统包含了车辆内置客户端、设备模拟器和控制中心,bundle共计100多个。这可能看起来很多,但这种架构既可以代表真实的系统,又可以让我们在处理大量相互依赖的bundle时,展示一些最佳实践。

第三方库——大多数现实中的应用都会使用第三方代码,Toast也不例外。整个Toast应用使用的库,来自于Eclipse、Apache、更广泛的Java开源社区,以及Google JavaScript。我们会引导你将非OSGi的第三方库合并到基于OSGi的应用当中,并详述需要注意的问题。

动态安装和移除功能——Toast是一个高度动态的应用,可以进行功能的安装和移除,服务器端和客户端的交互,以及用户输入的处理。通过这个例子,我们将展示如何编写bundle,使其适应于新功能以及依赖的移除或更新。我们也将展示如何使用Equinox的最新部署实现——p2,来管理可执行的Equinox配置文件。

扩展性和协作性——若你经历过Toast的开发过程,就会看到许多扩展和协作的方法,包括服务、声明式服务(Declarative Services)、白板模式(Whiteboard Patten)、Equinox扩展注册(Equinox Extension Registry),等等。相对而言,编写新功能较为直接,Toast将其与支持动态安装和移除应用相结合,从而创建一个强大的软件平台。

测试和模拟策略——在本书中,Toast发展成为了一个适度复杂的应用。因此,我们提供了自动化测试的示例和最佳实践——从POJO(plain old Java object)开发到基于OSGi系统的测试中使用的模拟对象(mock objects)和JUnit。我们也将展示如何通过模拟设备来测试,以应对真实的设备硬件不可用,或者从经济的角度而论该设备不可使用的情况。(展开真正的安全气囊非常昂贵!)

Off-board通信——如今,极少有系统可以独立使用。大部分系统最终会与off-board的服务器端、对等端或者子系统进行通信。例如,Toast客户端使用HTTP,与运行了Jetty Web服务器的控制中心进行通信。设备模拟器也使用了类似的方法,但是在车辆中嵌入了一个小的Web服务器。通过使用Eclipse通信框架(ECF),与软件仓库进行交互可以完成预配置功能。

图形和基于Web的用户接口——使用OSGi当然不需要用户接口,许多现实中的应用是“无头的”(headless)。然而,Toast提供了一些UI示例:用于车辆内置触摸屏的图形用户接口;用于控制中心的简单的Web UI;以及用于设备模拟器,基于Web的JavaScript UI。

总之,Toast十分有趣。它简单而且易于理解,功能也足够丰富,可以为许多应用和技术集成提供基础。开发Toast所学到的内容,可以很容易地用于其他领域和应用。

Eclipse中的Toast

将Toast与Eclipse放在一起大有裨益且喜闻乐见。因为我们在Eclipse中展示Toast时,会收获许多扩展和改进它的好主意。为了促进它的发展,我们捐献了Toast的一个快照版本作为Eclipse的示例工程,其代码在第14章中。我们衷心希望它能得到改进,从而超过你在本书所看到的例子。请参见http://wiki.eclipse.org/Toast获取更多信息。

目录