劉長(zhǎng)英
(長(zhǎng)春市公路路政管理局,吉林 長(zhǎng)春 130033)
Java RMI(Remote Method lnvocation遠(yuǎn)程方法調(diào)用)是用Java在JDK1.1中實(shí)現(xiàn)的,它大大增強(qiáng)了Java開發(fā)分布式應(yīng)用的能力。Java作為一種風(fēng)靡一時(shí)的網(wǎng)絡(luò)開發(fā)語言,其巨大的威力就體現(xiàn)在它強(qiáng)大的開發(fā)分布式網(wǎng)絡(luò)應(yīng)用的能力上,而RMI就是開發(fā)百分之百純Java的網(wǎng)絡(luò)分布式應(yīng)用系統(tǒng)的核心解決方案之一。其實(shí)它可以被看作是RPC的Java版本。但是傳統(tǒng)RPC并不能很好地應(yīng)用于分布式對(duì)象系統(tǒng)。而Java RMI則支持存儲(chǔ)于不同地址空間的程序級(jí)對(duì)象之間彼此進(jìn)行通信,實(shí)現(xiàn)遠(yuǎn)程對(duì)象之間的無縫遠(yuǎn)程調(diào)用。RMI目前使用Java遠(yuǎn)程消息交換協(xié)議JRMP(Java Remote Messaging Protocol)進(jìn)行通信。JRMp是專為Java的遠(yuǎn)程對(duì)象制定的協(xié)議。因此,Java RMI具有 Java的“Write Once,Run Anywhere”的優(yōu)點(diǎn),是分布式應(yīng)用系統(tǒng)的百分之百純Java解決方案。RMI與CORBA相比,最大的不同點(diǎn)就是CORBA適合與多種語言之間的通訊。因我們的系統(tǒng)絕大部分都是Java編寫,所以在內(nèi)部通信時(shí)選擇RMI,而沒有選擇CORBA。在對(duì)外接口上,提供RMI和CORBA兩種接口。
多線程使得一個(gè)程序中的多個(gè)過程可以并發(fā)執(zhí)行。多線程的優(yōu)點(diǎn)有兩個(gè)方面。第一,多線層的程序一般能更好地利用資源,第二,多線程更好地解決了許多問題,包括顯示和多任務(wù)的處理。在系統(tǒng)的程序的開發(fā)中,要用到兩種類型的線程。一種是精靈線程。它是屬于服務(wù)線程,它是用于為其它線程提供服務(wù)的,它通常進(jìn)入一個(gè)無窮循環(huán),等待客戶機(jī)請(qǐng)求服務(wù)。當(dāng)余下的活動(dòng)線程只有精靈線程的時(shí)候,Java退出運(yùn)行狀態(tài)。在系統(tǒng)管理程序中,使用精靈線程來定時(shí)喚醒其它的線程,可以起著定時(shí)器的功能。
JDBC是一個(gè)能夠執(zhí)行SQL語句的Java API,它包含一組由Java語言編寫的類和接口,使得程序員能夠使用純Java開發(fā)數(shù)據(jù)庫應(yīng)用。JDBC標(biāo)準(zhǔn)基于刀OPEN的SQL調(diào)用級(jí)接口,它定義了一個(gè)友好的Java界面來與X/ OPEN的SQL調(diào)用級(jí)接口中定義的基本抽象層和基本概念層來進(jìn)行連接。常見的JDBC驅(qū)動(dòng)程序主要是有四種,它們分別是:
JDBe-ODBC Bridge:包含在Sun公司提供的JDBC軟件包中,它是在ODBC的基礎(chǔ)上實(shí)現(xiàn)了JDBC的功能。在使用它之前,必須在系統(tǒng)中配置ODBC。
Native API partly-Java Driver:針對(duì)某種數(shù)據(jù)庫產(chǎn)品的驅(qū)動(dòng)程序,它是在這種數(shù)據(jù)庫產(chǎn)品原有驅(qū)動(dòng)程序的基礎(chǔ)上實(shí)現(xiàn)的。在使用之前,必須在系統(tǒng)安裝這種數(shù)據(jù)庫的驅(qū)動(dòng)程序。
JDBC-Net pure Java Driver:這種驅(qū)動(dòng)程序?qū)⒃贘DBC調(diào)用翻譯成與數(shù)據(jù)庫無關(guān)的網(wǎng)絡(luò)協(xié)議,然后在服務(wù)器端將網(wǎng)絡(luò)協(xié)議翻譯成某種數(shù)據(jù)庫協(xié)議。使用這種驅(qū)動(dòng)程序不需要在客戶端安裝其它軟件,并且能訪問多種數(shù)據(jù)庫。因此,這種驅(qū)動(dòng)程序是與平臺(tái)無關(guān)的,并且與用戶訪問的數(shù)據(jù)庫無關(guān),特別適合在多層結(jié)構(gòu)應(yīng)用軟件體系結(jié)構(gòu)中使用。
Native-protocol pure Java Driver:這種驅(qū)動(dòng)程序?qū)DBC調(diào)用翻譯成某種數(shù)據(jù)庫協(xié)議。不同的數(shù)據(jù)庫廠商開發(fā)不同的驅(qū)動(dòng)程序,以便于用戶能夠使用這種驅(qū)動(dòng)程序快速的訪問自己的數(shù)據(jù)庫產(chǎn)品。這種驅(qū)動(dòng)程序與平臺(tái)無關(guān),但與數(shù)據(jù)庫有關(guān)。
采用Java和JDBC編寫的數(shù)據(jù)庫應(yīng)用程序的開發(fā)者可以做到“編寫一次,隨處可用”。這樣,在開發(fā)網(wǎng)絡(luò)管理的系統(tǒng)中,選擇第三種形式的驅(qū)動(dòng)程序,完成客戶端對(duì)數(shù)據(jù)庫服務(wù)器的信息的獲取。
XML(extensible Markup Language,可擴(kuò)展標(biāo)記語言),它是SGML(standard Generic Marku PLanguage,標(biāo)準(zhǔn)通用標(biāo)記語言)的一個(gè)子集,是當(dāng)前網(wǎng)絡(luò)科技中最流行的技術(shù)之一。
XML文檔由稱為實(shí)體的存儲(chǔ)單元組成,一個(gè)實(shí)體可以引用(refer)其他實(shí)體,將它們包含在文檔中。文檔開始于“根(root)”或文檔實(shí)體中。實(shí)體包含解析數(shù)據(jù)或未解析數(shù)據(jù)。解析數(shù)據(jù)由字符組成,其中一些字符組成字符數(shù)據(jù),另一些字符組成標(biāo)記。標(biāo)記中包含了對(duì)文檔存儲(chǔ)格式 (storage layout)和邏輯結(jié)構(gòu)的描述。邏輯上而言,文檔由聲明、元素、注釋、字符引用和處理指令組成,所有這些都在文檔中用顯式標(biāo)記指明。XML提供了一種機(jī)制用于約束存儲(chǔ)格式和邏輯結(jié)構(gòu)。稱為XML處理器的軟件模塊用于讀取XML文檔,存取其中的內(nèi)容和結(jié)構(gòu)。XML處理器被設(shè)想為是為另一個(gè)稱為應(yīng)用的模塊作處理。
XML文檔中標(biāo)記的功能是描述文檔的存儲(chǔ)格式和邏輯結(jié)構(gòu),并將屬性一值對(duì)和邏輯結(jié)構(gòu)關(guān)聯(lián)起來。XML提供一種稱為文檔類型聲明的機(jī)制,用于定義對(duì)邏輯結(jié)構(gòu)的約束,支持預(yù)定義存儲(chǔ)單元的使用。如果一個(gè)XML文檔有相應(yīng)的文檔類型聲明并且它遵循其中的約束,則稱它是有效的(valid)。但在我們的系統(tǒng)中并不是使用常用的文檔類型定義(document type definition,DTD),而是用Schema。同DTD一樣,schema也提供了一套完整的機(jī)制以約束XML文檔中置標(biāo)的使用,但相比之下,后者基于XML,更具有規(guī)范性。schema利用元素的內(nèi)容和屬性來定義XML文檔的整體結(jié)構(gòu),如哪些元素可以出現(xiàn)在文檔中、元素間的關(guān)系是什么、每個(gè)元素有哪些內(nèi)容和屬性、以及元素出現(xiàn)的順序和次數(shù)等等,都可一目了然。
在Java程序的語言進(jìn)行拓?fù)鋱D形的編輯過程中,不可避免的要進(jìn)行圖形的刷新即調(diào)用rePalnt函數(shù)的工作。這常常會(huì)引起整個(gè)圖形抖動(dòng)。為避免圖形抖動(dòng),我們采用了一種稱為“雙緩沖”的技術(shù)。它的意思是:將在一個(gè)后臺(tái)窗口中繪制圖形并將所繪制的圖形保存在一個(gè)與程序顯示區(qū)域大小相同的存儲(chǔ)空間中。當(dāng)在這個(gè)空間中已繪制好圖形時(shí),才將圖形顯示在程序的可見區(qū)域中。
JNI,Java Native Interface,使得程序員在問題不能單獨(dú)使用Java得到解決情況下,通過由選擇地使用其它編程語言如C或C++實(shí)現(xiàn)一些方法,對(duì)Java的功能進(jìn)行擴(kuò)展。該模塊的Ping和TraceRouter都是用該方法實(shí)現(xiàn)的。它的主要內(nèi)容是:本地方法可以創(chuàng)建、更新并檢查Java對(duì)象;Java可以以參數(shù)的形式向本地方法傳送任何原始數(shù)據(jù)類型或?qū)ο?本地方法可以向Java環(huán)境返回原始的數(shù)據(jù)類型或?qū)ο?Java實(shí)例或類方法可以在本地方法中進(jìn)行調(diào)用;本地方法可以實(shí)現(xiàn)同步以支持多線程訪問。
[1]彭永林,郝振武,熊泳,龔雪云,王煒.網(wǎng)絡(luò)管理方法及網(wǎng)絡(luò)管理系統(tǒng).中興通訊股份有限公司,2011-09-28.
[2]何平.網(wǎng)絡(luò)管理功能擴(kuò)展研究及系統(tǒng)實(shí)現(xiàn)[J].西南交通大學(xué),2008-04-01.