溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么用RMI實現(xiàn)基于Java的分布式計算

發(fā)布時間:2021-11-20 15:53:13 來源:億速云 閱讀:165 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)怎么用RMI實現(xiàn)基于Java的分布式計算,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

Java 2 Enterprise Edition(J2EE)遠(yuǎn)程方法調(diào)用(Remote Method Invocation,RMI)框架允許你創(chuàng)建透明的、分布式的服務(wù)和應(yīng)用程序?;赗MI的應(yīng)用程序由Java對象構(gòu)成,這些對象相互調(diào)用,同時忽略對方的位置。換言之,一個Java對象可調(diào)用另一個虛擬機上的某個Java對象的方法,整個過程和調(diào)用同一個虛擬機上的某個Java對象的方法無異。駐留在不同虛擬機上的對象為了相互獲得引用,可以使用RMI的查找服務(wù),或者將對象引用作為方法調(diào)用的一個參數(shù)或者返回值來接收。參數(shù)和返回值借助Java的對象序列化機制由RMI來進(jìn)行封送。
遠(yuǎn)程對象和接口
Java提供了一個完全限定名稱為java.rmi.Remote的接口。任何對象要想?yún)⑴c和另一個Java對象的遠(yuǎn)程會話,就必須直接或間接地實現(xiàn)該接口。尤其要注意的是,任何由java.rmi.Remote接口來標(biāo)識的對象都暗示著它的方法可從其他任何虛擬機進(jìn)行調(diào)用。實現(xiàn)了 java.rmi.Remote接口的對象通常稱為“遠(yuǎn)程對象”,必須采用以下方式來聲明它的方法:
? 每個支持遠(yuǎn)程調(diào)用的方法都必須在其throws子句中聲明java.rmi.RemoteException。
? 對于一個可遠(yuǎn)程調(diào)用的方法,它的每個非基本(nonprimitive)參數(shù)或者返回值都必須直接或間接地聲明為實現(xiàn)了java.io.Serializable接口。
除了實現(xiàn)java.rmi.Remote接口和正確聲明任何遠(yuǎn)程方法之外,遠(yuǎn)程對象必須提供一個無參數(shù)的構(gòu)造函數(shù),它能引發(fā)一個java.rmi.RemoteException異常。這就保證了對象可基于一種序列化狀態(tài)來遠(yuǎn)程構(gòu)造。
遠(yuǎn)程對象必須導(dǎo)出,以接收傳入的遠(yuǎn)程方法調(diào)用。為此,你通常需要擴(kuò)展java.rmi.server.UnicastRemoteObject或者java.rmi.activation.Activatable。通過對其中任何一個類進(jìn)行擴(kuò)展,遠(yuǎn)程對象就可在創(chuàng)建時自動導(dǎo)出。

以下接口定義展示了java.rmi.Remote接口最典型的用法:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface TimeKeeper extends Remote
{
public String currentDate() throws RemoteException;
public String currentTime() throws RemoteException;
}
由于String類聲明為實現(xiàn)了java.io.Serializable接口,所以String是遠(yuǎn)程方法的有效返回類型。
以下代碼展示了如何實現(xiàn)TimeKeeper接口,以便定義一個有效的遠(yuǎn)程對象:


import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class TimeKeeperImpl implements TimeKeeper
{
public TimeKeeperImpl()
throws RemoteException
{
}
public String currentDate() throws RemoteException
{
Calendar cal = new GregorianCalendar();
String retVal = (cal.get(Calendar.MONTH) + "/" +
cal.get(Calendar.DAY_OF_MONTH) + "/" +
cal.get(Calendar.YEAR));
return retVal;
}
public String currentTime() throws RemoteException
{
Calendar cal = new GregorianCalendar();
String retVal = (cal.get(Calendar.HOUR_OF_DAY) + ":" +
cal.get(Calendar.MINUTE) + ":" +
cal.get(Calendar.SECOND));
return retVal;
}
}

關(guān)于“怎么用RMI實現(xiàn)基于Java的分布式計算”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI