基于Java Web的CEA程序移植

2018-09-19 09:40蒙小龙刘志勤王耀彬
计算机测量与控制 2018年9期
关键词:调用页面客户端

蒙小龙,黄 俊,刘志勤,张 勇,王耀彬

(1.西南科技大学计算机科学与技术学院,四川绵阳 621010;2.中国空气动力研究与发展中心,四川绵阳 621000)

0 引言

航空航天技术不断发展得益于动力系统的发展,特别是燃气轮机、喷气式发动机、火箭发动机、超燃烧冲压发动机等技术演进,工程热动力是该演进过程的关键。CEA程序由NASA研究开发,用于热力学、物理化学反应的计算与分析,如对固体推进剂组合能量特性分析,新型氧化剂的热化学性能计算[13]。CEA程序一方面是其计算结果成为了相关航空航天研究人员的标准参照;另一方面逐步成为了一些涉及热力学与化学平衡计算仿真平台 (如,飞行器动力仿真系统[4])的编程基础库。

现有的CEA程序需要下载安装到桌面电脑,极大地限制了使用环境,并且在较新的操作系统中兼容性不佳。运用于工程计算时,通常需要进行二次开发[5],然而该程序没有提供标准应用程序编程接口 (Application Programming Interface,API),为开发人员增加了难度。

基于上述问题,本文提出采用基于Web技术实现CEA桌面程序的二次开发,提高了程序的便携性,为涉及化学平衡问题的研究者提供开放便利的计算平台。并且为相关开发人员提供了API,减少了二次开发的工作量。

1 CEA化学平衡计算程序

在NASA CEA程序官网可以获得相应的程序包,以及两份程序手册[6-7]。提供了在 Windows、Mac OS X、Linux、Sun/Solaris、Sgi/Iris系统下的程序包,覆盖了目前主流桌面操作系统。第一份手册是详细介绍复杂化学平衡的数学分析和技术,包括计算指定热力学状态的化学平衡、平衡流和冻结流的火箭能量理论性能,以及入射和反射激波的性质以及爆轰性质等[8]。第二份是用户手册,介绍了程序的详细使用方式。

CEA中的化学平衡计算代码包含1个主程序、24个子程序以及5个入口,可以将它们分成8个不同的模块[5]。如图1所示,分别是2个数据前处理模块,1个程序输入模块,1个主程序模块,3个计算模块,1个输出模块。

图1 NASA-CEA代码的8个模块

以Windows程序包为例,官网提供了3个压缩包,其中CEA+Fortran.zip包含CEA算法程序的Fortran源码文件,CEAexec-win.zip包含CEA程序的算法可执行文件和所需的数据文件,CEAgui-jar.zip为CEA用户界面包。将后面两者解压放到同一个文件夹,运行.bat脚本便能执行CEA图形程序。整个程序运行过程中涉及到的文件如表1所示。通过分析,原始文件中除去“trans.lib”、 “thermo.lib”、“FCEA2.exe”,其余都是为配置中间生成的问题文件“*.inp”服务,将文件“* .inp”作为核心算法程序“FCEA2.exe”的输入便可得到结果输出文件“*.out”。

表1 官方windows版本压缩文件及作用

2 基于Java Web的程序移植

由于“CEAgui.jar”只是用于配置问题参数客户端界面,因此也可以开发不同的界面程序,来对配置问题输入文件,再调用核心算法程序得到结果。考虑到跨平台的各类终端使用,确立使Java Servlet技术来开发基于Web的应用程序。

2.1 移植可行性分析

程序的移植的方法主要有源代码移植和二进制移植两种方法,源代码移植通过修改环境相关的部分源代码,可使程序适应多种工作环境;二进制移植是指将软件从原环境移植到目标环境,不但能正确运行,而且与其在原环境下表现一致[9]。文献提到一种基于VC的CEA程序调用方式,这种方法为源代码移植。简而言之是将CEA的Fortran源码进行部分修改然后重新编译成动态链接库,使用VC对动态链接库进行调用。因为CEA算法内部函数之间的参数传递复杂,使用这种方法的弊端在于修改源码后容易造成不可预计的错误。

图2 CEA程序用户界面

CEA算法在半个世纪以来,得到了空气动力学以及热力学研究者的广泛认可。因此为保证移植的可靠性,应该在不修改算法源码的基础上,对程序进行二次开发。CEA软件对算法和用户界面有很好的分层,可以只对用户界面移植而且不需要修改任何算法源码。需要解决的问题之一是对算法的可执行文件调用,在 Java中可以使用“java.lang.Runtime”类获得当前程序的运行时,使用运行时可以实现对可执行文件“.exe”的调用并获得一个进程,同时在“java.lang.Process”类的配合下能够与该进程进行交互;需要解决的另一个问题是配置文件的生成,Java能够方便地进行文件读写操作,并且配置文件的语法格式在用户手册[6]中已经有详细的介绍。

通过研究分析可以得到CEA图形界面程序的计算流程,如图3所示,在程序中配置生成物是可选的,其中包括指定生成物、忽略生成物、插入生成物。插入生成物指选择可能的凝结物,虽然不影响最终的计算结果,但是在某些情况下能加快算法的收敛。“*.inp”与“*.out”文件在表1中有相应的解释,实际上可以参照CEA用户手册[6]手动对“*.inp”进行合法的添加与修改。

软件良好的交互性与易用性能提高工作的效率,官方的CEA图形界面程序在新的操作系统兼容性较差,同时界面组织复杂对非专业使用者不友好。使用Web技术能让CEA工作在任何支持浏览器的终端上面,Java的Servlet技术能生成动态Web内容并且能够交互式浏览和修改数据。

图3 CEA程序计算流程

面向对象编程的Java语言除了能对可执行文件进行调用,还能够方便地进行文件读写操作。在Java EE中,使用已有的基础能十分便捷地开发API,将CEA算法程序进行封装,使用一个Servlet来处理客户端API请求,API Servlet解析客户端请求的问题信息,并且将计算结果返回给客户端。客户端根据规范的接口定义调用服务器提供的CEA算法接口,输入问题描述字符串语句,接口返回计算结果数据。

根据以上的分析,将程序使用二进制移植方法完整移植到Java Web应用中是完全可行的。

2.2 开发环境及应用框架

选用流行的Eclipse作为开发平台,应用采用Servlet+JSP技术开发。在Java Web的开发中可以使用多种支持Servlet技术的服务器,Tomcat是其中的一个。因为开源和免费的特性,使得用户可以自由无障碍地下载、安装、使用Tomcat,这也是Tomcat能够被广泛使用的重要原因之一。在项目中我们选用Tomcat作为Web应用服务器。

移植的Web应用目标框架如图4所示,客户端浏览器发出请求;HTTP服务器处理请求后再将请求递交给Java虚拟机中的Servlet对象;Servlet对象将请求的内容包装成配置文件,并且调用CEA核心算法;CEA算法处理配置文件,并且生成结果文件;Servlet对象等待结果文件的生成,接着读取数据,将数数据封装成请求返回给HTTP服务器;HTTP服务器收到请求后再将请求传递给客户端浏览器。

图4 移植目标整体结构

根据图3的流程,设计的Web主要包含四类页面,分别是问题类型配置,反应物配置,生成物配置以及输出结果配置。每一个页面对应一个Servlet,页面中的数据以Form表单的形式提交,一个页面可能包含多个表单。同时,对于每一个表单对应一个符合JavaBean规范的实体对象。在项目中主要有两个目录,一个是Java源代码目录,另外一个是Web Content目录。

Java代码目录主要包含4个包,分别是“algorithm”,“servlet”, “entity”, “tools”。 “algorithm”包中主要是对CEA程序的调用代码,“entity”中是对应页面表单的数据对象,“servlet”中包含的是处理各个页面请求的servlet类,“tools”包含的是文件操作等工具类。Web Content目录中包含四类文件及目录,“CEAcore”目录包含的是CEA程序可执行文件及依赖数据文件;“Download”用于在程序运行后为每个用户存放临时数据,这些数据可供用户下载;“META-INF”、“WEB-INF”、“static”这3个目录包含页面配置信息,依赖包以及静态资源等;根目录下“*.jsp”文件是相应的网页页面。

对CEA算法可执行文件的调用是项目中最关键的一步,使用 Java的运行时可以十分方便地实现。在“java.lang.Runtime”类的“exec”方法中包括3个参数,第一个是指令,第二个是环境变量设置,第三个是当前的工作路径。调用的流程如下,首先指定指令为包含绝对路径的“FCEA2.exe”,还指定了当前的工作路径为“java.lang.File”类型的workpath。通过执行该指令获得一个“java.lang.Process”类型的对象“localProcess”,也就是CEA算法的子进程。然后使用“localProcess”的“getOutputStream”方法获得该进程的标准输出流,接着使用“java.io.PrintWriter”类的“println”方法指定带绝对路径的输入文件名,也就是“*.inp”文件的位置。执行“FCEA2.exe”,并且输入“*.inp”文件的路径。调用完成后在“*.inp”文件的目录中会生成一个前缀相同的“*.out”文件。

2.3 支持多用户及构建API

为保证系统能在多用户下正常工作,把用户访问服务器Session的唯一ID值作为临时工作目录名,每个用户只能访问对应服务器工作目录中的资源,在用户访问结束或达到指定时限自动删除临时目录及文件。实现了多个用户独立访问,保证了用户数据的安全。

为提高CEA程序二次开发的便利性,将所有问题配置封装成一个URL API。因为请求的数据结构复杂,所以选用JSON的数据格式进行封装,请求端以POST方式向服务器发送请求。程序中使用一个APIServlet来处理API请求,首先解析JSON数据为相应的Bean对象,然后根据Bean对象配置输入问题文件,接着调用CEA算法处理问题文件,最后将输入数据以及计算结果以JSON格式返回给接口调用者。

3 算例试算

将项目部署到Tomcat服务器上,便可以使用浏览器访问,目前项目已经部署到万维网服务器[10]。应用的使用流程如图5,在首页可以选择查看示例、上传问题文件或者新建一个问题文件,共3个选项。

图5 CEA Web应用使用流程

图6为示例问题,第一段以“problem”开始,指定了案例名称为“Example-1”,问题类型为“tp”(恒温恒压),压力为“1,0.1,0.01”个大气压,温度为“3000,2000”开尔文,化学当量比为“1,1.5”;第二段以“reac”开始,指定了反应物及物质的量,燃料为“H2”,量为1摩尔,氧化剂为“Air”(空气),量为1摩尔;第三段以“only”开始,指定了生成物的成分;第四段以“output”开始,指定输出数据单位;问题以“end”结束。在输入文件中,字段“problem”、 “reac”、 “end”是必须的,字段 “only”、“omit”、“insert”、“output”是可选的。

图6 恒温恒压问题配置文本示例

上述问题可以写入文本文件,并且将后缀改为“.inp”,然后通过上传选项获得结果。也可以使用CEA Web新建问题配置数据获得结果,Web界面如图7所示,配置的简要过程如下:

1)在“problem”页面输入ID为“Example-1”;选择类型为tp;在氧燃混合物中选择当量比并输入值为“1,1.5”; 保存。

2)在“tp problem”页面选择温度单位为“Kelvin”,值为“3000,2000”;选择压强单位为“atm”,值为“1,0.1,0.01”; 保存。

3)在“reactant”页面选择成分单位为“moles”,反应物为“H2”,“Air”,数量都为“1”;保存。

4)在“only”页面指定生成物的成分;保存。

5)在“output”页面选择能量单位为“calories”,求解。

6)在“problem and result”页面可以查看和下载问题文件与求解结果文件。

图7 CEA Web应用界面

对于API的调用,在CEA Web[10]上可查看接口规范。开发人员只需将配置详情按照API规范以JSON格式发出POST请求,服务器将返回带有问题与结果详情以及文件下载路径的JSON数据。

JSON数据内容主要包含两个部分,一个部分是“problempath”,包含文件名以及文件的相对路径,将输入/输出文名与输入/输出文件路径拼接可得到文件在服务器的相对路径,进一步与服务器主机地址拼接可得到输入/输出文件的下载地址。因为程序将会通过服务器保留的Session检验请求者的下载地址是否合法,以此保证数据不会被其他用户获得,确保了用户数据的安全性。另一个部分是“problemresult”,包含问题字符串和结果字符串。开发人员根据需要获得问题与结果的字符串或者通过下载链接得到文本文件。

4 结束语

CEA是一款开源的计算化学平衡程序,广泛应用于空气动力学和热力学的研究当中。本文介绍了CEA桌面应用程序的主要结构及工作流程,并且使用Servlet技术完整移植到了Web平台中,支持用户在任何具有浏览器的终端使用。同时,对CEA算法进行了封装,为开发人员提供统一的应用程序编程接口API,方便将算法集成到其他大型系统中。接下来,将进一步改善用户交互界面,对输出结果文件进行分析,把各个部分用可视化图表呈现出来。

猜你喜欢
调用页面客户端
你的手机安装了多少个客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
刷新生活的页面
答案
让Word同时拥有横向页和纵向页
核电项目物项调用管理的应用研究
系统虚拟化环境下客户机系统调用信息捕获与分析①
媒体客户端的发展策略与推广模式
新华社推出新版客户端 打造移动互联新闻旗舰
利用RFC技术实现SAP系统接口通信