專(zhuān)利名稱:加載類(lèi)以及創(chuàng)建和訪問(wèn)類(lèi)的對(duì)象的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種加載類(lèi)以及創(chuàng)建和訪問(wèn)類(lèi)的對(duì)象的方法和裝置。
背景技術(shù):
隨著微電子技術(shù)的不斷發(fā)展,集成電路的集成度飛速提高,智能卡技術(shù)也在向著 更快,更大量容量發(fā)展。NGMS(Next GenerationMega SIM :下一代大容量用戶身份模塊)卡 已經(jīng)具有l(wèi)-2G的快閃存儲(chǔ)器、64-128M的RAM和200腿z的CPU,以及相應(yīng)的高速率通訊機(jī) 制,相應(yīng)的軟件系統(tǒng)也在日新月異的提高。 目前面臨的最大問(wèn)題是,NGMS卡沒(méi)有移動(dòng)終端上與生倶來(lái)的諸如顯示屏、鍵盤(pán)、揚(yáng) 聲器等這樣的用戶接口 (UI)設(shè)備,導(dǎo)致NGMS卡上的應(yīng)用需要與用戶交互時(shí)處理起來(lái)非常 復(fù)雜,即NGMS卡需要具有DCI接口 ,以及移動(dòng)終端需要具有對(duì)應(yīng)的DCI模塊。
為了簡(jiǎn)化NGMS卡上的應(yīng)用與用戶交互時(shí)的處理,人們很容易就想到將現(xiàn)有的 瀏覽器-網(wǎng)絡(luò)服務(wù)器架構(gòu)應(yīng)用到移動(dòng)終端和NGMS卡上,即在移動(dòng)終端中安裝瀏覽器 (Browser),在NGMS卡中安裝網(wǎng)絡(luò)服務(wù)器(Web Server),同時(shí)將NGMS卡上的應(yīng)用重新編程 為諸如Servlet這樣的網(wǎng)絡(luò)應(yīng)用(WebApplication)。 然而,將現(xiàn)有的瀏覽器-網(wǎng)絡(luò)服務(wù)器架構(gòu)應(yīng)用到移動(dòng)終端和NGMS卡上也存 在問(wèn)題,主要原因是在NGMS卡中采用的是專(zhuān)門(mén)設(shè)計(jì)用于處理能力不高且存儲(chǔ)容量不 大的資源有限設(shè)備的JavaME平臺(tái),而不是用于具有較高處理能力和較大存儲(chǔ)容量的 設(shè)備的JavaSE平臺(tái)。與JavaSE平臺(tái)相比,JavaME平臺(tái)不提供用戶自定義類(lèi)加載器 (UserDefinedClassLoader)機(jī)制,從而,當(dāng)安裝在NGMS卡中的網(wǎng)絡(luò)服務(wù)器部署(啟動(dòng))一 個(gè)網(wǎng)絡(luò)應(yīng)用時(shí),JavaME平臺(tái)的Java虛擬機(jī)不能動(dòng)態(tài)加載該網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)(Class)。
為了克服上述缺陷,似乎可以采用JavaME平臺(tái)的Java虛擬機(jī)自帶的類(lèi)加載系統(tǒng) Bootstrap來(lái)加載網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)。 然而,使用BootStr即會(huì)帶來(lái)功能性問(wèn)題。BootStr即是JavaME平臺(tái)的Java虛 擬機(jī)本身自帶的類(lèi)加載系統(tǒng),用于加載JavaME平臺(tái)的核心Java類(lèi)庫(kù),并且只能在Java虛 擬機(jī)啟動(dòng)時(shí)加載。也就是說(shuō),如果想在JavaME平臺(tái)上利用Java虛擬機(jī)自帶的bootstr即 來(lái)加載網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi),就需要在網(wǎng)絡(luò)服務(wù)器部署該網(wǎng)絡(luò)應(yīng)用之后,重新啟動(dòng)Java虛擬 機(jī),這樣才能使用該網(wǎng)絡(luò)應(yīng)用,這個(gè)限制對(duì)網(wǎng)絡(luò)服務(wù)器來(lái)說(shuō)是不可接受的,因?yàn)榫W(wǎng)絡(luò)服務(wù)器 是要同時(shí)被不同的客戶端(瀏覽器)訪問(wèn)的,因此,如果部署新的網(wǎng)絡(luò)應(yīng)用就要重啟Java 虛擬機(jī),則在網(wǎng)絡(luò)服務(wù)器上已經(jīng)部署的其它網(wǎng)絡(luò)應(yīng)用都要中斷。 而且,使用Bootstrap會(huì)帶來(lái)安全問(wèn)題。由于JavaME平臺(tái)的Java虛擬機(jī)是為單 獨(dú)的一個(gè)MIDlet應(yīng)用服務(wù)的,因此JavaME平臺(tái)并沒(méi)有考慮在一個(gè)Java虛擬機(jī)下面同時(shí)運(yùn) 行多個(gè)應(yīng)用的情況。舉例來(lái)說(shuō),目前的JavaME平臺(tái)的Java虛擬機(jī)啟動(dòng)時(shí)加載應(yīng)用的類(lèi)庫(kù), 當(dāng)要運(yùn)行另一個(gè)MIDlet應(yīng)用時(shí),JavaME平臺(tái)的Java虛擬機(jī)會(huì)釋放目前運(yùn)行的MIDlet應(yīng)用 的類(lèi)庫(kù),然后,Java虛擬機(jī)重新啟動(dòng),并且在Bootstrap加載JavaME平臺(tái)的類(lèi)庫(kù)時(shí),將該另 一MIDlet應(yīng)用的類(lèi)庫(kù)一起加載進(jìn)來(lái)。由于在一般情況下,網(wǎng)絡(luò)服務(wù)器需要同時(shí)啟動(dòng)和管理多個(gè)網(wǎng)絡(luò)應(yīng)用,所以在java虛擬機(jī)啟動(dòng)時(shí)通過(guò)Bootstrap將該多個(gè)網(wǎng)絡(luò)應(yīng)用各自的類(lèi)加載 到Java虛擬機(jī)中,從而,在JavaME平臺(tái)上無(wú)法防止不同的網(wǎng)絡(luò)應(yīng)用之間相互訪問(wèn)的問(wèn)題。 例如,對(duì)于一個(gè)提供游戲的網(wǎng)絡(luò)應(yīng)用,如果該應(yīng)用的開(kāi)發(fā)者知道一個(gè)提供銀行服務(wù)的網(wǎng)絡(luò) 應(yīng)用的諸如類(lèi)名和方法名這樣的信息,則該開(kāi)發(fā)者是可以將該提供游戲的網(wǎng)絡(luò)應(yīng)用編程為 直接調(diào)用該提供銀行服務(wù)的網(wǎng)絡(luò)應(yīng)用的方法的,就像調(diào)用JavaME平臺(tái)所提供的API —樣。 從安全性方面來(lái)考慮,這也是不可接受的。 由上述可以看出,不能簡(jiǎn)單地使用JavaME平臺(tái)的Java虛擬機(jī)的Bootstrap類(lèi)加 載系統(tǒng)來(lái)加載網(wǎng)絡(luò)應(yīng)用的類(lèi)。 在這種情況下,似乎可以考慮在JavaME平臺(tái)上實(shí)現(xiàn)JavaSE平臺(tái)的用戶自定義類(lèi) 加載器(UserDefinedClassLoader)機(jī)制。然而,由于NGMS卡屬于資源有限的設(shè)備,所以在 NGMS卡的JavaME平臺(tái)上實(shí)現(xiàn)JavaSE平臺(tái)的用戶自定義類(lèi)加載器遇到以下幾個(gè)問(wèn)題。
第 一 個(gè)問(wèn)題是可行性問(wèn)題。JavaSE平臺(tái)的核心類(lèi)庫(kù)中有Java, lang. SecurityManager類(lèi),用于在運(yùn)行時(shí)進(jìn)行訪問(wèn)權(quán)限控制,以解決用戶自定義類(lèi)加載器帶來(lái)的 不同應(yīng)用的類(lèi)之間安全性問(wèn)題。也就是說(shuō),應(yīng)用的類(lèi)可以被自己實(shí)現(xiàn)的安全管理者來(lái)保護(hù) 起來(lái),并由該應(yīng)用自己決定是否把自己的類(lèi)暴露給其他應(yīng)用使用。因此,如果考慮在JavaME 平臺(tái)中引入JavaSE平臺(tái)的用戶自定義類(lèi)加載器,則很多機(jī)制需要相應(yīng)地加入到JavaME平 臺(tái)中。但是這對(duì)資源有限的NGMS卡來(lái)說(shuō)是得不償失的,也就是說(shuō),很可能一個(gè)網(wǎng)絡(luò)應(yīng)用所 占用的資源還沒(méi)有該網(wǎng)絡(luò)應(yīng)用所實(shí)現(xiàn)的安全管理者以及用戶自定義類(lèi)加載器消耗的資源 多,這有點(diǎn)得不償失。 第二個(gè)問(wèn)題是性能問(wèn)題。每個(gè)用戶自定義類(lèi)加載器在根據(jù)用戶定義的類(lèi)加載目錄 來(lái)查找需要加載的類(lèi)之前,都會(huì)委托自己的父類(lèi),最終會(huì)追朔到系統(tǒng)類(lèi)裝載器去處理,然后 一層一層代理下來(lái)到該用戶自定義類(lèi)加載器,這個(gè)過(guò)程處理比較繁瑣,影響性能。另外,該 用戶定義的類(lèi)加載目錄有可能是遠(yuǎn)程的服務(wù)器或者數(shù)據(jù)庫(kù)等,從而在加載該需要加載的類(lèi) 時(shí)會(huì)經(jīng)過(guò)遍歷搜索和遠(yuǎn)程加載過(guò)程,這也會(huì)嚴(yán)重消耗資源。 第三個(gè)問(wèn)題是安全問(wèn)題。用戶自定義類(lèi)加載器機(jī)制允許使用不同的類(lèi)加載器來(lái)加 載相同名稱但不同內(nèi)容的類(lèi),然而用戶定義的類(lèi)加載目錄是系統(tǒng)無(wú)法控制的,因此類(lèi)可能 會(huì)來(lái)源一個(gè)不受信任的地方。從而,當(dāng)在JavaME平臺(tái)上實(shí)現(xiàn)JavaSE平臺(tái)的用戶自定義類(lèi)加 載器機(jī)制時(shí),有可能發(fā)生用戶自定義的類(lèi)惡意覆蓋JavaME平臺(tái)原來(lái)的系統(tǒng)類(lèi)的情況發(fā)生, 因而導(dǎo)致JavaME平臺(tái)中的系統(tǒng)代碼執(zhí)行時(shí)違背原本的類(lèi)行為。
發(fā)明內(nèi)容
考慮到上述情況,本發(fā)明的目的在于提供一種加載類(lèi)以及創(chuàng)建和訪問(wèn)類(lèi)的對(duì)象的 方法和裝置,利用該方法和裝置,可以高性能地加載應(yīng)用的各個(gè)類(lèi)且可以控制對(duì)類(lèi)的安全 使用和對(duì)類(lèi)的對(duì)象的安全訪問(wèn)。 為了實(shí)現(xiàn)本發(fā)明的目的,按照本發(fā)明的一種用于在Java平臺(tái)上加載網(wǎng)絡(luò)應(yīng)用的 類(lèi)的方法,包括當(dāng)在Java平臺(tái)上部署網(wǎng)絡(luò)應(yīng)用時(shí),將所述網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)載入到所述 Java平臺(tái)的Java虛擬機(jī)中;以及,改變載入到所述Java虛擬機(jī)的所述各個(gè)類(lèi)中僅由所述 網(wǎng)絡(luò)應(yīng)用使用的類(lèi)的名稱。 為了實(shí)現(xiàn)本發(fā)明的目的,按照本發(fā)明的一種由Java虛擬機(jī)執(zhí)行的方法,包括當(dāng)
5一個(gè)應(yīng)用欲創(chuàng)建具有擁有者屬性的類(lèi)的對(duì)象時(shí),創(chuàng)建所述具有擁有者屬性的類(lèi)的對(duì)象;以
及,將所述應(yīng)用的標(biāo)識(shí)信息存儲(chǔ)在所述創(chuàng)建的對(duì)象的所述擁有者屬性中。 為了實(shí)現(xiàn)本發(fā)明的目的,按照本發(fā)明的一種由Java虛擬機(jī)執(zhí)行的方法,包括當(dāng)
一個(gè)特定應(yīng)用欲訪問(wèn)具有擁有者屬性的類(lèi)的對(duì)象時(shí),判斷所述特定應(yīng)用的標(biāo)識(shí)信息是否與
所述對(duì)象的所述擁有者屬性中所存儲(chǔ)的應(yīng)用的標(biāo)識(shí)信息一致;以及,當(dāng)判斷結(jié)果為肯定時(shí),
允許所述特定應(yīng)用對(duì)所述對(duì)象的訪問(wèn)。 為了實(shí)現(xiàn)本發(fā)明的目的,按照本發(fā)明的一種用于在Java平臺(tái)上加載網(wǎng)絡(luò)應(yīng)用的 類(lèi)的裝置,包括載入模塊,用于當(dāng)在Java平臺(tái)上部署網(wǎng)絡(luò)應(yīng)用時(shí),將所述網(wǎng)絡(luò)應(yīng)用的各個(gè) 類(lèi)載入到所述Java平臺(tái)的Java虛擬機(jī)中;以及,改變模塊,用于改變載入到所述Java虛擬 機(jī)的所述各個(gè)類(lèi)中僅由所述網(wǎng)絡(luò)應(yīng)用使用的類(lèi)的名稱。 為了實(shí)現(xiàn)本發(fā)明的目的,按照本發(fā)明的一種Java虛擬機(jī),包括創(chuàng)建模塊,用于當(dāng) 一個(gè)應(yīng)用欲創(chuàng)建具有擁有者屬性的類(lèi)的對(duì)象時(shí),創(chuàng)建所述具有擁有者屬性的類(lèi)的對(duì)象;以 及,存儲(chǔ)模塊,用于將所述應(yīng)用的標(biāo)識(shí)信息存儲(chǔ)在所述創(chuàng)建的對(duì)象的所述擁有者屬性中。
為了實(shí)現(xiàn)本發(fā)明的目的,按照本發(fā)明的一種Java虛擬機(jī),包括判斷模塊,用于當(dāng) 一個(gè)特定應(yīng)用欲訪問(wèn)具有擁有者屬性的類(lèi)的對(duì)象時(shí),判斷所述特定應(yīng)用的標(biāo)識(shí)信息是否與 所述對(duì)象的所述擁有者屬性中所存儲(chǔ)的應(yīng)用的標(biāo)識(shí)信息一致;以及,控制模塊,用于當(dāng)判斷 結(jié)果為肯定時(shí),允許所述特定應(yīng)用對(duì)所述對(duì)象的訪問(wèn)。
本發(fā)明的其它目的、特點(diǎn)、特征和優(yōu)點(diǎn)通過(guò)以下結(jié)合附圖的詳細(xì)描述將變得更加 顯而易見(jiàn),其中 圖1是示出按照本發(fā)明一個(gè)實(shí)施例的在JavaME平臺(tái)上部署網(wǎng)絡(luò)應(yīng)用的示意圖。
圖2是示出按照本發(fā)明一個(gè)實(shí)施例的用于將網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)載入到JavaME平 臺(tái)的Java虛擬機(jī)的加載過(guò)程的流程圖。 圖3是示出按照本發(fā)明一個(gè)實(shí)施例的用于創(chuàng)建網(wǎng)絡(luò)應(yīng)用的類(lèi)的對(duì)象的方法的流 程圖。 圖4是示出按照本發(fā)明一個(gè)實(shí)施例的用于訪問(wèn)網(wǎng)絡(luò)應(yīng)用的類(lèi)的對(duì)象的方法的流 程圖。
具體實(shí)施例方式
按照本發(fā)明的一個(gè)方面,在部署(啟動(dòng))網(wǎng)絡(luò)應(yīng)用時(shí)將該網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)加載 到Java虛擬機(jī)中,而不是在需要使用該網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)時(shí)才動(dòng)態(tài)加載該各個(gè)類(lèi)到Java 虛擬機(jī)中,從而可以高性能地加載網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)。 按照本發(fā)明的一個(gè)方面,在將網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)加載到Java虛擬機(jī)中時(shí),修改該 各個(gè)類(lèi)中僅由該網(wǎng)絡(luò)應(yīng)用使用的類(lèi)的名稱,從而其它應(yīng)用不能根據(jù)原來(lái)的類(lèi)名稱來(lái)企圖使 用這些類(lèi),因此可以控制對(duì)類(lèi)的安全使用, 按照本發(fā)明的一個(gè)方面,在將網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)加載到Java虛擬機(jī)中時(shí),為該各 個(gè)類(lèi)中的每一個(gè)類(lèi)增加一個(gè)擁有者屬性;當(dāng)特定應(yīng)用創(chuàng)建該各個(gè)類(lèi)中的任意一個(gè)類(lèi)的對(duì)象
時(shí),在該創(chuàng)建的對(duì)象的擁有者屬性中存儲(chǔ)該特定應(yīng)用的標(biāo)識(shí)信息;以及,當(dāng)一個(gè)應(yīng)用T欲訪問(wèn)該創(chuàng)建的對(duì)象時(shí),判斷該應(yīng)用T的標(biāo)識(shí)信息是否與該創(chuàng)建的對(duì)象的擁有者屬性中存儲(chǔ)的 應(yīng)用的標(biāo)識(shí)信息一致,如果一致,則允許該應(yīng)用T訪問(wèn)該創(chuàng)建的對(duì)象,否則不允許該應(yīng)用T 訪問(wèn)該創(chuàng)建的對(duì)象,從而可以控制對(duì)類(lèi)的對(duì)象的安全訪問(wèn)。
下面,將結(jié)合附圖詳細(xì)描述本發(fā)明的各個(gè)實(shí)施例。 圖l是示出按照本發(fā)明一個(gè)實(shí)施例的在JavaME平臺(tái)上部署網(wǎng)絡(luò)應(yīng)用的示意圖。如
圖l所示,在JavaME平臺(tái)上部署網(wǎng)絡(luò)應(yīng)用包括加載過(guò)程和實(shí)例化過(guò)程。其中,該加載過(guò)程
用于將網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)載入到JavaME平臺(tái)的Java虛擬機(jī),而實(shí)例化過(guò)程用于在該網(wǎng)絡(luò)
應(yīng)用的各個(gè)類(lèi)載入到JavaME平臺(tái)的Java虛擬機(jī)后,創(chuàng)建該網(wǎng)絡(luò)應(yīng)用的實(shí)例。 圖2是示出按照本發(fā)明一個(gè)實(shí)施例的用于將網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)載入到JavaME平
臺(tái)的Java虛擬機(jī)的加載過(guò)程的流程圖。當(dāng)JavaME平臺(tái)上的網(wǎng)絡(luò)服務(wù)器在JavaME平臺(tái)上
部署網(wǎng)絡(luò)應(yīng)用執(zhí)行該加載過(guò)程,該加載過(guò)程包括裝載、連接和初始化三個(gè)子過(guò)程。 如圖2所示,當(dāng)JavaME平臺(tái)上的網(wǎng)絡(luò)服務(wù)器W在JavaME平臺(tái)上部署網(wǎng)絡(luò)應(yīng)用A
時(shí),JavaME平臺(tái)的Java虛擬機(jī)開(kāi)始執(zhí)行該加載過(guò)程。 首先,在該加載過(guò)程的裝載子過(guò)程中,該Java虛擬機(jī)利用網(wǎng)絡(luò)應(yīng)用A的各個(gè)類(lèi)中 的每一個(gè)類(lèi)C的文件,產(chǎn)生代表類(lèi)C的二進(jìn)制數(shù)據(jù)流(步驟S200)。 然后,該Java虛擬機(jī)從該代表類(lèi)C的二進(jìn)制數(shù)據(jù)流中,提取類(lèi)C的類(lèi)型信息并將 其存儲(chǔ)在該Java虛擬機(jī)的方法區(qū)中(步驟S210)。其中,該類(lèi)C的類(lèi)型信息包括有類(lèi)C的 名稱和類(lèi)變量以及類(lèi)C對(duì)其它類(lèi)、接口、字段和方法的符號(hào)引用等。其中,類(lèi)C的類(lèi)型信息 的具體內(nèi)容對(duì)于本領(lǐng)域技術(shù)人員是已知的。 接著,該Java虛擬機(jī)創(chuàng)建Java. lang. Class類(lèi)的一個(gè)實(shí)例,用于代表存儲(chǔ)在該 Java虛擬機(jī)的方法區(qū)中的類(lèi)C的類(lèi)型信息(步驟S220)。
以上就是加載過(guò)程中的裝載子過(guò)程。 在執(zhí)行該加載過(guò)程的裝載子過(guò)程之后,該Java虛擬機(jī)接著執(zhí)行該加載過(guò)程的連 接子過(guò)程。其中,該連接子過(guò)程包括驗(yàn)證、準(zhǔn)備和解析這三個(gè)階段。 具體地,在該連接子過(guò)程的驗(yàn)證階段,該Java虛擬機(jī)首先驗(yàn)證類(lèi)C是否符合Java 語(yǔ)言的語(yǔ)義(步驟S230)。比如,驗(yàn)證類(lèi)C的所有父類(lèi)是否都已經(jīng)被載入到該Java虛擬機(jī) 中,類(lèi)C內(nèi)的數(shù)據(jù)長(zhǎng)度是否正確,類(lèi)C的字節(jié)碼是否合法等等。 接著,在該連接子過(guò)程的準(zhǔn)備階段中,該Java虛擬機(jī)給類(lèi)C的類(lèi)變量分配內(nèi)存并 賦予默認(rèn)值,并且在該Java虛擬機(jī)的方法區(qū)所存儲(chǔ)的類(lèi)C的類(lèi)型信息中增加一個(gè)擁有者屬 性,用于存儲(chǔ)創(chuàng)建類(lèi)C的對(duì)象的應(yīng)用的標(biāo)識(shí)信息(步驟S240)。 然后,在該連接子過(guò)程的解析階段中,首先,如果類(lèi)C是僅供網(wǎng)絡(luò)應(yīng)用A使用的類(lèi), 則該Java虛擬機(jī)為該Java虛擬機(jī)的方法區(qū)所存儲(chǔ)的類(lèi)C的類(lèi)型信息中的類(lèi)C的名稱增加 一個(gè)隨機(jī)前綴以改變類(lèi)C的名稱(步驟S250);如果類(lèi)C的名稱被改變,并且在類(lèi)C之前已 經(jīng)有網(wǎng)絡(luò)應(yīng)用A的其它類(lèi)載入到該Java虛擬機(jī)中,而且在該Java虛擬機(jī)的方法區(qū)所存儲(chǔ) 的該其它類(lèi)的類(lèi)型信息中包括有該其它類(lèi)對(duì)類(lèi)C的符號(hào)引用,則該Java虛擬機(jī)將該其它類(lèi) 的類(lèi)型信息中所包括的該其它類(lèi)對(duì)類(lèi)C的符號(hào)引用更改為類(lèi)C的已改變名稱(步驟S260); 如果在類(lèi)C之前已經(jīng)有網(wǎng)絡(luò)應(yīng)用A的其它類(lèi)載入到該Java虛擬機(jī)中并且該其它類(lèi)的名稱 已經(jīng)被改變,以及在該Java虛擬機(jī)的方法區(qū)所存儲(chǔ)的類(lèi)C的類(lèi)型信息中包括有類(lèi)C對(duì)該其 它類(lèi)的符號(hào)引用,則該Java虛擬機(jī)將類(lèi)C的類(lèi)型信息所包括的類(lèi)C對(duì)該其它類(lèi)的符號(hào)引用
7更改為該其它類(lèi)的已改變名稱(步驟S270)。然后,該Java虛擬機(jī)在該Java虛擬機(jī)的方法 區(qū)所存儲(chǔ)的類(lèi)C的類(lèi)型信息中尋找出類(lèi)C對(duì)其它類(lèi)、接口 、字段和方法的符號(hào)引用并將其轉(zhuǎn) 換成物理上的直接引用(步驟S280)。
以上就是加載過(guò)程中的連接子過(guò)程。 在執(zhí)行加載過(guò)程中的連接子過(guò)程之后,該Java虛擬機(jī)接著執(zhí)行加載過(guò)程中的初 始化子過(guò)程。 具體地,在加載過(guò)程的初始化子過(guò)程中,該Java虛擬機(jī)向已分配內(nèi)存的類(lèi)C的類(lèi)
變量賦初始值(步驟S290)。 以上就是加載過(guò)程中的初始化子過(guò)程。 圖3是示出按照本發(fā)明一個(gè)實(shí)施例的用于創(chuàng)建網(wǎng)絡(luò)應(yīng)用的類(lèi)的對(duì)象的方法的流 程圖。這里,如上面所描述的,網(wǎng)絡(luò)應(yīng)用A的各個(gè)類(lèi)加載到JavaME平臺(tái)的Java虛擬機(jī)時(shí), 網(wǎng)絡(luò)應(yīng)用A的各個(gè)類(lèi)都增加了一個(gè)擁有者屬性。 如圖3所示,當(dāng)在JavaME平臺(tái)的Java虛擬機(jī)中, 一個(gè)特定應(yīng)用K欲創(chuàng)建網(wǎng)絡(luò)應(yīng)用 A的一個(gè)類(lèi)L的對(duì)象來(lái)使用時(shí),該Java虛擬機(jī)基于存儲(chǔ)在該Java虛擬機(jī)的方法區(qū)中的該類(lèi) L的類(lèi)型信息,為該特定應(yīng)用K創(chuàng)建該類(lèi)L的對(duì)象(步驟S300)。其中,該特定應(yīng)用K可以 是網(wǎng)絡(luò)應(yīng)用A本身或者網(wǎng)絡(luò)應(yīng)用A之外的其它應(yīng)用。由于如上所描述的,網(wǎng)絡(luò)應(yīng)用A的各 個(gè)類(lèi)中僅供網(wǎng)絡(luò)應(yīng)用A使用的類(lèi)在載入Java虛擬機(jī)時(shí)其名稱已經(jīng)被改變,所以當(dāng)該特定應(yīng) 用K是網(wǎng)絡(luò)應(yīng)用A之外的其它應(yīng)用時(shí),該特定應(yīng)用K只能創(chuàng)建和使用網(wǎng)絡(luò)應(yīng)用A的各個(gè)類(lèi) 中可供其它應(yīng)用使用的類(lèi)的對(duì)象。 接著,該Java虛擬機(jī)在該創(chuàng)建的對(duì)象的擁有者屬性中存儲(chǔ)該特定應(yīng)用K的標(biāo)識(shí)信 息(步驟S310)。 圖4是示出按照本發(fā)明一個(gè)實(shí)施例的用于訪問(wèn)網(wǎng)絡(luò)應(yīng)用的類(lèi)的對(duì)象的方法的流 程圖。這里,如上面所描述的,網(wǎng)絡(luò)應(yīng)用A的類(lèi)的對(duì)象具有擁有者屬性,并且該對(duì)象的擁有 者屬性存儲(chǔ)有創(chuàng)建該對(duì)象的應(yīng)用的標(biāo)識(shí)信息。 如圖4所示,當(dāng)在JavaME平臺(tái)的Java虛擬機(jī)中, 一個(gè)特定應(yīng)用M欲對(duì)網(wǎng)絡(luò)應(yīng)用
A的一個(gè)類(lèi)的對(duì)象T進(jìn)行特定訪問(wèn)時(shí),該Java虛擬機(jī)首先判斷該特定應(yīng)用M的標(biāo)識(shí)信息
是否與該對(duì)象T的擁有者屬性所存儲(chǔ)的應(yīng)用的標(biāo)識(shí)信息是否相同(步驟S400)。在這里,
該特定訪問(wèn)可以是athrow、 baload、 saload、 bastore、 sastore、 arraylength、 checkcast、
instanceof、 getfield、 putfield、 invokevirtiml禾口 invokeinterface等操作中的任意一 個(gè)。 如果步驟S400的判斷結(jié)果為否定,則該Java虛擬機(jī)進(jìn)一步判斷該特定應(yīng)用M是 否是該Java虛擬機(jī)中的系統(tǒng)應(yīng)用(步驟S410)。 如果步驟S410的進(jìn)一步判斷結(jié)果為否定,則該Java虛擬機(jī)不允許該特定應(yīng)用M 對(duì)該對(duì)象T進(jìn)行該特定訪問(wèn)(步驟S420),并且發(fā)出表示非法訪問(wèn)該對(duì)象T的告警消息(步 驟S430)。 如果步驟S400的判斷結(jié)果為肯定或者步驟S410的進(jìn)一步判斷結(jié)果為肯定,則該
Java虛擬機(jī)允許該特定應(yīng)用M對(duì)該對(duì)象T進(jìn)行該特定訪問(wèn)(步驟S440)。 本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,雖然在上面實(shí)施例中,在加載過(guò)程的連接子過(guò)程的準(zhǔn)
備階段中為網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)增加一個(gè)擁有者屬性,然而,本發(fā)明并不局限于此。在本發(fā)明
8的其它實(shí)施例中,可以在加載過(guò)程中除了連接子過(guò)程的準(zhǔn)備階段之外的其它時(shí)刻,為網(wǎng)絡(luò) 應(yīng)用的各個(gè)類(lèi)增加一個(gè)擁有者屬性。 本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,雖然在上面實(shí)施例中,通過(guò)增加一個(gè)隨機(jī)前綴到類(lèi)的
名稱,來(lái)改變網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)中僅供該網(wǎng)絡(luò)應(yīng)用使用的類(lèi)的名稱,然而,本發(fā)明并不局限
于此。在本發(fā)明的其它實(shí)施例中,也可以通過(guò)增加一個(gè)隨機(jī)后綴到類(lèi)的名稱或者通過(guò)其它
修改方式,來(lái)改變網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)中僅供該網(wǎng)絡(luò)應(yīng)用使用的類(lèi)的名稱。 本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,雖然在上面實(shí)施例中,在加載過(guò)程的連接子過(guò)程的解
析階段中改變網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)中僅供該網(wǎng)絡(luò)應(yīng)用使用的類(lèi)的名稱,然而,本發(fā)明并不局
限于此。在本發(fā)明的其它實(shí)施例中,可以在加載過(guò)程中除了連接子過(guò)程的解析階段之外的
其它時(shí)刻,改變網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)中僅供該網(wǎng)絡(luò)應(yīng)用使用的類(lèi)的名稱。 本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,雖然上面的各個(gè)實(shí)施例以JavaME平臺(tái)為例來(lái)描述本
發(fā)明,然而本發(fā)明并不局限于此。本發(fā)明也可以應(yīng)用到JavaSE等平臺(tái)中。 上面本發(fā)明的各個(gè)實(shí)施例所公開(kāi)的方法,可以利用軟件、硬件或者軟硬件結(jié)合的
方式來(lái)實(shí)現(xiàn)。 本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,上面描述的本發(fā)明的各個(gè)實(shí)施例,可以在沒(méi)有偏離發(fā) 明實(shí)質(zhì)的情況下做出各種變形和改變,并且這些變形和改變都在本發(fā)明的保護(hù)范圍之內(nèi), 因此,本發(fā)明的保護(hù)范圍由所附的權(quán)利要求書(shū)定義。
權(quán)利要求
一種用于在Java平臺(tái)上加載網(wǎng)絡(luò)應(yīng)用的類(lèi)的方法,包括當(dāng)在Java平臺(tái)上部署網(wǎng)絡(luò)應(yīng)用時(shí),將所述網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)載入到所述Java平臺(tái)的Java虛擬機(jī)中;以及改變載入到所述Java虛擬機(jī)的所述各個(gè)類(lèi)中僅由所述網(wǎng)絡(luò)應(yīng)用使用的類(lèi)的名稱。
2. 如權(quán)利要求l所述的方法,其中,還包括如果載入到所述Java虛擬機(jī)的所述各個(gè)類(lèi)中的任意一個(gè)類(lèi)具有對(duì)所述各個(gè)類(lèi)中的類(lèi) 名稱已被改變的其它類(lèi)的符號(hào)引用,則將所述任意一個(gè)類(lèi)對(duì)所述其它類(lèi)的符號(hào)引用更改為 所述其它類(lèi)的已改變名稱。
3. 如權(quán)利要求l所述的方法,其中,還包括向載入到所述Java虛擬機(jī)的所述各個(gè)類(lèi)中的每一個(gè)類(lèi)增加一個(gè)擁有者屬性,其中,所 述擁有者屬性用于存儲(chǔ)創(chuàng)建該類(lèi)的對(duì)象的應(yīng)用的標(biāo)識(shí)信息。
4. 一種由Java虛擬機(jī)執(zhí)行的方法,包括當(dāng)一個(gè)應(yīng)用欲創(chuàng)建具有擁有者屬性的類(lèi)的對(duì)象時(shí),創(chuàng)建所述具有擁有者屬性的類(lèi)的對(duì) 象;以及將所述應(yīng)用的標(biāo)識(shí)信息存儲(chǔ)在所述創(chuàng)建的對(duì)象的所述擁有者屬性中。
5. —種由Java虛擬機(jī)執(zhí)行的方法,包括當(dāng)一個(gè)特定應(yīng)用欲訪問(wèn)具有擁有者屬性的類(lèi)的對(duì)象時(shí),判斷所述特定應(yīng)用的標(biāo)識(shí)信息 是否與所述對(duì)象的所述擁有者屬性中所存儲(chǔ)的應(yīng)用的標(biāo)識(shí)信息一致;以及 當(dāng)判斷結(jié)果為肯定時(shí),允許所述特定應(yīng)用對(duì)所述對(duì)象的訪問(wèn)。
6. 如權(quán)利要求5所述的方法,其中,還包括當(dāng)所述判斷結(jié)果為否定時(shí),進(jìn)一步判斷所述特定應(yīng)用是否是所述Java虛擬機(jī)的系統(tǒng) 應(yīng)用;以及當(dāng)進(jìn)一步判斷結(jié)果為肯定時(shí),允許所述特定應(yīng)用對(duì)所述對(duì)象的訪問(wèn)。
7. 如權(quán)利要求5或6所述的方法,其中,還包括當(dāng)所述判斷結(jié)果或所述進(jìn)一步判斷結(jié)果為否定時(shí),不允許所述特定應(yīng)用對(duì)所述對(duì)象的 訪問(wèn)。
8. —種用于在Java平臺(tái)上加載網(wǎng)絡(luò)應(yīng)用的類(lèi)的裝置,包括載入模塊,用于當(dāng)在Java平臺(tái)上部署網(wǎng)絡(luò)應(yīng)用時(shí),將所述網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)載入到所 述Java平臺(tái)的Java虛擬機(jī)中;以及改變模塊,用于改變載入到所述Java虛擬機(jī)的所述各個(gè)類(lèi)中僅由所述網(wǎng)絡(luò)應(yīng)用使用 的類(lèi)的名稱。
9. 如權(quán)利要求8所述的裝置,其中,所述改變模塊還用于當(dāng)載入到所述Java虛擬機(jī)的所述各個(gè)類(lèi)中的任意一個(gè)類(lèi)具有對(duì) 所述各個(gè)類(lèi)中的類(lèi)名稱已被改變的其它類(lèi)的符號(hào)引用時(shí),將所述任意一個(gè)類(lèi)對(duì)所述其它類(lèi) 的符號(hào)引用更改為所述其它類(lèi)的已改變名稱。
10. 如權(quán)利要求8所述的裝置,其中,還包括增加模塊,用于向載入到所述Java虛擬機(jī)的所述各個(gè)類(lèi)中的每一個(gè)類(lèi)增加一個(gè)擁有 者屬性,其中,所述擁有者屬性用于存儲(chǔ)創(chuàng)建該類(lèi)的對(duì)象的應(yīng)用的標(biāo)識(shí)信息。
11. 一種Java虛擬機(jī),包括創(chuàng)建模塊,用于當(dāng)一個(gè)應(yīng)用欲創(chuàng)建具有擁有者屬性的類(lèi)的對(duì)象時(shí),創(chuàng)建所述具有擁有 者屬性的類(lèi)的對(duì)象;以及存儲(chǔ)模塊,用于將所述應(yīng)用的標(biāo)識(shí)信息存儲(chǔ)在所述創(chuàng)建的對(duì)象的所述擁有者屬性中。
12. —種Java虛擬機(jī),包括判斷模塊,用于當(dāng)一個(gè)特定應(yīng)用欲訪問(wèn)具有擁有者屬性的類(lèi)的對(duì)象時(shí),判斷所述特定 應(yīng)用的標(biāo)識(shí)信息是否與所述對(duì)象的所述擁有者屬性中所存儲(chǔ)的應(yīng)用的標(biāo)識(shí)信息一致;以及 控制模塊,用于當(dāng)判斷結(jié)果為肯定時(shí),允許所述特定應(yīng)用對(duì)所述對(duì)象的訪問(wèn)。
13. 如權(quán)利要求12所述的Java虛擬機(jī),其中,所述判斷模塊還用于當(dāng)所述判斷結(jié)果為否定時(shí),進(jìn)一步判斷所述特定應(yīng)用是否是所述 Java虛擬機(jī)的系統(tǒng)應(yīng)用;以及所述控制模塊還用于當(dāng)進(jìn)一步判斷結(jié)果為肯定時(shí),允許所述特定應(yīng)用對(duì)所述對(duì)象的訪問(wèn)。
14. 如權(quán)利要求12或13所述的Java虛擬機(jī),其中,所述控制模塊還用于當(dāng)所述判斷結(jié)果或所述進(jìn)一步判斷結(jié)果為否定時(shí),不允許所述特 定應(yīng)用對(duì)所述對(duì)象的訪問(wèn)。
全文摘要
本發(fā)明涉及一種加載類(lèi)以及創(chuàng)建和訪問(wèn)類(lèi)的對(duì)象的方法和裝置,其中,用于在Java平臺(tái)上加載網(wǎng)絡(luò)應(yīng)用的類(lèi)的方法包括當(dāng)在Java平臺(tái)上部署網(wǎng)絡(luò)應(yīng)用時(shí),將所述網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)載入到所述Java平臺(tái)的Java虛擬機(jī)中;以及,改變載入到所述Java虛擬機(jī)的所述各個(gè)類(lèi)中僅由所述網(wǎng)絡(luò)應(yīng)用使用的類(lèi)的名稱。利用該方法和裝置,可以高性能地加載網(wǎng)絡(luò)應(yīng)用的各個(gè)類(lèi)且可以控制對(duì)類(lèi)的安全使用和對(duì)類(lèi)的對(duì)象的安全訪問(wèn)。
文檔編號(hào)G06F9/455GK101763271SQ20081019021
公開(kāi)日2010年6月30日 申請(qǐng)日期2008年12月26日 優(yōu)先權(quán)日2008年12月26日
發(fā)明者李丞倍, 李華煒, 李相研, 羅棟元, 金亨一 申請(qǐng)人:愛(ài)思開(kāi)電訊投資(中國(guó))有限公司