基于动态代理的上下文感知编程模型EIPM研究任蓓丽,齐勇,李明,张俊斌,牛玉洁,赵万贺(西安交通大学电信学院软件研究所,陕西西安710049)摘要:上下文感知应用和普适计算环境逐渐渗入人们生活环境的今天,上下文感知应用的设计开发时的支撑环境方面仍主要采用传统的面向对象等技术及编程模型,这样在设计时与上下文相关的行为会分布在程序中,即环境上下文和行为在程序编码时就进行了绑定,这使得环境依赖因素和程序控制主体结合的过分紧密,不能适应普适计算环境多样、复杂、动态和多变等特点,更难于进行系统维护和扩展.本文以实现应用程序动态适应环境信息变化为目的,设计并实现了采用动态代理为底层实现机制,通过映射规则的建立将上下文信息和编程逻辑进行分离的上下文感知编程模型EIPM,提供了相应的开发编译平台和执行容器在内的应用框架系统原型,实现一种适应普适计算环境上下文动态复杂多变特点的编程模型.以普适环境文件访问系统中上下文感知部分模块的开发为例,进行了EIPM应用框架原型系统功能的可行性测试,结果表明EIPM编程模型具备了对环境上下文变化的动态适应性.关键词:普适计算环境;上下文感知;编程模型;动态代理机制中图分类号:TP311文献标识码:A文章编号:03722112(2010)2A01008ResearchofDynamicProxyBasedContextAwareProgrammingModelEIPMRENBeili,QIYong,LIMing,ZHANGJunbin,NIUYujie,ZHAOWanhe(Dept.ofComputerScienceandTechnology,Xi’anJiaotongUniversity,Xi’an,Shaanxi710049China)Abstract:Asubiquitouscomputingpatternhasbeeninfiltratingpeople’sdailylifenowadays,thecontextawareapplication’sdevelopmentprocessisstilladoptingthetraditionalobjectorientedprogrammingmodelandtechnique,whichmakesthecontextrelatedbehaviordesigndistributedintheapplicationprograms,andthebindingofenvironmentcontextandbehavioroccurredatcodingphase.Thiswillleadtotheexcessivetightlycombinationoftheenvironmentdependencefactorandprogrammingcontrollogic,alsohardforthesystemexpandingandmaintenance.Accordingtothesituation,thisthesisaimingatthedynamicadaptationofenvironmentcontextchanging,designedandimplementedacontextawareprogrammingmodelcalledEIPMwhichimplementeddynamicproxyasthebasemechanism,separatedthecontextinformationandprogramminglogicbyestablishingthemappingrule.Also,itprovidedthecorrespondingdevelopmentplatformandexecutioncontainerastheimplementationframeworkprototypesystemtosupportworkundertheprogrammingmodel.UsePervasiveDocumentAccessSystemasapplicationbackground,testandillustratethefeasibilityofEIPMapplicationframework,andtheresultsindicatethatEIPMprogrammingmodelhasthedynamicadaptabilitytothechangingenvironmentcontext.Keywords:ubiquitouscomputingenvironment;contextaware;programmingmodel;dynamicproxymechanism1引言普适计算[1](Ubiquitous/PervasiveComputing)思想最早由MarkWeiser在上世纪90年代初提出.近年来随着互联网已经进入普适网络阶段,基于普适网络的系统平台及其关键技术已经成为重要的研究方向.普适计算要求设备和计算机能够感知用户所处的上下文及其变化,并做出相应的动作,即上下文感知(ContextAwareness)技术.而上下文感知应用程序则指的是那些由用户当前上下文来控制执行动作的软件系统,通过硬件和软件的传感器来察觉到用户的当前环境状况,然后根据一些提前定义好的规则或规范来自动的决定它的行为.其特点在于它们使得计算设备更智能,对用户更贴心,因此将成为未来的关键技术.收稿日期:20090522;修回日期:20090710基金项目:国家863高技术研究发展计划(No.2006AA012101);国家自然科学基金重点项目(No.60933003);陕西省国际合作项目(No.2008kw02);IBM联合项目(No.JLP2009060081);高效能服条器和存储技术国家重点实验室开放基金项目第2A期2010年2月电子学报ACTAELECTRONICASINICAVol.38No.2AFeb.2010www.srvee.com目前对于普适计算环境下的上下文感知应用设计开发时支撑环境方面主要采用传统的面向对象等技术及编程方法.由于传统编程模型需要在设计时确定参数个数及类型,环境依赖因素和程序控制主体结合过分紧密,通常将上下文和行为在程序代码中就进行了绑定.但这种开发时绑定往往会在上下文感知应用程序中为下面的一些情况带来困难:(a)当新的上下文被引入;(b)当上下文和行为的映射规则需要改变;(c)增加新的行为.也就是说,一旦环境发生变化,就需要修改程序并重新进行编译、部署等工作,不能适应普适计算环境多样、复杂、动态和多变等特点,更难于进行系统维护和扩展.因此研究针对普适计算环境特点的上下文感知编程模型及其支撑环境十分必要并有重要实际意义.近年来在面向上下文的编程模型的研究有了新的进展,其中有代表性的包括下面几类.AndryRakotonirainy提出的面向上下文编程模型COP(ContextOrientedProgramming)[2],通过将程序分为主体框架和与上下文相关的openterms,根据上下文或openterms的描述来选择合适的stubs进行填充,实现了上下文和应用逻辑的解耦,但其使用脚本语言作为基础实现,而脚本语言本身能否担负大型工程项目的开发始终被业界怀疑,因此较难适用于复杂的应用;而AncaRarau等人提出的AwareC#[3]在语言层面上采用多面体概念扩展C#语言模型,来将上下文感知功能插入到C#中去,但仅仅在语言层面来进行扩展使得程序员在编程时将上下文及各种变化也定义在程序中,对环境变化的适应能力较差;AnandRanganathan等人提出的Olympus[4]模型利用本体来从抽象层定义规则与实体,并通过框架Gaia完成虚拟实体到真实空间的映射,程序员需要使用脚本语言和本体来定义规则与实体,因此对环境的适应能力较差.本文以实现运行时动态适应环境信息变化为目的,设计了采用动态代理为底层实现机制,通过建立上下文空间与应用逻辑行为的映射规则,将上下文信息和编程逻辑进行分离的上下文感知编程模型EIPM(ExpandedIsotopeProgrammingModel).其设计思想是在Isotope编程模型(IPM)核心概念的基础上,通过进一步的完善以及实现机制的设计来扩展IPM模型.同时为EIPM编程模型建立了包括开发、编译以及执行容器在内的应用框架原型系统,来提供一种适应普适计算环境多样、复杂、动态和多变特点的编程模型,减少上下文感知应用程序开发人员开发和维护的工作量和复杂程度.2Isotope编程模型简介Isotope编程模型(IPM)[5]的核心思想在于将对象的代码从一个类文件扩展到多个类文件,每个文件表示一种环境对应的执行过程,多个类文件共存于系统中,共同提供服务.这种对象模型类似于化学元素中的同位素:占据相同的周期表位置,具有类似的功能,但具有不同的形式,因此我们称这种模型为Isotope(同位素)编程模型,简称IPM.在IPM模型对象中除了传统对象的属性声明,还包含一组同位素元素(isotopeelements).每个同位素元素代表着对象在不同环境下的执行动作.对象在表示其处于不同环境中的行为时,不需要将所有行为混合在一个对象的声明中,取而代之的是若干的独立的同位素元素,因此对象的声明过程也简化为只包含属性的声明.图1是IPM模型对于面向对象模型中对象的扩展结构.在IPM模型结构中,除了对象主体(MainElements)和与之分离的行为描述部分(isotopeelement)外,每个isotope还各自具有一个上下文声明块(contextblock),每个contextblock由一组上下文信息条件表达式组成,作为isotopeelement生效的条件.IPM模型的支撑系统框架为IPM模型中的对象提供运行时容器来支持基于IPM模型的程序运行.运行时容器负责加载和管理对象所有的IsotopeElement,并管理ContextBlock及其行为的对应关系,接受系统对指定对象的调用,并选择合适的IsotopeElement来完成方法调用.3EIPM编程模型设计关键问题及解决方案EIPM(ExtendedIsotopeProgrammingModel)是在Isotope编程模型理念的基础上,以基于动态代理机制进行实现为目的的进一步扩充.IPM作为对传统编程模型的思想扩展,提出了同位素对象的概念,在一定程度上解决了程序对于环境的适应性问题.但是面对较为复杂的应用环境,IPM中采用环境声明ContextBlock的上下文感知实现机制将很难灵活适应,并且只关注对象方法的分离是不够的.因此要将IPM的编程思想体现到应用上,还需要从核心概念和外围支持系统两方面来分别对IPM进行扩展.EIPM编程模型建立在IPM的基11第2A期任蓓丽:基于动态代理的上下文感知编程模型EIPM研究www.srvee.com础上,对于上下文从空间的角度进行维度划分,设计了多面体和多维上下文空间的映射机制;同时扩展了对象属性环境依赖的分离,将和上下文相关的对象属性值获取通过上下文的本体建模来进行分离;最后,对于IPM支撑系统进行更详细的设计和改进.31映射机制和选择策略上下文感知应用对于传统的面向对象编程模型带来了挑战,即在程序中将上下文和行为进行绑定通常会在下面的情况中造成麻烦:(a)新的上下文被引入到应用中;(b)上下文和行为的绑定需要改变;(c)加入新的行为.因此EIPM采用把上下文行为绑定从程序中分离出来,通过映射规则文件的编写来实现.在普适计算中的应用环境,每个上下文感知的应用都有自己的上下文空间,其包含了程序依赖的所有上下文.上下文空间往往是多维的,WeichangDu等人[6]定义上下文空间为各个上下文维度的笛卡尔乘积:ContextSpace=∏ni=0dim→i(1)其中,ContextSpace代表上下文空间,而dimi则代表空间中的第i个维度.每个上