分布对象中间件中的异步机制代码生成算法研究

2015-04-02 23:35孟令权
科技创新与应用 2015年10期
关键词:中间件

摘 要:近年来CORBA作为一种分布对象中间件应用领域不断扩展,很多应用还离不开异步机制,而传统CORBA还无法实现异步激活。文章针对对象中间件CORBA异步机制的实现进行了较深入地探讨,并基于修改抽象语法树提出异步代码生成算法,可达到有关模型的应用需求。

关键词:中间件;异步机制;抽象语法树

1 概述

近年来CORBA作为一种分布对象中间件应用领域不断扩展,目前已逐渐成为网络计算集成框架和应用构件的一个技术标准,其应用日益广泛。起初由OMG組织制定用于分布计算的标准,并逐渐成为网络计算集成框架建立的一个十分重要的技术标准。

传统CORBA只具有one-way、静态及动态invorcation interface三种激活机制,随着松耦合领域的CORBA应用,其传统的激活机制已难以实现实际需求,而需异步激活机制才能实现。尽管one-way可实现异步效果,如请求发送时将引用的客户对象进行传递,但其自身操作也存在依赖传输层及相关语义问题。而动态invorcation interface激活机制具有编程复杂、分配内存过多及数据备份等问题。为有效解决异步机制引入分布对象中间件中的问题,深入研究抽象机制算法与模型,建立对异步Polling模型的支持,扩充ORB内核。实现对应用开发的支持。

2 Polling模型设计

2.1 设计原则

在实际应用,Polling模型应按照以下原则进行设计,Polling只映射客户方语言,无需改变服务方;可采用调用Polling方式执行已存在的服务程序;用户交互Polling模型对象,支持其功能的对象由编译器生成;与有关规范要求相符。

2.2 组成要素

按照上述原则进行设计实现CORBA模型,其组成要素中,相对于常规模型服务方构成要素变化不大,客户方变化较大。客户方将一些对象引入,对传统对象扩充后实现对功能实体的支持。建立对值查询应答的对象及Reply Handler对象请求应答的保存等都是Polling Stub的主要功能。

特别应注意,由于Polling模型中不需要改变接口的定义文件,由IDL编译器生成对Polling功能支持的基础设施实体,因此需扩充IDL编译器,使其可生成对Polling功能支持的要素。Polling Stub等对象对Polling功能的支持由IDL编译器生成,并与Polling ORB协作实现Polling异步机制。

3 代码生成算法

3.1 常规方法

IDL文件由IDL编译器进行映射,编译器前端具有预处理及语法分析功能,生成抽象语法树;后端将其接口向语言代码进行映射。预处理主要是在编译程序前,由预处理器完成处理被编译程序的宏替换、展开源文件及编译等具体工作,预处理器是文本处理器,只扫描源文件,执行指令动作,对源文件语法不作分析。

由此可知,对Polling功能支持代码的生成,应首先获得对Polling异步机制所需节点抽象语法树的支持,在后端生成代码时实现对Polling功能的支持。Polling模型没有将新的关键字引入,因此无需修改IDL编译前端。

3.2 隐式IDL文件方法

该方法主要是在前端预处理Polling,之后在后端生成异步代码。预处理器主要实现对原始IDL文件的扫描,对Polling异步机制支持的接口定义插入,以生成隐式IDL文件,原接口对应的对Polling异步机制支持的应答、异常处理对象及Polling对象接口在文件中得到映射。后端为生成异步代码,抽象语法树需利用隐式IDL文件所生成,对应异步代码根据Polling有关逻辑生成。

3.3 抽象语法树修改算法

此方法无需生成隐式IDL文件,而在抽象语法树生成后、生成代码前对抽象语法树进行遍历,将代码生成需要的结点向抽象语法树动态加入。后端为生成异步代码,应结合修改后抽象语法树,对应的异步代码根据Polling逻辑生成。

3.4 两种方法对比

隐式IDL文件方法主要是预处理器的实现,为使设计简化并保证原始文件具有正确的语法,预处理器和语法分析器可在预处理中调用,就是对预处理和语法分析执行两次,效率不高。相对于隐式IDL文件方法,抽象语法树修改算法无需对预处理和语法分析执行两次,只对抽象语法树遍历一次并将所需节点添加,因此具有较高的效率。

3.5 抽象语法树修改算法

抽象语法树修改算法在实际中通常应用较多,该算法主要内容是对抽象语法树遍历后,将其中的Interface节点识别,再结合CORBA规范将对Poliing功能支持的节点进行添加。接口识别后,定义三个相应的集合,分别用于除one-way操作的所有操作,集成接口只读属性,集成接口一般属性。具体算法为:

获得当前节点的全部子节点,将节点形成一个序列,对序列中元素执行以下步骤:如元素是Module对象,可将其作为参数对此算法进行递归调用;如元素是Interface对象,则直接执行以下步骤,如果是其它对象就无需进行处理。

对于Interface对象,对其命名后依次执行修改对象并创建相应操作和Polling接口,返回值类型如果不为空,为其建立元hi操作返回值数据类型的属性。原始操作中out及inout类型参数都只建立只读属性,数据类型与其参数类型分别相对应。由此可见,抽象语法树修改算法具有O(n)的复杂度,将此算法在实现Polling模型中具体应用,应用结果可满足CORBA及Polling模型要求。采用此算法生成对Polling模型功能支持的代码并结合Polling ORB可充分实现Polling功能的实际需要。

4 结束语

综上所述,文章针对Polling模型体系结构的实现进行了较深入地探讨,详细论述了生成Polling功能代码的机制,提出对抽象语法树算法的修改算法。经有关应用证实,该机制可实现模型设计要求,使CORBA应用的激活机制得到扩展,具有异步性,使请求发送和应答接收解耦问题得到有效解决,应用领域得到一定程度的扩展。

参考文献

[1]郑茂松.一个语义引导代码生成工具系统的设计[J].计算机应用与软件,2011.

[2]杨军,刘毅斌.代码生成技术在通信接口开发中的应用[J].江西冶金,2013.

[3]蒋凌云,王汝传.用于网格计算的复合代码生成技术研究[J].南京邮电学院学报,2013.

[4]郭天文.基于动词属性的模板化自动代码生成[J].计算机技术与发展,2013.

[5]朱晓峰.自动代码生成图形制导编码与专门知识辅助[J].计算机工程,2012.

作者简介:孟令权(1975-),副研究员,主要从事应用技术研究工作。

猜你喜欢
中间件
我国自主可控中间件发展研究
RFID中间件技术及其应用研究
基于VanConnect中间件的设计与开发
基于Android 平台的OSGi 架构中间件的研究与应用
机载计算机中间件技术研究
RFID中间件发展与趋势研究
以实力证明 用事实说话
中间件在高速公路领域的应用
云计算环境下中间件的负载均衡机制研究
基于SAF规范的高可用电信中间件设计