移動(dòng)通信中RMI技術(shù)及其應(yīng)用
文章出處:http://56733.cn 作者:史建成 李萍 人氣: 發(fā)表時(shí)間:2011年09月26日
1.引言
Java智能卡(Java Card)技術(shù)在第三代移動(dòng)通信(3G)中有著極其廣泛的應(yīng)用。Jaya 智能卡的出現(xiàn)。使多個(gè)應(yīng)用程序可共存于一張智能卡中。這些應(yīng)用可以來(lái)自同一個(gè)卡供應(yīng)商。也可以來(lái)自不同的卡供應(yīng)商。用戶只需刷新智能卡上的程序。就可以得到不同的應(yīng)用。運(yùn)營(yíng)商及開(kāi)發(fā)商擺脫了對(duì)卡商的依賴。大大降低了成本。在移動(dòng)通信的SIM卡中,Java智能卡的應(yīng)用越來(lái)越廣泛,景極其看好。由于SIM卡使用Java智能卡的量越來(lái)越多,使用頻率越來(lái)越高。為了更好地發(fā)揮網(wǎng)絡(luò)及其分布在網(wǎng)絡(luò)中的計(jì)算機(jī)的處理能力。移動(dòng)通信中Java智能卡RMI技術(shù)在開(kāi)發(fā)應(yīng)用中變得越來(lái)越重要。
2.移動(dòng)通信中Java智能卡的主要特點(diǎn)
移動(dòng)通信中,Java智能卡是指運(yùn)行Java小應(yīng)用程序的智能卡??ㄉ媳仨毚嬖谙鄳?yīng)的Java虛擬機(jī)。符合Java Card技術(shù)規(guī)范的小應(yīng)用程序可以運(yùn)行在該虛擬機(jī)上。SUN公司提出了有關(guān)Java Card技術(shù)規(guī)范。包括有關(guān)在智能卡上創(chuàng)建Java Card虛擬機(jī)和應(yīng)用編程接口(API)的詳細(xì)信息。與傳統(tǒng)的智能卡系統(tǒng)相比,Java智能卡平臺(tái)主要有以下特點(diǎn):
1.跨平臺(tái)性
移動(dòng)通信中目前大部分SIM 卡已經(jīng)支持了Java卡的技術(shù)規(guī)范,凡符合Java卡API技術(shù)規(guī)范的Java卡Applets都可以運(yùn)行在Java卡運(yùn)行環(huán)境(JCRE:Java Card Runtime Environment)。允許開(kāi)發(fā)人員使用相同的Java卡Applets在不同廠商的智能卡上運(yùn)行,實(shí)現(xiàn)了一次程序編寫(xiě)到處運(yùn)行的功能 即通過(guò)JVM 的機(jī)制達(dá)到跨平臺(tái)的目的。
2.應(yīng)用開(kāi)發(fā)便捷性
對(duì)于移動(dòng)通信中Java智能卡上的應(yīng)用,開(kāi)發(fā)人員無(wú)需了解復(fù)雜的智能卡硬件和智能卡專用的技術(shù),就可以進(jìn)行智能卡應(yīng)用的開(kāi)發(fā),從而大大減少開(kāi)發(fā)時(shí)間,降低開(kāi)發(fā)難度和成本。而且可以使原來(lái)的Java程序開(kāi)發(fā)人員來(lái)編寫(xiě)智能卡程序。人力資源得到充分的利用,更好地滿足了應(yīng)用程序成倍增長(zhǎng)的需要,同時(shí)也是時(shí)代發(fā)展的需要。
3.安全性
在移動(dòng)通信中,Java智能卡最關(guān)鍵的問(wèn)題之一。安全性牽涉到多個(gè)方面。Java智能卡系統(tǒng)的安全性模式在很多方面作了改進(jìn),它的安全策略由Java卡虛擬機(jī)(JCVM)和Java卡運(yùn)行環(huán)境共同實(shí)現(xiàn)??紤]到智能卡的應(yīng)用范圍和應(yīng)用場(chǎng)合的特殊性,Java卡支持保護(hù)數(shù)據(jù)的完整性,防止對(duì)于敏感數(shù)據(jù)沒(méi)有認(rèn)證的訪問(wèn)。
4.多應(yīng)用性
在一個(gè)Jaya卡運(yùn)行環(huán)境中可以運(yùn)行多種功能差異很大的不同的應(yīng)用(Applets),譬如手機(jī)上網(wǎng),移動(dòng)證券交易,手機(jī)玩游戲等等。這些應(yīng)用既可以來(lái)自同一個(gè)卡供應(yīng)商也可以來(lái)自不同的卡供應(yīng)商,這是新一代手機(jī)的很重要特點(diǎn)。
3.RMI技術(shù)與移動(dòng)通信中智能卡的RMI技術(shù)及其應(yīng)用
3.1 RMI技術(shù)
J2SE中的RMI(Remote Method Invocation,遠(yuǎn)程方法調(diào)用)技術(shù)是開(kāi)發(fā)Java分布式網(wǎng)絡(luò)應(yīng)用的核心技術(shù)與傳統(tǒng)的RPC(Remote Procedure Call,遠(yuǎn)程過(guò)程調(diào)用)調(diào)用遠(yuǎn)程過(guò)程不同,RMI用于調(diào)用遠(yuǎn)程對(duì)象中的方法。支持存儲(chǔ)于不同地址空間的對(duì)象之間的彼此通信。讓位于不同JVM 空間中的對(duì)象在外觀行為上都像是本地的對(duì)象一樣使用。是純粹面向?qū)ο蟮腏ava程序中開(kāi)發(fā)網(wǎng)絡(luò)分布式應(yīng)用系統(tǒng)的核心解決方案。
用RMI開(kāi)發(fā)的應(yīng)用程序由服務(wù)器端程序和客戶端程序二部分組成。服務(wù)器端程序在運(yùn)行時(shí)會(huì)創(chuàng)建多個(gè)對(duì)象實(shí)例f稱為遠(yuǎn)程對(duì)象),這些對(duì)象實(shí)例用于向客戶提供某種服務(wù)。同時(shí)服務(wù)器端打開(kāi)監(jiān)聽(tīng)端口等待客戶端程序調(diào)用??蛻舳顺绦蛟谶\(yùn)行時(shí)通過(guò)RMI機(jī)制從服務(wù)器中得到遠(yuǎn)程對(duì)象的引用。調(diào)用其中的方法。
RMI的體系結(jié)構(gòu)可以用圖1表示:
從圖1中可見(jiàn),RMI體系結(jié)構(gòu)是由多層組成的。stub/skeleton層中使用了存(stub) 框架(skeleton) 的方法來(lái)隱藏底層通訊的實(shí)現(xiàn)細(xì)節(jié)。stub代表遠(yuǎn)程對(duì)象的客戶端對(duì)象。具有和遠(yuǎn)程對(duì)象相同的接口或方法列表。當(dāng)客戶端程序調(diào)用遠(yuǎn)程對(duì)象的方法時(shí).實(shí)際上調(diào)用的是stub對(duì)象中的方法。stub將請(qǐng)求轉(zhuǎn)發(fā)到遠(yuǎn)程對(duì)象。服務(wù)器端的skeleton對(duì)象負(fù)責(zé)將stub傳來(lái)的信息解碼。并將解碼后的信息交給實(shí)際的遠(yuǎn)程對(duì)象進(jìn)行處。遠(yuǎn)程對(duì)象處理完畢后將結(jié)果傳給skeleton對(duì)象。再由skeleton對(duì)象傳給客戶端的stub對(duì)象,最后stub對(duì)象將這些信息傳給客戶端程序。
3.2 移動(dòng)通信中Java智能卡的RMI技術(shù)及其應(yīng)用
除了與J2SE中的RMI技術(shù)非常相似外, 由于智能卡資源的局限,Java智能卡中的RMI技術(shù)與J2SE中的RMI技術(shù)是有所區(qū)別的。在Java智能卡中,JavaCard小應(yīng)用程序是服務(wù)器.主應(yīng)用程序是客戶端。Java智能卡RMI與J2SE中的RMI的主要區(qū)別體現(xiàn)在如下幾點(diǎn):
1)J2SE中的RMI協(xié)議通信是通過(guò)遠(yuǎn)程接口實(shí)現(xiàn)的存根與遠(yuǎn)程接口實(shí)現(xiàn)的框架完成的,而在Java智能卡中的RMI應(yīng)用中??蛻舳藨?yīng)用程序與服務(wù)器端應(yīng)用程序的通信過(guò)程是先獲取一個(gè)RMIService服務(wù),然后由該服務(wù)程序再與服務(wù)器的應(yīng)用進(jìn)行通信。
2)在Java智能卡的RMI模型中。APDU(Applicafion PintocolData Unit,應(yīng)用協(xié)議數(shù)據(jù)單元)通信的過(guò)程被抽象化。不是直接通過(guò)APDU命令完成,而是通過(guò)處理對(duì)象的方式完成的。
3)Java智能卡RMI模型中的軟件包與J2SE中RMI的軟件也有不同,分別是jave. rmi與javacard.framework.service。其中java.rmi包中定義了Remote接口與RemoteExcepfion類,而javacard.framework.service軟件包中定義了JavaCard小應(yīng)用程序服務(wù)類, 包括CardRemoteObject和RMISenrice類。CardRemoteObject類中定義了啟動(dòng)和禁止卡外對(duì)象遠(yuǎn)程訪問(wèn)的方法。而RMIServiee用于處理RMI請(qǐng)求并轉(zhuǎn)化輸入的APDU命令為遠(yuǎn)程方法調(diào)用。
編寫(xiě)一個(gè)Jaya智能卡的應(yīng)用程序一般要包含以下幾步(下面給出的是典型的電子錢包的例子):
1)定義一個(gè)遠(yuǎn)程服務(wù)的接口
該接口負(fù)責(zé)定義Jaya智能卡小應(yīng)用程序所能提供的服務(wù),同樣該接口必須擴(kuò)展java.rmi.Remote。
import java.rmi.*;
import javaeard.framework.*;
public interface EPInterfaee extends Remote {
public short getBalance0 throw RemoteExeeption;
//有關(guān)電子錢包應(yīng)用中的方法聲明
...
}
2)編寫(xiě)遠(yuǎn)程類的服務(wù)器實(shí)現(xiàn)和相應(yīng)的支持類
在Java智能卡中,小應(yīng)用程序是RMI服務(wù)器端,一個(gè)典型的小應(yīng)用程序如圖2所示:
圖中MyRemoteClass是遠(yuǎn)程服務(wù)器類,可以實(shí)現(xiàn)遠(yuǎn)程接口My Remote來(lái)實(shí)現(xiàn)Remote。也可以通過(guò)擴(kuò)展一個(gè)相應(yīng)的智能卡遠(yuǎn)程對(duì)象類f圖中(CardRemoteObject)來(lái)實(shí)現(xiàn)Remote??傊羞h(yuǎn)程應(yīng)用的實(shí)現(xiàn)類都必須實(shí)現(xiàn)Remote接口RMI Service負(fù)責(zé)將APDU調(diào)用轉(zhuǎn)換為RMI調(diào)用。Dispatcher 負(fù)責(zé)將收到的APDU命令分發(fā)給RMI Service 從圖中可知,服務(wù)器的實(shí)現(xiàn)主要包括Jaya智能卡小應(yīng)用程序、遠(yuǎn)程服務(wù)接口的實(shí)現(xiàn)類及與應(yīng)用程序相關(guān)的類。下面是小應(yīng)用程序的結(jié)構(gòu):
3)寫(xiě)使用遠(yuǎn)程服務(wù)類的客戶機(jī)端程序
客戶端程序通常包括初始化OpenCard框架、等待新卡插入、獲取OCFCardAccessor實(shí)例、創(chuàng)建JavaCardRMIConnect實(shí)例及選擇智能卡Applet和調(diào)用遠(yuǎn)程對(duì)象的方法。(限于篇幅,程序略)
3.3移動(dòng)通信中Java智能卡的RMI程序的流程Java智能卡的RMI程序的流程可用下圖[l]表示。
圖中HostAppheafion是客戶端應(yīng)用程序。通過(guò)傳送APDUs到卡上的JCRE進(jìn)行RMI調(diào)用。依次傳送到智能卡上的小應(yīng)用程序f圖中的(MyApplet)。 小應(yīng)用程序通過(guò)Dispatcher將收到的APDUs命令分發(fā)給RMIService。RMIService逐個(gè)處理APDU并將這些命令轉(zhuǎn)化為遠(yuǎn)程方法調(diào)用。
4.小結(jié)
移動(dòng)通信中Java智能卡的應(yīng)用越來(lái)越廣,在目前的軟件設(shè)計(jì)中。分布式程序設(shè)計(jì)越來(lái)越被軟件開(kāi)發(fā)人員重視。在移動(dòng)通信中隨著應(yīng)用范圍的不斷擴(kuò)展。程序和需要處理的數(shù)據(jù)流量將會(huì)有一個(gè)非常大的膨脹。而這些程序和處理的數(shù)據(jù)以及實(shí)際的計(jì)算都會(huì)廣泛地分布在網(wǎng)絡(luò)上?;赗MI的應(yīng)用既可以共享網(wǎng)絡(luò)及網(wǎng)絡(luò)中計(jì)算機(jī)等軟硬件的資源。也可以平衡各個(gè)計(jì)算機(jī)的處理能力。