国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

利用JNA技術(shù)對(duì)多語(yǔ)言測(cè)井應(yīng)用程序集成方式的改進(jìn)

2013-12-03 10:29原野尚福華曹茂俊
測(cè)井技術(shù) 2013年1期
關(guān)鍵詞:調(diào)用底層應(yīng)用程序

原野,尚福華,曹茂俊

(東北石油大學(xué),黑龍江 大慶163318)

0 引 言

新一代測(cè)井軟件 CIFLog[1]是基于Java-Net-Beans計(jì)算機(jī)技術(shù)開發(fā)的第三代測(cè)井處理解釋系統(tǒng),是國(guó)際上首個(gè)可以同時(shí)在 Windows、Linux和Unix等3大操作系統(tǒng)下高效運(yùn)行的大型測(cè)井軟件平臺(tái)。平臺(tái)采用開放的Java語(yǔ)言,完全模塊化設(shè)計(jì)思想,充分實(shí)現(xiàn)了勘探與生產(chǎn)解釋一體化、網(wǎng)絡(luò)與本地訪問(wèn)一體化[2]、單井與多井處理一體化以及真正意義上的跨操作系統(tǒng)運(yùn)行能力。

為保證一體化平臺(tái)的順利推廣,需要兼顧目前已形成的測(cè)井解釋工作習(xí)慣,并把已有的一些優(yōu)秀測(cè)井解釋方法集成進(jìn)平臺(tái)中[3],使一體化平臺(tái)[4-6]最大限度地實(shí)現(xiàn)知識(shí)復(fù)用。早期的測(cè)井軟件和測(cè)井方法,如國(guó)內(nèi)的 CifSun、Forward[7]和 Lead[8],國(guó)外斯倫貝謝公司的GeoFrame[9]、阿特拉斯公司的eX-press[10]、哈里伯頓公司的Petrosite PRO等都是采用Fortran、C/C++語(yǔ)言編寫。把已有的一些測(cè)井解釋方法添加到CIFLog平臺(tái)中,用Java語(yǔ)言重新編寫工作量大,而且隨著項(xiàng)目的推廣,會(huì)有越來(lái)越多的測(cè)井軟件需要移植到一體化平臺(tái)中來(lái),所以為提高開發(fā)效率,同時(shí)保證測(cè)井軟件方便、穩(wěn)定地集成到平臺(tái)中,一體化平臺(tái)需要建立多語(yǔ)言測(cè)井應(yīng)用程序集成機(jī)制。

1 多語(yǔ)言集成方式

Java語(yǔ)言在訪問(wèn)其他編程語(yǔ)言時(shí)先后提供了Java Native Interface(JNI)技術(shù)和Java Native Access(JNA)技術(shù)2種方式。夏守姬[11]和劉英明[12]詳細(xì)討論了JNI技術(shù)在CIFLog平臺(tái)應(yīng)用軟件集成中的應(yīng)用。JNI技術(shù)使Java語(yǔ)言和其他語(yǔ)言可進(jìn)行雙向調(diào)用,即通過(guò)JNI技術(shù)Java程序可以調(diào)用其他語(yǔ)言程序,并且其他語(yǔ)言程序也可以調(diào)用Java程序,因此一體化平臺(tái)中的雙向調(diào)用通常采用JNI技術(shù),但是JNI技術(shù)在可移植性、錯(cuò)誤檢查、內(nèi)存管理等方面存在著不足。而JNA技術(shù)是一個(gè)開源的Java框架,是建立在JNI基礎(chǔ)之上的Java平臺(tái)類庫(kù),克服了JNI在可移植性、錯(cuò)誤檢查、內(nèi)存管理方面存在的諸多不足。所以,文本主要討論利用JNA技術(shù)對(duì)多語(yǔ)言測(cè)井應(yīng)用程序集成方式的改進(jìn)與發(fā)展。當(dāng)一個(gè)測(cè)井軟件平臺(tái)同時(shí)提供JNI和JNA這2種應(yīng)用程序集成方式時(shí),可以最大限度地滿足用戶的各類不同需求。

2 JNA技術(shù)優(yōu)勢(shì)

JNA技術(shù)是建立在JNI基礎(chǔ)之上的Java平臺(tái)類庫(kù),解決了JNI技術(shù)存在的諸多不足。對(duì)于測(cè)井應(yīng)用集成,特別研究了JNA和JNI技術(shù)的6點(diǎn)差異,并在一體化測(cè)井軟件平臺(tái)底層開發(fā)中充分加以擴(kuò)展應(yīng)用。

(1)在JNI使用中的微小錯(cuò)誤會(huì)使Java虛擬機(jī)(Java Virtual Machine,JVM)崩潰,并且沒(méi)有任何錯(cuò)誤信息,很難進(jìn)行調(diào)試;而JNA只針對(duì)調(diào)用函數(shù)實(shí)現(xiàn)相應(yīng)的Java接口,不需要Java開發(fā)人員脫離Java運(yùn)行環(huán)境,出現(xiàn)錯(cuò)誤容易定位,并可以快速解決錯(cuò)誤,并且JNA支持虛擬機(jī)崩潰保護(hù)機(jī)制(VM Crash Protection)[13]。

(2)依賴JNI的應(yīng)用程序失去了Java提供的平臺(tái)可移植性,JNI需要針對(duì)不同的操作系統(tǒng)編寫不同的JNI適配器[14]實(shí)現(xiàn)(適配器代碼是使用C語(yǔ)言對(duì)本地代碼進(jìn)行二次包裝,實(shí)現(xiàn)Java語(yǔ)言和本地代碼的調(diào)用),并且需要在應(yīng)用程序運(yùn)行時(shí)正確地加載,而JNA會(huì)自動(dòng)生成代理對(duì)象,不需要編寫適配器代碼,只需要重新編譯本地代碼,就可以在不同操作系統(tǒng)中運(yùn)行,目前JNA可以在 Mac OS X,Microsoft Windows,Solaris和Linux等系統(tǒng)下運(yùn)行[15]。

(3)JNI框架沒(méi)有為本地執(zhí)行代碼分配的非Java虛擬機(jī)(non-JVM)內(nèi)存資源提供動(dòng)態(tài)的垃圾回收機(jī)制[16],因此本地代碼必須顯示地釋放所有它所申請(qǐng)的內(nèi)存資源,而JNA為本地函數(shù)指針自動(dòng)生成Java代理類,代理模式隱藏了本地代碼集成的復(fù)雜性,并且所有申請(qǐng)的內(nèi)存都由JNA統(tǒng)一管理。

(4)JNI技術(shù)不支持Java語(yǔ)言所提供的新特性,如新輸入輸出(New I/O,NIO)等,但是JNA對(duì)這些新特性都提供了很好的支持。

(5)Java和C/C++中數(shù)據(jù)類型長(zhǎng)度可能不一致,譬如char型在C/C++里是8bit,而在Java里是16bit,以及C/C++有指針而Java里沒(méi)指針,使用JNI技術(shù)需要用C語(yǔ)言編寫適配器在C語(yǔ)言中映射Java的數(shù)據(jù)類型。但是JNA技術(shù)提供了一個(gè)動(dòng)態(tài)的C語(yǔ)言編寫的轉(zhuǎn)發(fā)器,可以自動(dòng)實(shí)現(xiàn)Java和C之間的數(shù)據(jù)類型映射。數(shù)據(jù)類型自動(dòng)映射[17]關(guān)系見表1。

表1 數(shù)據(jù)類型匹配表

(6)JNI技術(shù)調(diào)用其他語(yǔ)言時(shí),首先需要使用C語(yǔ)言編寫適配器,使用JNI規(guī)定的數(shù)據(jù)結(jié)構(gòu)映射C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu),再調(diào)用已有的集成程序中公布的函數(shù),然后在Java中載入適配器,再編寫Java native函數(shù)作為集成程序中函數(shù)的代理,經(jīng)過(guò)上述繁瑣的步驟后才能在Java中調(diào)用集成程序中的函數(shù)。而JNA不需要編寫適配器,只需要在Java中編寫接口類作為代理就可以在Java程序中調(diào)用集成程序中公布的函數(shù)。所以JNA技術(shù)使Java程序更容易訪問(wèn)集成程序中的函數(shù),使用JNA技術(shù)可以更高效、快速、穩(wěn)定地開發(fā)大型軟件平臺(tái)。

3 利用JNA技術(shù)對(duì)多語(yǔ)言測(cè)井應(yīng)用程序集成方式改進(jìn)

3.1 一體化平臺(tái)多語(yǔ)言應(yīng)用程序集成

(1)根據(jù)測(cè)井集成程序中地導(dǎo)出函數(shù)在Java中編寫對(duì)應(yīng)接口類,每個(gè)導(dǎo)出函數(shù)對(duì)應(yīng)1個(gè)接口,沒(méi)有調(diào)用的函數(shù)不需要聲明Java接口,并在接口類中定義invoke函數(shù),函數(shù)的參數(shù)類型要與數(shù)據(jù)類型匹配表相一致。

(2)使用JNA類庫(kù)的Native類的loadLibrary工廠方法創(chuàng)建集成程序的代理對(duì)象,使用代理模式隱藏本地代碼集成的復(fù)雜性[18]。

(3)JNA通過(guò)代理對(duì)象可以調(diào)用集成程序中發(fā)布的函數(shù),即使用集成程序中的方法處理對(duì)平臺(tái)底層數(shù)據(jù)進(jìn)行處理,處理結(jié)束后把結(jié)果作為參數(shù)返回或者直接寫回到平臺(tái)數(shù)據(jù)底層,從而實(shí)現(xiàn)一體化平臺(tái)調(diào)用集成程序。

3.2 多語(yǔ)言測(cè)井應(yīng)用程序調(diào)用平臺(tái)中函數(shù)

(1)在集成程序中聲明需要調(diào)用Java函數(shù)的函數(shù)指針,即在集成程序中定義接口類。

(2)針對(duì)集成程序的函數(shù)指針,在Java中定義接口,并添加invoke方法,方法參數(shù)與函數(shù)指針中聲明的參數(shù)相對(duì)應(yīng),并添加該接口的實(shí)現(xiàn)類。

(3)在平臺(tái)中創(chuàng)建接口實(shí)現(xiàn)類的實(shí)例對(duì)象,并作為參數(shù)傳遞給集成程序,在集成程序中通過(guò)從Java中傳遞的參數(shù)調(diào)用Java函數(shù),從而通過(guò)JNA回調(diào)機(jī)制實(shí)現(xiàn)集成程序調(diào)用平臺(tái)中的Java函數(shù)。

3.3 多語(yǔ)言測(cè)井應(yīng)用程序與一體化平臺(tái)數(shù)據(jù)通信

平臺(tái)通過(guò)數(shù)據(jù)訪問(wèn)接口訪問(wèn)底層數(shù)據(jù),實(shí)現(xiàn)多語(yǔ)言測(cè)井應(yīng)用程序與一體化平臺(tái)之間的數(shù)據(jù)通信,數(shù)據(jù)底層格式是基于廣義測(cè)井曲線理論[19],在充分吸取Cif[20]數(shù)據(jù)格式優(yōu)點(diǎn)的基礎(chǔ)上進(jìn)行發(fā)展和完善形成了升級(jí)版Cifplus格式。平臺(tái)通過(guò)數(shù)據(jù)訪問(wèn)接口訪問(wèn)Cifplus數(shù)據(jù)底層,平臺(tái)數(shù)據(jù)底層提供了數(shù)據(jù)緩存機(jī)制,大大提高了集成程序讀?。瘜懭肫脚_(tái)底層數(shù)據(jù)的速度,所以平臺(tái)使用JNA把底層讀取的數(shù)據(jù)作為參數(shù)傳遞給集成程序進(jìn)行計(jì)算處理,處理完成后,返回參數(shù)或者把數(shù)據(jù)結(jié)果傳回一體化平臺(tái),通過(guò)平臺(tái)提供的數(shù)據(jù)訪問(wèn)接口和緩存機(jī)制把數(shù)據(jù)回寫入數(shù)據(jù)底層。

3.4 JNA管理層設(shè)計(jì)思想

根據(jù)集成程序中公布的函數(shù)在一體化平臺(tái)中定義統(tǒng)一的接口,集成程序的每個(gè)測(cè)井方法對(duì)應(yīng)1個(gè)Java接口,CIFLog平臺(tái)只針對(duì)接口進(jìn)行調(diào)用,而不依賴于集成程序的具體實(shí)現(xiàn)。保證遵循該標(biāo)準(zhǔn)編寫的集成程序均能加載到一體化測(cè)井平臺(tái)中,當(dāng)增加新的集成程序或者集成程序中測(cè)井算法更新后,只需要重新編譯集成程序,不需要修改CIFLog平臺(tái)接口。所有集成程序統(tǒng)一放到CIFLog平臺(tái)的資源目錄下,CIFLog平臺(tái)調(diào)用集成程序中測(cè)井方法時(shí)JNA管理層會(huì)把要使用的集成程序按組動(dòng)態(tài)加載進(jìn)平臺(tái)中。JNA管理層把數(shù)據(jù)底層中測(cè)井?dāng)?shù)據(jù)傳遞給集成程序中測(cè)井方法進(jìn)行處理,處理結(jié)束后把處理結(jié)果返回到數(shù)據(jù)底層,同時(shí)發(fā)送消息給繪圖對(duì)繪圖對(duì)象進(jìn)行刷新。

如圖1所示,每個(gè)集成程序都對(duì)應(yīng)1個(gè)組,組表示集成程序的分類,是同類集成程序的集合。JNA管理層框架通過(guò)Java接口創(chuàng)建集成程序的代理對(duì)象,把集成程序加載進(jìn)平臺(tái)中,代理對(duì)象隱藏了代碼集成的復(fù)雜性,平臺(tái)中的其他模塊可以通過(guò)JNA管理層中Java接口的代理對(duì)象直接調(diào)用集成程序中的相應(yīng)函數(shù)。

圖1 JNA集成框架

4 應(yīng)用實(shí)例

為方便集成各種處理方法,一體化平臺(tái)支持Fortran、C\C++、C#等語(yǔ)言。以中國(guó)石油集團(tuán)長(zhǎng)城鉆探工程有限公司的人工交互時(shí)差提取模塊集成到一體化平臺(tái)為例。CIFLog集成后的時(shí)差提取PAAT-A DATA EDITOR模塊可共享平臺(tái)數(shù)據(jù)底層和繪圖,其中曲線DTCT1R,DTCT2R,DTST1R,DTST2R可被編輯,稱為主曲線。主曲線分別又對(duì)應(yīng)了1條副本曲線,兩者的曲線值完全相同。在編輯曲線狀態(tài),選中某1條主曲線的曲線頭之后,該曲線變成紅色,所有的編輯工作都在主曲線所對(duì)應(yīng)的副本曲線上進(jìn)行。在編輯過(guò)程中,用戶根據(jù)STC二維曲線和其他曲線的走向(例如GR、SP等),在副本曲線附近、幔度值最可能的位置點(diǎn)擊鼠標(biāo)左鍵,設(shè)置曲線新的走向。然后點(diǎn)擊右鍵調(diào)用集成程序中測(cè)井方法,JNA管理層會(huì)把對(duì)應(yīng)深度段的曲線數(shù)據(jù)作為參數(shù)傳入集成程序中。處理方法會(huì)在這些設(shè)置點(diǎn)附近若干點(diǎn)內(nèi)重新搜索一個(gè)波列相關(guān)性最好的幅度值,并把處理結(jié)果返回到平臺(tái),使處理后的深度段數(shù)據(jù)替換掉原有的副本曲線。同時(shí)刷新繪圖,井眼補(bǔ)償后的曲線在該深度段的走勢(shì)也會(huì)發(fā)生變化,實(shí)現(xiàn)了JNA調(diào)用集成程序中處理方法,并與平臺(tái)的數(shù)據(jù)底層、繪圖的交互。

目前,平臺(tái)已完成PAAT-A DATA EDITOR模塊的開發(fā),實(shí)現(xiàn)了原有人工交互時(shí)差提取處理解釋的功能。利用平臺(tái)集成后的PAAT-A DATA EDITOR模塊對(duì)多口井進(jìn)行了處理解釋,已基本實(shí)現(xiàn)了與原有應(yīng)用程序處理結(jié)果相同的效果,并在一些功能上對(duì)原有處理解釋程序進(jìn)行了擴(kuò)充。圖2為平臺(tái)PAAT-A DATA EDITOR模塊的圖形界面。

5 結(jié) 論

(1)利用JNA技術(shù)對(duì)多語(yǔ)言測(cè)井應(yīng)用程序集成解決了JNI技術(shù)在可移植性、錯(cuò)誤檢查、內(nèi)存管理等方面存在的不足,JNA技術(shù)在一體化平臺(tái)應(yīng)用大大減少了開發(fā)工作量,提高了平臺(tái)的健壯性和可移植性。

(2)JNA是對(duì)JNI的進(jìn)一步封裝,JNI在調(diào)用效率上比JNA高,而且JNI技術(shù)支持Java語(yǔ)言與其他編程語(yǔ)言之間的雙向調(diào)用,而JNA只支持Java語(yǔ)言調(diào)用其他編程語(yǔ)言程序,所以一體化平臺(tái)中對(duì)于JNI的集成方式也是必不可少的。

[1] 中國(guó)石油第三代測(cè)井軟件CIFLog成功發(fā)布[J].石油學(xué)報(bào),2011,32(3):494.

[2] 趙亦朋,王才志,黃亭宇.基于SOA的測(cè)井解釋平臺(tái)中間層設(shè)計(jì)[J].石油學(xué)報(bào),2008,29(5):782-785.

[3] 陸大衛(wèi),張世剛.測(cè)井軟件走集成化道路[J].測(cè)井技術(shù),1996,20(1):5-11.

[4] 屈科文,李增智,王立,等.一種基于Internet的業(yè)務(wù)平臺(tái)體系結(jié)構(gòu)[J].計(jì)算機(jī)應(yīng)用研究,2004,21(3):181-182.

[5] 袁婷,羅謙,周明天.一種基于 UNIX環(huán)境的中間業(yè)務(wù)平臺(tái)的設(shè)計(jì)和實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2003,20(10):122-124.

[6] 張明強(qiáng),繆淮扣.中間業(yè)務(wù)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2003,20(2):154-157.

[7] 金勇,張世剛,顧列剛,等.FORWARD測(cè)井解釋平臺(tái)中使用的先進(jìn)技術(shù)[J].測(cè)井技術(shù),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數(shù)據(jù)庫(kù)管理問(wèn)題分析與研究[J].石油儀器,2005,19(5):77-80.

[10] 陳建清.eXpress測(cè)井評(píng)價(jià)軟件的應(yīng)用特色[J].國(guó)土資源科技管理,2004(4):77-80.

[11] 夏守姬,李寧,李偉忠,等.Java測(cè)井平臺(tái)上多語(yǔ)言應(yīng)用集成框架設(shè)計(jì)[J].石油學(xué)報(bào),2010,31(5):810-814.

[12] 劉英明,李寧,張玲,等.基于JNI技術(shù)C++測(cè)井應(yīng)用程序集成方法[J].石油學(xué)報(bào),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] 陸大衛(wèi),李寧.工作站多井處理的實(shí)現(xiàn)[J].測(cè)井技術(shù),1996,20(2):79-87.

猜你喜歡
調(diào)用底層應(yīng)用程序
航天企業(yè)提升采購(gòu)能力的底層邏輯
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
刪除Win10中自帶的應(yīng)用程序
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
谷歌禁止加密貨幣應(yīng)用程序
基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
回到現(xiàn)實(shí)底層與悲憫情懷
中國(guó)底層電影研究探略
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
略論“底層”