和欣操作系统的XML-Glue编程范式
2008-05-09
作者:陈 果,陈 榕
摘 要: 和欣操作系统是基于CAR构件技术" title="构件技术">构件技术、支持构件化应用的嵌入式操作系统" title="嵌入式操作系统">嵌入式操作系统。分析了当前嵌入式应用开发" title="应用开发">应用开发模式所存在的问题,提出了基于CAR构件技术的脚本语言加CAR构件的XML-Glue编程范式。它一方面充分利用了现有系统的特点,另一方面采用脚本语言的强大功能使得开发更加简单高效,并提供了对将来新兴网络业务" title="网络业务">网络业务应用的必要的支持,将成为和欣嵌入式操作系统中更适合应用开发的编程范式,进而推动人们对构件化编程思想的理解与应用。
关键词: 和欣操作系统 元数据" title="元数据">元数据 CAR技术 脚本语言
面向构件编程技术是从面向过程和面向对象编程技术发展而来,它使得软件工厂的理想成为可能。而随着互联网上新兴网络业务的逐渐兴起,对传统的软件运行方式提出了新的要求和挑战。不论是采取面向过程、面向对象的开发应用,还是采取面向构件技术的开发应用,一旦它们被安装、固化到操作系统中,除了修改源代码、重新编译和重新安装以外将不能对其进行修改。在这样的背景下,完全采用构件技术的应用开发将有如下几个缺点:
(1)如果一个应用程序仅需要改变应用的表现层(UI),而不需要大量修改构件的功能,传统开发模式所要经过的修改-编译-安装-运行的过程就显得效率低下,开发周期长且不能随需求灵活变化的弱点就会暴露出来。
(2)完全采用强类型语言(如C/C++等)实现功能构件并将这些构件组装成应用程序,造成了构件之间强耦合的关系。虽然这些程序运行效率比较高,但是会使得开发与维护的难度加大。
(3)在未来网络无所不在的情况下,运行在网络中的嵌入式设备(如3G手机)将要与运营商所提供的服务经常打交道,服务并不是一定要固化到用户的手机中,而是有可能来自网络,现有技术并不能做到接收来自网络的服务并在客户机上自动运行,从而很难满足新兴网络业务的需求。
为了实现构件间的松散耦合,提高开发维护的效率和适应需求变化的能力并支持新兴网络业务,有必要在应用的开发中引入新的开发模式。考虑到脚本语言的语法简单、功能强大、易学易用的特点,本文基于CAR(Component Assembly Runtime)构件技术[1],提出了新的XML[2]+CAR+其他脚本语言(JavaScript等)的XML-Glue编程范式,并应用于和欣嵌入式操作系统中,实现了更为灵活的构件组装机制,这为将来在和欣平台上的应用开发提供了更加快速和灵活的编程范式。
1 CAR技术与和欣嵌入式操作系统
1.1 CAR技术
CAR是一个具有国内自主知识产权的先进的构件系统。它规定了一组构件间相互调用的标准,使得二进制构件能够自描述,能够在运行时动态链接,并且实现软件的目标代码级的重用。其主要目的是从操作系统层面上引入构件的概念,所有的服务均由构件来提供,从而为网络编程和Web Services提供强大的支持。
1.2 和欣嵌入式操作系统
和欣嵌入式操作系统(Elastos)是面向SOA(Service-Oriented Architecture)设计的,是一个采用CAR技术并基于构件化软件模型的系统。构件化软件设计思想贯穿于整个系统的设计和实现,系统实现本身就是采用构件模式。系统提供了构件自动寻址、自动加载的机制,用户不必知道调用的构件是本地的还是来自于网上的,也就是说,构件运行环境对用户透明。构件化系统的实现使得操作系统本身具有高度的灵活性和可扩展性。
2 XML-Glue编程范式
XML-Glue是和欣操作系统上的一个Rich Client应用的MVC(Model-View-Controller,模型-视图-控制器)编程范式,其核心思想是使用XML和其他脚本语言描述应用,由CAR构件封装应用的逻辑,然后由XMLGlue完成二者的组装,形成一个完整的应用。这个思想在桌面应用中已经得到了较广的应用,如Mozilla的XUL,Microsoft的XAML等。XML-Glue也为嵌入式操作系统提供了相应的技术支持,为嵌入式应用的开发注入了新的活力。
2.1 XML-Glue的特点
(1)采用符合W3C文法的XML标记和多种脚本语言描述应用。XML描述了整个应用的架构、构件及构件间的关系,而其他脚本语言则弥补了XML在描述逻辑上的缺陷,进一步增强了运行在客户端的XML-Glue程序的表现力。
(2)设计了通用的构件组装机制。这一机制从理论上使任何可被扩展的脚本语言可以实现对构件的操作,从而使得这些脚本语言具有粘合构件的能力。目前已经采用这一机制实现了XML和JavaScript对构件的粘合。
(3)XML-Glue支持MVC模型,如图1所示。XML和其他脚本语言用来描述应用(View),CAR构件封装应用的逻辑(Model),然后由XMLGlue完成二者的组装(Controller)。除了作为Model的CAR构件是用强类型的C++语言编写外,其余的View和Controller都可以用脚本编写,简化了开发的难度,提高了开发效率。
2.2 XML-Glue的实现
XML-Glue是基于CAR构件技术发展起来的。它对外提供了XML-Glue应用的运行环境以及多种脚本语言,使开发人员能更方便、更快捷地开发应用,对内则在脚本语言和CAR构件系统之间搭起了通信的桥梁,实现了以脚本方式完成构件组装。
2.2.1 XML-Glue的架构
完整的XML-Glue架构如图2所示。
(1)最外层是XML-Glue运行环境(Runtime),负责初始化和释放XML-Glue应用所需资源。
(2)内部顶层是脚本语言及其配套设施。这一层相当于提供了对MVC中View的支持。
XML/JavaScript/Other Scripts提供了多种描述XML-Glue应用的形式,让开发人员能够灵活利用各种脚本语言。
Script Adapter是各个脚本语言中实现ISCIParameterNormalizer接口的构件(称为SCIParamConvertor)的总称。这些构件负责将其对应脚本代码中弱类型方法的参数转换为CAR中的强类型方法的参数,而在构件方法返回的时候将返回值封装成脚本可识别的数据类型。
Error Interpreter是每种脚本语言中负责翻译调用构件方法的出错信息的翻译器的总称,它将CAR中方法调用发生错误后返回的HRESULT值翻译成文本,并以脚本语言特定的错误机制(如JavaScript中的异常)通知开发人员和使用人员。
(3)SCI(Script Callable Interface)是脚本语言与CAR构件系统通信的桥梁。这一层相当于提供了对MVC中Controller的支持,在下一节会详细叙述。
(4)CAR构件系统。它是服务的提供者。这一层相当于提供了对MVC中Model的支持。
2.2.2 XML-Glue的构件组装机制的实现
Model由CAR构件系统支持,View由脚本语言支持,作为Controller的构件组装则是XML-Glue的核心工作。XML-Glue利用脚本语言的众多优点,实现了一种新的适合于嵌入式系统的构件组装机制,使得应用开发方便快捷。XML-Glue中构件组装机制的实现过程如图3所示。
(1)脚本发起调用;
(2)SCI通过SCIModule或者SCIObjectFactory获取相应的构件模块并创建脚本所请求的构件实例,封装成SCIObject;
(3)SCIObject使用Script Adapter进行脚本弱类型参数向构件强类型参数的转换;
(4)SCIObject向实际的构件实例发起调用请求;
(5)构件实例的方法运行结束并返回;
(6)SCIObject调用Script Adapter将返回值进行相应的封装,提供给脚本语言;
(7)脚本语言通过Script Adapter获取返回值,完成调用。
实现这一机制的关键是解决脚本与构件间的交互问题。从图3可以看出,SCI处于脚本语言与构件系统之间,是脚本语言与构件系统通信的桥梁。SCI最主要的功能是调用构件类实例的成员方法,所以其主要工作除了封装构件类实例外,就是将脚本参数转换为构件参数。这一转换过程是通过CAR构件技术对元数据的支持来实现的。元数据中存放了描述所有类、接口、方法和参数的数据。通过对元数据的分析计算,SCI能够找到所需接口方法的入口点以及参数信息,使得以脚本方式操作构件成为可能。参数转换过程大致分为如下三个步骤:
(1)由脚本语言引擎分析脚本从而获得原始的参数。
(2)将脚本语言对应的SCIParamConvertor作为参数传递给SCIObject的Invoke方法。在Invoke过程中,SCIObject根据内部构件实例方法的元数据,调用SCIParamConvertor的Normalize方法向脚本语言提出转换请求(如果在XML中只有字符型数据〈METHOD1 b="“100”/" a="“50”"〉,而构件中方法的声明为HRESULT Method1(int a,int b);则需要将“50”,“100”转换成int类型)。SCIParamConvertor就根据元数据中描述的参数类型要求将脚本参数转换成CAR中的强类型参数。这个阶段称为参数正规化。
(3)将正规化后的参数转换为机器栈参数压入堆栈,调用内部构件的目标方法,完成方法调用。这一步依赖目标编译器的栈机制,对整个系统概念无影响,这里不做讨论。
SCI由三个模块组成,其描述如表1所示。
本文提出了一种基于面向构件编程模型的XML-Glue编程范式,它将应用的表现层和逻辑层分离开,服务提供商只需提供功能独立的正确构件,应用开发人员就可以根据需求的变化快速更改构件之间的关联关系,从而降低了服务提供者和使用者的耦合程度,并且提供了对将来新兴网络业务应用的必要的支持,将成为和欣嵌入式操作系统中更适合应用开发的编程范式。从目前的实际运行情况来看,XML-Glue基本上能够支持各种应用的开发,下一阶段的主要任务是提高XML-Glue对应用的支撑能力,使其能够支持更复杂的应用开发,并优化XML-Glue的性能。
参考文献
1 科泰世纪.和欣1.1资料大全[EB/OL].http://www.koretide.com.cn/download/download.php?id=2
2 Didier Martin著,李 译.XML高级编程[M].北京:机械工业出版社,2001
3 Munindar P Singh,Michael N Huhns.Service-Oriented Com-puting:Semantics,Processes,Agents[M].Wiley,2005
4 MVC[EB/OL].http://ootips.org/mvc-pattern.html
5 Andre Deienno Pansani.XUL and the building processe of a UI[EB/OL].http://luxor-xul.sourceforge.net/download/qatar.pdf
6 Brent Rector.Controls and XAML[EB/OL].http://msdn.mi-crosoft.com/library/default.asp?url=/library/en-us/dnintlong/html/longhornch03.asp