APP下载

利用JNA技术对多语言测井应用程序集成方式的改进

2013-12-03原野尚福华曹茂俊

测井技术 2013年1期
关键词:调用底层应用程序

原野,尚福华,曹茂俊

(东北石油大学,黑龙江 大庆163318)

0 引 言

新一代测井软件 CIFLog[1]是基于Java-Net-Beans计算机技术开发的第三代测井处理解释系统,是国际上首个可以同时在 Windows、Linux和Unix等3大操作系统下高效运行的大型测井软件平台。平台采用开放的Java语言,完全模块化设计思想,充分实现了勘探与生产解释一体化、网络与本地访问一体化[2]、单井与多井处理一体化以及真正意义上的跨操作系统运行能力。

为保证一体化平台的顺利推广,需要兼顾目前已形成的测井解释工作习惯,并把已有的一些优秀测井解释方法集成进平台中[3],使一体化平台[4-6]最大限度地实现知识复用。早期的测井软件和测井方法,如国内的 CifSun、Forward[7]和 Lead[8],国外斯伦贝谢公司的GeoFrame[9]、阿特拉斯公司的eX-press[10]、哈里伯顿公司的Petrosite PRO等都是采用Fortran、C/C++语言编写。把已有的一些测井解释方法添加到CIFLog平台中,用Java语言重新编写工作量大,而且随着项目的推广,会有越来越多的测井软件需要移植到一体化平台中来,所以为提高开发效率,同时保证测井软件方便、稳定地集成到平台中,一体化平台需要建立多语言测井应用程序集成机制。

1 多语言集成方式

Java语言在访问其他编程语言时先后提供了Java Native Interface(JNI)技术和Java Native Access(JNA)技术2种方式。夏守姬[11]和刘英明[12]详细讨论了JNI技术在CIFLog平台应用软件集成中的应用。JNI技术使Java语言和其他语言可进行双向调用,即通过JNI技术Java程序可以调用其他语言程序,并且其他语言程序也可以调用Java程序,因此一体化平台中的双向调用通常采用JNI技术,但是JNI技术在可移植性、错误检查、内存管理等方面存在着不足。而JNA技术是一个开源的Java框架,是建立在JNI基础之上的Java平台类库,克服了JNI在可移植性、错误检查、内存管理方面存在的诸多不足。所以,文本主要讨论利用JNA技术对多语言测井应用程序集成方式的改进与发展。当一个测井软件平台同时提供JNI和JNA这2种应用程序集成方式时,可以最大限度地满足用户的各类不同需求。

2 JNA技术优势

JNA技术是建立在JNI基础之上的Java平台类库,解决了JNI技术存在的诸多不足。对于测井应用集成,特别研究了JNA和JNI技术的6点差异,并在一体化测井软件平台底层开发中充分加以扩展应用。

(1)在JNI使用中的微小错误会使Java虚拟机(Java Virtual Machine,JVM)崩溃,并且没有任何错误信息,很难进行调试;而JNA只针对调用函数实现相应的Java接口,不需要Java开发人员脱离Java运行环境,出现错误容易定位,并可以快速解决错误,并且JNA支持虚拟机崩溃保护机制(VM Crash Protection)[13]。

(2)依赖JNI的应用程序失去了Java提供的平台可移植性,JNI需要针对不同的操作系统编写不同的JNI适配器[14]实现(适配器代码是使用C语言对本地代码进行二次包装,实现Java语言和本地代码的调用),并且需要在应用程序运行时正确地加载,而JNA会自动生成代理对象,不需要编写适配器代码,只需要重新编译本地代码,就可以在不同操作系统中运行,目前JNA可以在 Mac OS X,Microsoft Windows,Solaris和Linux等系统下运行[15]。

(3)JNI框架没有为本地执行代码分配的非Java虚拟机(non-JVM)内存资源提供动态的垃圾回收机制[16],因此本地代码必须显示地释放所有它所申请的内存资源,而JNA为本地函数指针自动生成Java代理类,代理模式隐藏了本地代码集成的复杂性,并且所有申请的内存都由JNA统一管理。

(4)JNI技术不支持Java语言所提供的新特性,如新输入输出(New I/O,NIO)等,但是JNA对这些新特性都提供了很好的支持。

(5)Java和C/C++中数据类型长度可能不一致,譬如char型在C/C++里是8bit,而在Java里是16bit,以及C/C++有指针而Java里没指针,使用JNI技术需要用C语言编写适配器在C语言中映射Java的数据类型。但是JNA技术提供了一个动态的C语言编写的转发器,可以自动实现Java和C之间的数据类型映射。数据类型自动映射[17]关系见表1。

表1 数据类型匹配表

(6)JNI技术调用其他语言时,首先需要使用C语言编写适配器,使用JNI规定的数据结构映射C语言的数据结构,再调用已有的集成程序中公布的函数,然后在Java中载入适配器,再编写Java native函数作为集成程序中函数的代理,经过上述繁琐的步骤后才能在Java中调用集成程序中的函数。而JNA不需要编写适配器,只需要在Java中编写接口类作为代理就可以在Java程序中调用集成程序中公布的函数。所以JNA技术使Java程序更容易访问集成程序中的函数,使用JNA技术可以更高效、快速、稳定地开发大型软件平台。

3 利用JNA技术对多语言测井应用程序集成方式改进

3.1 一体化平台多语言应用程序集成

(1)根据测井集成程序中地导出函数在Java中编写对应接口类,每个导出函数对应1个接口,没有调用的函数不需要声明Java接口,并在接口类中定义invoke函数,函数的参数类型要与数据类型匹配表相一致。

(2)使用JNA类库的Native类的loadLibrary工厂方法创建集成程序的代理对象,使用代理模式隐藏本地代码集成的复杂性[18]。

(3)JNA通过代理对象可以调用集成程序中发布的函数,即使用集成程序中的方法处理对平台底层数据进行处理,处理结束后把结果作为参数返回或者直接写回到平台数据底层,从而实现一体化平台调用集成程序。

3.2 多语言测井应用程序调用平台中函数

(1)在集成程序中声明需要调用Java函数的函数指针,即在集成程序中定义接口类。

(2)针对集成程序的函数指针,在Java中定义接口,并添加invoke方法,方法参数与函数指针中声明的参数相对应,并添加该接口的实现类。

(3)在平台中创建接口实现类的实例对象,并作为参数传递给集成程序,在集成程序中通过从Java中传递的参数调用Java函数,从而通过JNA回调机制实现集成程序调用平台中的Java函数。

3.3 多语言测井应用程序与一体化平台数据通信

平台通过数据访问接口访问底层数据,实现多语言测井应用程序与一体化平台之间的数据通信,数据底层格式是基于广义测井曲线理论[19],在充分吸取Cif[20]数据格式优点的基础上进行发展和完善形成了升级版Cifplus格式。平台通过数据访问接口访问Cifplus数据底层,平台数据底层提供了数据缓存机制,大大提高了集成程序读取/写入平台底层数据的速度,所以平台使用JNA把底层读取的数据作为参数传递给集成程序进行计算处理,处理完成后,返回参数或者把数据结果传回一体化平台,通过平台提供的数据访问接口和缓存机制把数据回写入数据底层。

3.4 JNA管理层设计思想

根据集成程序中公布的函数在一体化平台中定义统一的接口,集成程序的每个测井方法对应1个Java接口,CIFLog平台只针对接口进行调用,而不依赖于集成程序的具体实现。保证遵循该标准编写的集成程序均能加载到一体化测井平台中,当增加新的集成程序或者集成程序中测井算法更新后,只需要重新编译集成程序,不需要修改CIFLog平台接口。所有集成程序统一放到CIFLog平台的资源目录下,CIFLog平台调用集成程序中测井方法时JNA管理层会把要使用的集成程序按组动态加载进平台中。JNA管理层把数据底层中测井数据传递给集成程序中测井方法进行处理,处理结束后把处理结果返回到数据底层,同时发送消息给绘图对绘图对象进行刷新。

如图1所示,每个集成程序都对应1个组,组表示集成程序的分类,是同类集成程序的集合。JNA管理层框架通过Java接口创建集成程序的代理对象,把集成程序加载进平台中,代理对象隐藏了代码集成的复杂性,平台中的其他模块可以通过JNA管理层中Java接口的代理对象直接调用集成程序中的相应函数。

图1 JNA集成框架

4 应用实例

为方便集成各种处理方法,一体化平台支持Fortran、C\C++、C#等语言。以中国石油集团长城钻探工程有限公司的人工交互时差提取模块集成到一体化平台为例。CIFLog集成后的时差提取PAAT-A DATA EDITOR模块可共享平台数据底层和绘图,其中曲线DTCT1R,DTCT2R,DTST1R,DTST2R可被编辑,称为主曲线。主曲线分别又对应了1条副本曲线,两者的曲线值完全相同。在编辑曲线状态,选中某1条主曲线的曲线头之后,该曲线变成红色,所有的编辑工作都在主曲线所对应的副本曲线上进行。在编辑过程中,用户根据STC二维曲线和其他曲线的走向(例如GR、SP等),在副本曲线附近、幔度值最可能的位置点击鼠标左键,设置曲线新的走向。然后点击右键调用集成程序中测井方法,JNA管理层会把对应深度段的曲线数据作为参数传入集成程序中。处理方法会在这些设置点附近若干点内重新搜索一个波列相关性最好的幅度值,并把处理结果返回到平台,使处理后的深度段数据替换掉原有的副本曲线。同时刷新绘图,井眼补偿后的曲线在该深度段的走势也会发生变化,实现了JNA调用集成程序中处理方法,并与平台的数据底层、绘图的交互。

目前,平台已完成PAAT-A DATA EDITOR模块的开发,实现了原有人工交互时差提取处理解释的功能。利用平台集成后的PAAT-A DATA EDITOR模块对多口井进行了处理解释,已基本实现了与原有应用程序处理结果相同的效果,并在一些功能上对原有处理解释程序进行了扩充。图2为平台PAAT-A DATA EDITOR模块的图形界面。

5 结 论

(1)利用JNA技术对多语言测井应用程序集成解决了JNI技术在可移植性、错误检查、内存管理等方面存在的不足,JNA技术在一体化平台应用大大减少了开发工作量,提高了平台的健壮性和可移植性。

(2)JNA是对JNI的进一步封装,JNI在调用效率上比JNA高,而且JNI技术支持Java语言与其他编程语言之间的双向调用,而JNA只支持Java语言调用其他编程语言程序,所以一体化平台中对于JNI的集成方式也是必不可少的。

[1] 中国石油第三代测井软件CIFLog成功发布[J].石油学报,2011,32(3):494.

[2] 赵亦朋,王才志,黄亭宇.基于SOA的测井解释平台中间层设计[J].石油学报,2008,29(5):782-785.

[3] 陆大卫,张世刚.测井软件走集成化道路[J].测井技术,1996,20(1):5-11.

[4] 屈科文,李增智,王立,等.一种基于Internet的业务平台体系结构[J].计算机应用研究,2004,21(3):181-182.

[5] 袁婷,罗谦,周明天.一种基于 UNIX环境的中间业务平台的设计和实现[J].计算机应用研究,2003,20(10):122-124.

[6] 张明强,缪淮扣.中间业务平台的设计与实现[J].计算机应用研究,2003,20(2):154-157.

[7] 金勇,张世刚,顾列刚,等.FORWARD测井解释平台中使用的先进技术[J].测井技术,2000,24(1):64-70,78.

[8] Yu Chunhao,Li Changwen.Development of LEAD System and Its Application[J].Well Logging Technology,2005,29(5):396-398.

[9] 黄芳.GeoFrame数据库管理问题分析与研究[J].石油仪器,2005,19(5):77-80.

[10] 陈建清.eXpress测井评价软件的应用特色[J].国土资源科技管理,2004(4):77-80.

[11] 夏守姬,李宁,李伟忠,等.Java测井平台上多语言应用集成框架设计[J].石油学报,2010,31(5):810-814.

[12] 刘英明,李宁,张玲,等.基于JNI技术C++测井应用程序集成方法[J].石油学报,2009,30(6):980-984.

[13] Java Native Access(JNA)[EB/OL].https:∥github.com/twall/jna#readme.

[14] Ernst Juhnke,Seiler.LCDL:An Extensible Framework for Wrapping Legacy Code[C]∥Kuala Lumpur,Malaysia, Association for Computing Machinery,2009:648-652.

[15] Java Native Access(JNA)[EB/OL].http:∥en.wikipedia.org/wiki/Java_Native_Access.

[16] Java Native Interface (JNI)[EB/OL].http:∥en.wikipedia.org/wiki/Java_Native_Interface.

[17] Gao Yongping,Guan Fenfen.The Interface Design of Cross-platform in Meteorological Operations[C]∥IEEE:8675-8678.

[18] Anthony Ferreira La Marca,Dias D R C.Integrating Interaction Resources in the Graphics Clusters[C]∥Seoul,Republic of Korea,IEEE Computer Society:310-313.

[19] Li Ning.A High Efficient and Low Cost Exploration Data Management System[C]∥SPE 104453,2006.

[20] 陆大卫,李宁.工作站多井处理的实现[J].测井技术,1996,20(2):79-87.

猜你喜欢

调用底层应用程序
航天企业提升采购能力的底层逻辑
核电项目物项调用管理的应用研究
删除Win10中自带的应用程序
LabWindows/CVI下基于ActiveX技术的Excel调用
谷歌禁止加密货币应用程序
基于系统调用的恶意软件检测技术研究
回到现实底层与悲悯情怀
中国底层电影研究探略
利用RFC技术实现SAP系统接口通信
略论“底层”