国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

RMI原理及實現

2019-11-18 15:44:10
字體:
來源:轉載
供稿:網友

  簡介

  RMI是遠程方法調用的簡稱,象其名稱暗示的那樣,它能夠幫助我們查找并執行遠程對象的方法。通俗地說,遠程調用就象將一個class放在A機器上,然后在B機器中調用這個class的方法。

  我個人認為,盡管RMI不是唯一的企業級遠程對象訪問方案,但它卻是最輕易實現的。與能夠使不同編程語言開發的CORBA不同的是,RMI是一種純java解決方案。在RMI中,程序的所有部分都由Java編寫。

  在看本篇文章時,我假定讀者都已經具備了較扎實的Java基礎知識,在這方面有欠缺的讀者請自行閱讀有關資料。

  概念

  我在前面已經提到,RMI是一種遠程方法調用機制,其過程對于最終用戶是透明的:在進行現場演示時,假如我不說它使用了RNI,其他人不可能知道調用的方法存儲在其他機器上。當然了,二臺機器上必須都安裝有Java虛擬機(JVM)。

  其他機器需要調用的對象必須被導出到遠程注冊服務器,這樣才能被其他機器調用。因此,假如機器A要調用機器B上的方法,則機器B必須將該對象導出到其遠程注冊服務器。注冊服務器是服務器上運行的一種服務,它幫助客戶端遠程地查找和訪問服務器上的對象。一個對象只有導出來后,然后才能實現RMI包中的遠程接口。例如,假如想使機器A中的Xyz對象能夠被遠程調用,它就必須實現遠程接口。

  RMI需要使用占位程序和框架,占位程序在客戶端,框架在服務器端。在調用遠程方法時,我們無需直接面對存儲有該方法的機器。

  在進行數據通訊前,還必須做一些預備工作。占位程序就象客戶端機器上的一個本機對象,它就象服務器上的對象的代理,向客戶端提供能夠被服務器調用的方法。然后,Stub就會向服務器端的Skeleton發送方法調用,Skeleton就會在服務器端執行接收到的方法。

  Stub和Skeleton之間通過遠程調用層進行相互通訊,遠程調用層遵循TCP/ip協議收發數據。下面我們來大致了解一種稱為為“綁定”的技術。

  客戶端無論何時要調用服務器端的對象,你可曾想過他是如何告訴服務器他想創建什么樣的對象嗎?這正是“綁定”的的用武之地。在服務器端,我們將一個字符串變量與一個對象聯系在一起(可以通過方法來實現),客戶端通過將那個字符串傳遞給服務器來告訴服務器它要創建的對象,這樣服務器就可以準確地知道客戶端需要使用哪一個對象了。所有這些字符串和對象都存儲在的遠程注冊服務器中。

  在編程中需要解決的問題

  在研究代碼之前,我們來看看必須編寫哪些代碼:

  ·遠程對象:這個接口只定義了一個方法。我們應當明白的是,這個接口并非總是不包括方法的代碼而只包括方法的定義。遠程對象包含要導出的每個方法的定義,它還實現Java.rmi中的遠程接口。

  ·遠程對象實現:這是一個實現遠程對象的類。假如實現了遠程對象,就能夠覆蓋該對象中的所有方法,因此,遠程對象的實現類將真正包含我們希望導出的方法的代碼。

  ·遠程服務器:這是一個作為服務器使用的類,它是相對于要訪問遠程方法的客戶端而言的。它存儲著綁定的字符串和對象。

  ·遠程客戶端:這是一個幫助我們訪問遠程方法提供幫助的類,它也是最終用戶。我們將使用查找和調用遠程方法的方法在該類中調用遠程方法。進入討論組討論。
編程

  我們將首先編寫遠程對象,并將代碼保存為名字為AddServer.Java的文件:
import Java.rmi.*;

public interface AddServer extends Remote {

public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException;

}

  我們來看看上面的代碼。首先,為了使用其內容,我們導入rmi包。然后,我們創建一個擴展了Java.rmi中遠程接口的接口。所有的遠程對象必須擴展該遠程接口,我們將該遠程接口稱為AddServer。在該遠程對象中,有一個名字為AddNumbers的方法,客戶端可以調用這一方法。我們必須記住的是,所有的遠程方法都需要啟動RemoteException方法,有錯誤發生時就會調用該方法。

  下面我們開始編寫遠程對象的實現。這是一個實現遠程對象并包含有所有方法代碼的類,將下面的代碼保存為名字為AddServerImpl.Java的文件:

import Java.rmi.*;

public class AddServerImpl extends UnicastRemoteObject implements AddServer {
public AddServerImpl() {
super();
}
public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException {
return firstnumber + secondnumber;
}
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵台县| 古丈县| 巴里| 双柏县| 石首市| 安岳县| 富裕县| 龙川县| 梁平县| 武隆县| 黎川县| 海宁市| 蒙城县| 壶关县| 敦煌市| 三河市| 剑川县| 清原| 桃源县| 顺义区| 泌阳县| 资讯 | 台江县| 崇义县| 南召县| 马尔康县| 灵石县| 和林格尔县| 芒康县| 太湖县| 屏南县| 开原市| 承德县| 延长县| 漳浦县| 克拉玛依市| 中江县| 吉首市| 德安县| 昌都县| 信丰县|