用RMI實現基於Java的分散式計算(轉)
用RMI實現基於Java的分散式計算(轉)[@more@]Java 2 Enterprise Edition(J2EE)遠端方法呼叫(Remote Method Invocation,RMI)框架允許你建立透明的、分散式的服務和應用程式。基於RMI的應用程式由Java物件構成,這些物件相互呼叫,同時忽略對方的位置。換言之,一個Java物件可呼叫另一個虛擬機器上的某個Java物件的方法,整個過程和呼叫同一個虛擬機器上的某個Java物件的方法無異。駐留在不同虛擬機器上的物件為了相互獲得引用,可以使用RMI的查詢服務,或者將物件引用作為方法呼叫的一個引數或者返回值來接收。引數和返回值藉助Java的物件序列化機制由RMI來進行封送。
遠端物件和介面
Java提供了一個完全限定名稱為java.rmi.Remote的介面。任何物件要想參與和另一個Java物件的遠端會話,就必須直接或間接地實現該介面。尤其要注意的是,任何由java.rmi.Remote介面來標識的物件都暗示著它的方法可從其他任何虛擬機器進行呼叫。實現了 java.rmi.Remote介面的物件通常稱為“遠端物件”,必須採用以下方式來宣告它的方法:
? 每個支援遠端呼叫的方法都必須在其throws子句中宣告java.rmi.RemoteException。
? 對於一個可遠端呼叫的方法,它的每個非基本(nonprimitive)引數或者返回值都必須直接或間接地宣告為實現了java.io.Serializable介面。
除了實現java.rmi.Remote介面和正確宣告任何遠端方法之外,遠端物件必須提供一個無引數的建構函式,它能引發一個java.rmi.RemoteException異常。這就保證了物件可基於一種序列化狀態來遠端構造。
遠端物件必須匯出,以接收傳入的遠端方法呼叫。為此,你通常需要擴充套件java.rmi.server.UnicastRemoteObject或者java.rmi.activation.Activatable。透過對其中任何一個類進行擴充套件,遠端物件就可在建立時自動匯出。
以下介面定義展示了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類宣告為實現了java.io.Serializable介面,所以String是遠端方法的有效返回型別。
以下程式碼展示瞭如何實現TimeKeeper介面,以便定義一個有效的遠端物件:
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;
}
}
遠端物件和介面
Java提供了一個完全限定名稱為java.rmi.Remote的介面。任何物件要想參與和另一個Java物件的遠端會話,就必須直接或間接地實現該介面。尤其要注意的是,任何由java.rmi.Remote介面來標識的物件都暗示著它的方法可從其他任何虛擬機器進行呼叫。實現了 java.rmi.Remote介面的物件通常稱為“遠端物件”,必須採用以下方式來宣告它的方法:
? 每個支援遠端呼叫的方法都必須在其throws子句中宣告java.rmi.RemoteException。
? 對於一個可遠端呼叫的方法,它的每個非基本(nonprimitive)引數或者返回值都必須直接或間接地宣告為實現了java.io.Serializable介面。
除了實現java.rmi.Remote介面和正確宣告任何遠端方法之外,遠端物件必須提供一個無引數的建構函式,它能引發一個java.rmi.RemoteException異常。這就保證了物件可基於一種序列化狀態來遠端構造。
遠端物件必須匯出,以接收傳入的遠端方法呼叫。為此,你通常需要擴充套件java.rmi.server.UnicastRemoteObject或者java.rmi.activation.Activatable。透過對其中任何一個類進行擴充套件,遠端物件就可在建立時自動匯出。
以下介面定義展示了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類宣告為實現了java.io.Serializable介面,所以String是遠端方法的有效返回型別。
以下程式碼展示瞭如何實現TimeKeeper介面,以便定義一個有效的遠端物件:
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;
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958145/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分散式架構基礎:Java RMI詳解分散式架構Java
- 基於 Redis 實現分散式應用限流Redis分散式
- java 實現開箱即用基於 redis 的分散式鎖JavaRedis分散式
- 基於 Zookeeper 的分散式鎖實現分散式
- 基於redis的分散式鎖實現Redis分散式
- 基於redis實現分散式鎖Redis分散式
- 基於ZK實現分散式鎖分散式
- 表示式計算原始碼JAVA實現 (轉)原始碼Java
- 滿滿乾貨!手把手教你實現基於eTS的分散式計算器分散式
- 基於CORBA的分散式程式設計(五) (轉)ORB分散式程式設計
- 基於CORBA的分散式程式設計(九) (轉)ORB分散式程式設計
- 基於CORBA的分散式程式設計(十一) (轉)ORB分散式程式設計
- 基於CORBA的分散式程式設計(七) (轉)ORB分散式程式設計
- 基於CORBA的分散式程式設計(十) (轉)ORB分散式程式設計
- 基於RocketMQ實現分散式事務MQ分散式
- 分散式鎖與實現(一)基於Redis實現!分散式Redis
- 基於 Redis 實現簡單的分散式鎖Redis分散式
- 基於java的分散式爬蟲Java分散式爬蟲
- 【轉】分散式計算的謬論分散式
- 基於Redis的分散式鎖的簡單實現Redis分散式
- 基於zookeeper實現分散式配置中心(二)分散式
- 基於redis分散式鎖實現“秒殺”Redis分散式
- 基於Redis實現一個分散式鎖Redis分散式
- 轉轉基於MQ的分散式重試框架設計方案MQ分散式框架
- 基於阿里雲函式計算實現AI推理阿里函式AI
- MySQL 中基於 XA 實現的分散式事務MySql分散式
- 基於快取或zookeeper的分散式鎖實現快取分散式
- 基於redis和zookeeper的分散式鎖實現方式Redis分散式
- Java程式猿筆記——基於redis分散式鎖實現“秒殺”Java筆記Redis分散式
- 分散式通訊框架 - rmi分散式框架
- 分散式通訊框架 – rmi分散式框架
- 【分散式架構】(10)---基於Redis元件的特性,實現一個分散式限流分散式架構Redis元件
- 基於Redis分散式BitMap的應用Redis分散式
- 淺談分散式計算的開發與實現(一)分散式
- 淺談分散式計算的開發與實現(1)分散式
- DCOM實現分散式應用(二) (轉)分散式
- Golang 基於單節點 Redis 實現的分散式鎖GolangRedis分散式
- 基於Seata探尋分散式事務的實現方案分散式