本发明专利技术公开了一种分布式FORTRAN模块间的通信方法,属于软件技术领域。本方法为:1)将分布在各主机上的FORTRAN模块依次进行C语言、Java语言封装,生成Web?Service模块,其内包含一适配器;2)主机A的适配器生成发往主机B的全局变量文件A,主机A与主机B通过Web?Service模块通信;3)主机B的适配器解析该文件A,并对参数赋值;4)主机B的适配器调用该FORTRAN模块执行运算,并利用该适配器生成全局变量文件B;5)主机B的适配器将生成的文件B发给主机A;6)主机A的适配器解析该文件B,并对参数赋值后传给该FORTRAN模块。本发明专利技术极大提高了FORTRAN遗留程序的可重用性。
【技术实现步骤摘要】
本专利技术涉及一种分布式FORTRAN模块间的通信方法,属于计算机软件
技术介绍
FORTRAN语言诞生于20世纪50年代,由于其语法结构简单、科学计算功能强大特 别是在复数运算上独一无二的优势,被广泛应用于数学与工程计算领域。很多早期的工程 应用计算程序、软件都是用FORTRAN语言编写的。但是FORTRAN程序又有其明显的缺点用 户界面不友好,可视化性很差。 如何继续使用大量的FORTRAN遗留代码,减少浪费;同时如何使应用程序又具 有像C++、 VB、 Delphi这些语言的友好人机界面呢? 一般的策略是利用混合语言编程,对 FORTRAN代码用C/C++、 VB、 Delphi语言封装起来。 这种策略将封装的级别停留在语言级别,在可视化性,易用性方面得到了不错的提高,但是按照这种策略拆分和封装后的FORTRAN遗留程序只能部署在一台机器上,还达不到分布式、跨平台的程度,造成对FORTRAN代码的可重用性实质上并不高。 从上面的分析可知,对于FORTRAN遗留程序中,现有的方法是部署在同一台机器上,所以各个模块之间的通信可通过共享内存变量来实现,但是在分布式的环境中,这种通信机制是不行的。另外对于模块内部的读取文件的问题,文件指针的定位也是分布式环境中必须考虑和解决的。
技术实现思路
本专利技术的目的在于提供了一种分布式FORTRAN模块间的通信方法,本专利技术的方法 不仅能够实现现有方法的可视化、可用性的效果,而且针对分布式的环境,提供了创造性的 解决方案,实现了将拆分和封装后的模块部署在分布式的机器上执行效果和原来的完全相 同。 本专利技术的技术方案为 —种分布式FORTRAN模块间的通信方法,其步骤为 1)将拆分后分布在各主机上的FORTRAN模块依次进行C语言、Java语言封装,生 成Web Service模±央;所述Web Service模块内包含有一利用FORTRAN语言编写的FORTRAN 模块适配器,用于解析传入的全局变量文件和生成输出的全局变量文件;所述全局变量文 件包括内部读取文件名、文件指针和全局变量参数; 2)发起请求主机A上FORTRAN模块的适配器生成发往目标主机B的全局变量文件 A,并通过主机A的Web Service模块发送给主机B的Web Service模块; 3)主机B上FORTRAN模块的适配器解析主机B的Web Service模块传入的该全局 变量文件A,并对相应参数进行赋值; 4)主机B上FORTRAN模块的适配器调用该FORTRAN模块执行运算,并利用该适配 器生成全局变量文件B ;4 5)主机B上FORTRAN模块的适配器通过主机B上的Web Service模块将生成的全 局变量文件B发送给主机A的Web Service模块; 6)主机A上FORTRAN模块的适配器解析主机A的Web Service模块传入的该全局变量文件B,并对相应参数进行赋值后传给该FORTRAN模块。 进一步的,所述Web Service模块的生成方法为 1)利用FORTRAN语言编写主机上FORTRAN模块的适配器; 2)利用C语言编写一个封装程序,负责和该适配器通信; 3)利用Java语言编写一个封装程序,负责调用该C语言封装程序; 4)将该Java封装程序封装成一个Web Service模块。 进一步的,所述Java语言封装程序利用Java语言的getRuntime方法获取当前 Runtime类运行时对象的引用,然后调用相应的exec方法访问所述C语言封装程序。 进一步的,所述C语言封装程序利用C语言的system函数访问所述Java语言封 装程序。 进一步的,如权利要求1所述的方法,其特征在于所述全局变量文件的格式为XML 文件格式。 进一步的,所述文件指针为FORTRAN命令语言的行号。 进一步的,所述主机A的Web Service模块将所述全局变量文件A发送给主机B 的WebService模块的方法为 1)所述主机A上FORTRAN模块的适配器将该全局变量文件A传给该Web Service 模块的C语言封装程序; 2)该C语言封装程序将该全局变量文件A传给该Web Service模块的Java语言 封装程序; 3)该Web Service模块的Java语言封装程序调用主机B的Web Service模块,将 全局变量文件A发送给主机B的Web Service模块。 进一步的,所述主机B的Web Service模块传入所述全局变量文件A给主机上 FORTRAN模块的适配器的方法为 1)所述主机B的Web Service模块的Java语言封装程序将该全局变量文件A传 给该Web Service模块的C语言封装程序; 2)该C语言封装程序将该全局变量文件A传给所述主机B上FORTRAN模块的适配器。 FORTRAN是一种结构化的程序语言,其开发的应用软件的各个模块之间耦合性很 强,由于其独特的应用场景,所以FORTRAN源代码存在以下两个重要的特点1)各个模块之 间的通信采用全局变量的方式(运行的时候共享内存),并且全局变量的数量很多;2)模 块内部会存在读取文件的情况,这些文件很可能是应用数据文件, 一般是有格式的,周期很 长,数据量很大。 为了实现能将拆分和封装后的模块实现在分布式环境中,我们进行了一系列积极 而又有意义的探索,并对这些探索做了总结,从而找到了一个有效的方法。 在实际探索的过程中,我们引入了以下两个概念 參数据适配器5 FORTRAN遗留程序的模块在运行前有时需要整理所需的数据和参数,在运行后需 要整理模块的运行结果以及保存状态等。参考SOA(Service-Oriented Architecture)中 的服务适配思想,我们设计了数据适配器功能。数据适配器实现了 FORTRAN遗留程序模块 运行时刻的数据调用适配功能,并成为了拆分封装后的模块集成过程中不同模块之间的结 合部。 參封装程序 不同的编程语言之间的通信需要遵循一定的方式,而这些方式的具体实现就是封 装程序,在实现的过程中,这些封装程序仅仅起到了通信,传递参数的作用,不涉及到具体 的业务逻辑的处理。 本方法主要包括以下几部分
技术实现思路
(1)模块之间的通信机制的建立 拆分封装成Web Service的模块有可能会被部署到不同的机器上,原有的模块间 通过共享内存中的全局变量的值的通信方式是行不通的。可以有两种策略来解决这个问 题。其一是通过参数,但是模块之间的通信的全局变量的数量很多,而且类型也不一样,所 以会造成通信函数很复杂,难于控制。其二是通过文件。我们采用了第二种方式。将这些 需要在模块间交互的全局变量的值写入到文件中,模块之间通过传输文件的方式,实现通 信。所以要对源代码添加数据适配器,用来在执行该模块的逻辑代码前,解析传过来的全局 变量的文件作为输入;同时在执行该模块的逻辑代码后,将全局变量的值按一定的格式输 出到文件中,作为输出。 (2)文件指针的处理 在原有的环境中,程序在运行的过程,所有的变量共用一个全局空间,读取应用数 据文件的时候,打开的文件句柄会被保留着,方便下次读取,直到整个程序执行完毕。 而拆分封装后,部署在分布式的环境中的模块,每次调用,需本文档来自技高网...
【技术保护点】
一种分布式FORTRAN模块间的通信方法,其步骤为:1)将拆分后分布在各主机上的FORTRAN模块依次进行C语言、Java语言封装,生成WebService模块;所述WebService模块内包含有一利用FORTRAN语言编写的FORTRAN模块适配器,用于解析传入的全局变量文件和生成输出的全局变量文件;所述全局变量文件包括内部读取文件名、文件指针和全局变量参数;2)发起请求主机A上FORTRAN模块的适配器生成发往目标主机B的全局变量文件A,并通过主机A的WebService模块发送给主机B的WebService模块;3)主机B上FORTRAN模块的适配器解析主机B的WebService模块传入的该全局变量文件A,并对相应参数进行赋值;4)主机B上FORTRAN模块的适配器调用该FORTRAN模块执行运算,并利用该适配器生成全局变量文件B;5)主机B上FORTRAN模块的适配器通过主机B上的WebService模块将生成的全局变量文件B发送给主机A的WebService模块;6)主机A上FORTRAN模块的适配器解析主机A的WebService模块传入的该全局变量文件B,并对相应参数进行赋值后传给该FORTRAN模块。...
【技术特征摘要】
【专利技术属性】
技术研发人员:汪小林,罗英伟,邓浩,王海波,
申请(专利权)人:北京大学,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。