複製鏈接
請複製以下鏈接發送給好友

RMI

鎖定
Raza Microelectronics, Inc.(RMI公司)是勇於創新的信息基礎架構半導體解決方案領導廠商,其產品廣泛地被應用於改善不斷演進的信息基礎設施。在這個演進過程中,數據中心和家庭之間的連接在強度和速率方面都逐漸升級;安全和智能化已經成為每一個網絡系統環境的要求;同時,邊緣網絡日益成為瓶頸,促使業界需要更具擴展能力及成本優勢的智能網絡接入方法。RMI公司為信息基礎架構設計並提供多樣化的解決方案,為下一代靈活的企業和數據中心應用、智能接入和數字影像系統奠定基礎。
中文名
RMI
外文名
RMI
總    部
美國加州的庫比提諾 市
子公司
兩個全資子公司位於北京深圳
創立人
Atiq Raza
運行機理
初始化與包含遠程對象的遠程連接

RMI公司介紹

背景介紹
RMI RMI
RMI 總部位於美國加州的庫比提諾 (Cupertino) 市。RMI子公司負責運營其在中國,印度和日本的發展中心以及代表處。RMI在中國的兩個全資子公司位於北京和深圳(總稱,RMI中國)。
產品
RMI公司為信息基礎設施提供一系列新一代半導體解決方案。
XLR™線程處理器(Thread Processor™)系列
基於MIPS64®的XLR處理器系列是全球首款為企業和數據中心關聯計算(Connected Computing)應用而設計的線程處理器 (Thread Processor™)。XLR系列處理器是目前功能最強大、吞吐量最優化的處理器解決方案。
XLR系列是基於RMI增強型MIPS64™內核,同時支持32個線程的獨特構架的處理器,目前工作頻率可達1.5GHz,同時支持高度集成的獨立硬件安全引擎和網絡應用加速器。安全、內容感知和智能應用對網絡和計算的應用變得日益重要,而XLR系列處理器正是為了滿足這些應用不斷融合的主要推動器。這些應用包括集成安全 (防火牆、VPN、防病毒、入侵防禦)、Web服務虛擬存儲負載平衡服務器卸載、智能路由與交換等。
XL™處理器系列
基於MIPS64®的XL處理器系列為數字影像應用帶來了低功耗的處理器解決方案。業界領先的性價比和低功耗特性,使XL處理器系列成為針對辦公室自動化和數字化娛樂市場理想的嵌入式處理器
Orion™智能接入(Intelligent Access™)處理器系列
Orion智能接入處理器系列是目前集成度最高、配備服務質量保證(QoS)的EOS方案。Orion系列產品提供運營商級的解決方案,協助運營商基於現有通訊網絡設施提供以以太網型式接入的多類型服務。
Pegasus™ PDH接入處理器系列
Pegasus系列PDH接入處理器為多類要求T1/E1/J1及T3/E3支援的接入應用提供了一個靈活的解決方案。Pegasus通過直接連接SONET/SDH數據接口來支持Ethernet-Over-DS3應用。
優異的半導體產品執行能力
RMI公司擁有的電子工程設計專才使其可以快速地開發先進的半導體產品,不斷提升處理器性能和集成度。作為一傢俱優異產品執行力的芯片廠商,RMI公司獨一無二的快速提供重塑市場革命性產品的能力可使系統製造商作出對常變的市場需求做出快速反應:
· 通過 “單芯片系統” (System-On-a-Chip) 設計方法,提供更高的集成度和更豐富的功能
· 簡化產品應用開發,幫助廠商快速地響應市場需求
· 優化產品成本,協助廠商輕鬆面對具有價格彈性的市場
· 為廠商開啓新市場、新服務之大門
RMI團隊:人才+ 經驗 = 成功
RMI公司由世界級的架構師團隊和具有豐富經驗的管理團隊創立,由首席執行官Atiq Raza先生領導。Raza先生是享譽世界、深受尊敬的半導體行業泰斗,他在三十三年的職業歷程中為新一代處理器的革新做出了卓越的貢獻。
RMI公司採取積極的研發模式,其精幹的研發隊伍由最優秀的架構師和工程師組成。RMI公司具有快速提供重塑市場的革命性產品的能力,使得系統製造商能夠對常變的市場需求做出快速反應。這個團隊利用本身在半導體和系統製造行業廣泛的產品開發及豐富的商業領導經驗,使得RMI公司從一家概念性的新公司,快速成長為成功的高科技公司。
製造
RMI公司與其緊密合作的製造夥伴都完全遵守嚴格的質量標準,保證其產品供應的連續性及可靠性。通過採用標準的CMOS生產技術,RMI公司將產品生產外發給世界一流的具擁有大量先進半導體生產技術的晶圓製造商夥伴,通過大幅度的降低成本及對資源的戰略性運用,成功地發揮了無晶圓半導體產品廠商的戰略性優勢。
沿革
2009年6月,NetLogic宣佈收購RMI公司。 [1] 
2011年9月,博通收購了NetLogic公司。 [2] 
RMI總裁背景
Atiq Raza
主席兼首席執行官
Atiq Raza是RMI公司的創立者、主席兼首席執行官。
在創立RMI公司之前,Raza先生曾擔任Advanced Micro Devices (AMD)的總裁兼首席運營長官,期間為AMD處理器產品的發展規劃制定了基礎,併成功推出AMD-K6和Athlon系列處理器。
1996年1月,AMD和NexGen公司合併,Raza成為AMD管理層成員, 並任董事。在合併前,Raza先生是當時NexGen公司的主席兼首席執行官。
Raza先生還是Matrix Semiconductors、AMI Semiconductor、Mellanox Technologies, Inc.、eASIC和TRG的董事會成員。
RMI公司由世界級的架構師團隊和具有豐富經驗的管理團隊創立,由首席執行官Atiq Raza先生領導。Raza先生是享譽世界、深受尊敬的半導體行業泰斗,他在三十三年的職業歷程中為新一代處理器的革新做出了卓越的貢獻。
RMI公司採取積極的研發模式,其精幹的研發隊伍由最優秀的架構師和工程師組成。RMI公司具有快速提供重塑市場的革命性產品的能力,使得系統製造商對常變的市場需求能夠做出快速反應。這個團隊利用本身在半導體和系統製造行業廣泛的產品開發及豐富的商業領導經驗,使得RMI公司從一家概念性的新公司,快速成長為成功的高科技公司。
RMI在中國的全資子公司位於深圳,北京等地(總稱:RMI中國),使得RMI公司可以為客户提供很好的研發協助和技術支持。
RMI中國團隊
RMI公司的中國團隊是在中國獨樹一幟的支持團隊。團隊成員全部由具有多年研發經驗的高級工程師組成,團隊成員對MIPS,PowerPC,IXP2400/2800等處理器及其應用,以及各種操作系統如VxWorks,Linux有着豐富的經驗。與其他芯片供應商在中國的技術支持團隊相比,RMI的中國團隊更像是一支研發隊伍,而不僅僅完成技術支持的工作。在與國內領先的通訊設備製造商的合作中,RMI團隊的工作能力得到了極高的評價,從不同客户那裏傳來的聲音都表示:RMI中國團隊的技術支持工作非常高效,及時。尤其在幫助客户把RMI產品集成到客户自己的系統和網絡當中方面做的很好。RMI中國團隊可以真正做到幫助客户快速搭建開發平台,高效的解決技術問題,並在系統設計方面給出建設性意見,從而幫助客户大大提高工作效率,縮短產品的研發週期。

RMI方法調用

相關概述
RMI是Java的一組擁護開發分佈式應用程序API。RMI使用Java語言接口定義了遠程對象,它集合了Java序列化和Java遠程方法協議(Java Remote Method Protocol)。簡單地説,這樣使原先的程序在同一操作系統的方法調用,變成了不同操作系統之間程序的方法調用,由於J2EE是分佈式程序平台,它以RMI機制實現程序組件在不同操作系統之間的通信。比如,一個EJB可以通過RMI調用Web上另一台機器上的EJB遠程方法。
RMI(Remote Method Invocation,遠程方法調用)是用Java在JDK1.1中實現的,它大大增強了Java開發分佈式應用的能力。Java作為一種風靡一時的網絡開發語言,其巨大的威力就體現在它強大的開發分佈式網絡應用的能力上,而RMI就是開發百分之百純Java的網絡分佈式應用系統的核心解決方案之一。其實它可以被看作是RPC的Java版本。但是傳統RPC並不能很好地應用於分佈式對象系統。而Java RMI 則支持存儲於不同地址空間的程序級對象之間彼此進行通信,實現遠程對象之間的無縫遠程調用。
RMI目前使用Java遠程消息交換協議JRMP(Java Remote Messaging Protocol)進行通信。JRMP是專為Java的遠程對象制定的協議。因此,Java RMI具有Java的“Write Once,Run Anywhere”的優點,是分佈式應用系統的百分之百純Java解決方案。用Java RMI開發的應用系統可以部署在任何支持JRE(Java Run Environment Java,運行環境)的平台上。但由於JRMP是專為Java對象制定的,因此,RMI對於用非Java語言開發的應用系統的支持不足。不能與用非Java語言書寫的對象進行通信。
Java Remote Method Invocation ( RMI -- Java遠程方法調用)允許您使用Java編寫分佈式對象。本文將介紹RMI的優點以及如何將其連接到現有的和原有的系統中,以及與用Java 編寫的組件的連接。
RMI為採用Java對象的分佈式計算提供了簡單而直接的途徑。這些對象可以是新的Java對象,也可以是圍繞現有API的簡單的Java包裝程序。Java體現了“編寫一次就能在任何地方運行的模式。而RMI可將Java模式進行擴展,使之可在任何地方運行”。
因為RMI是以Java為核心的,所以,它將Java的安全性和可移植性等強大功能帶給了分佈式計算。您可將代理和業務邏輯等屬性移動到網絡中最合適的地方。如果您要擴展Java在系統中的使用,RMI將使您充分利用其強大功能。
RMI可利用標準Java本機方法接口JNI [1]  與現有的和原有的系統相連接。RMI還可利用標準JDBC包與現有的關係數據庫連接。RMI/JNI和RMI/JDBC相結合,可幫助您利用RMI與目前使用非Java語言的現有服務器進行通信,而且在您需要時可擴展Java在這些服務器上的使用。RMI可幫助您在擴展使用時充分利用Java的強大功能。
RMI系統運行機理
RMI應用程序通常包括兩個獨立的程序:服務器程序和客户機程序。典型的服務器應用程序將創建多個遠程對象,使這些遠程對象能夠被引用,然後等待客户機調用這些遠程對象的方法。而典型的客户機程序則從服務器中得到一個或多個遠程對象的引用,然後調用遠程對象的方法。RMI為服務器和客户機進行通信和信息傳遞提供了一種機制。
在與遠程對象的通信過程中,RMI使用標準機制:stub和skeleton。遠程對象的stub擔當遠程對象的客户本地代表或代理人角色。調用程序將調用本地stub的方法,而本地stub將負責執行對遠程對象的方法調用。在RMI中,遠程對象的stub與該遠程對象所實現的遠程接口集相同。調用stub的方法時將執行下列操作:
(1) 初始化與包含遠程對象的遠程虛擬機的連接;
(2) 對遠程虛擬機的參數進行編組(寫入並傳輸);
(3) 等待方法調用結果;
(4) 解編(讀取)返回值或返回的異常;
(5) 將值返回給調用程序。為了向調用程序展示比較簡單的調用機制,stub將參數的序列化和網絡級通信等細節隱藏了起來。在遠程虛擬機中,每個遠程對象都可以有相應的skeleton(在JDK1.2環境中無需使用skeleton)。Skeleton負責將調用分配給實際的遠程對象實現。它在接收方法調用時執行下列操作:(1) 解編(讀取)遠程方法的參數;(2) 調用實際遠程對象實現上的方法;(3) 將結果(返回值或異常)編組(寫入並傳輸)給調用程序。stub和skeleton由rmic編譯器生成。
利用RMI編寫分佈式對象應用程序需要完成以下工作:(1) 定位遠程對象。應用程序可使用兩種機制中的一種得到對遠程對象的引用。它既可用RMI的簡單命名工具rmiregistry來註冊它的遠程對象,也可以將遠程對象引用作為常規操作的一部分來進行傳遞和返回。(2)與遠程對象通信。遠程對象間通信的細節由RMI處理,對於程序員來説,遠程通信看起來就像標準的Java方法調用。(3)給作為參數或返回值傳遞的對象加載類字節碼。因為RMI允許調用程序將純Java對象傳給遠程對象,所以,RMI將提供必要的機制,既可以加載對象的代碼又可以傳輸對象的數據。在RMI分佈式應用程序運行時,服務器調用註冊服務程序以使名字與遠程對象相關聯。客户機在服務器上的註冊服務程序中用遠程對象的名字查找該遠程對象,然後調用它的方法。
系統組成
一個正常工作的RMI系統由下面幾個部分組成:
·遠程服務的接口定義
·遠程服務接口的具體實現
·樁(Stub)和框架(Skeleton)文件
·一個運行遠程服務服務器
·一個RMI命名服務,它允許客户端去發現這個遠程服務
·類文件的提供者(一個HTTP或者FTP服務器
·一個需要這個遠程服務的客户端程序
技術原理
RMI系統結構,在客户端和服務器端都有幾層結構。
--------- ----------
| 客户 | |服務器|
---------- ----------
| |
------------- ----------
| 佔位程序| |骨幹網|
-------------- -----------
| |
------------------------------------
| 遠 程 引 用 層 |
------------------------------------
| |
------------------------------------
| 傳 輸 層 |
------------------------------------
方法調用從客户對象經佔位程序(Stub)、遠程引用層(Remote Reference Layer)和傳輸層(Transport Layer)向下,傳遞給主機,然後再次經傳 輸層,向上穿過遠程調用層和骨幹網(Skeleton),到達服務器對象。 佔位程序扮演着遠程服務器對象的代理的角色,使該對象可被客户激活。 遠程引用層處理語義、管理單一或多重對象的通信,決定調用是應發往一個服務器還是多個。傳輸層管理實際的連接,並且追追蹤可以接受方法調用的遠程對象。服務器端的骨幹網完成對服務器對象實際的方法調用,並獲取返回值。返回值向下經遠程引用層、服務器端的傳輸層傳遞迴客户端,再向上經傳輸層和遠程調用層返回。最後,佔位程序獲得返回值。
要完成以上步驟需要有以下幾個步驟:
1、生成一個遠程接口
2、實現遠程對象(服務器端程序)
3、生成佔位程序和骨幹網(服務器端程序)
4、編寫服務器程序
5、編寫客户程序
6、註冊遠程對象
7、啓動遠程對象
具體實現如下:
1、生成一個遠程接口
package c15.ptime;
importjava.rmi.*;
public interface PerfectTimeI extends Remote {
long getPerfectTime() throws RemoteException;
}
2、實現遠程對象(服務器端程序)
package c15.ptime;
import java.rmi.*;
import java.  net.*;
public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI {
public long getPerfectTime() throws RemoteException {
return System.currentTimeMillis();
}
public PerfectTime() throws RemoteException {
super();
}
public static void main(String[] args) {
try {
PerfectTime pt = new PerfectTime();
LocateRegistry.createRegistry(2005);
Naming.rebind( "//zhouty:2005/PerfectTime" , pt);
System.out.println("Ready to do time");
} catch(Exception e) {
e.printStackTrace();
}
}
}
4、編譯遠程對象(服務器端程序)
javac -classpath . -d . PerfectTime.java
5、生成根和幹(佔位程序和骨幹程序)
rmic -classpath . -d . c15.ptime.PerfectTime
注:jdk1.2以後的都不需要skeleton,所以如果你用的jdk為5.0版本的,
不要奇怪為什麼只產生了stub沒有skeleton。
6、註冊遠程對象
start rmiregistry 2005
注:綁定服務的默認端口為1099,如果使用了這個端口,則可以直接使用 start rmiregistry而不需要跟端口
如果這種註冊遠程對象的方法不起作用.
還有一種方法就是在綁定服務之前使用LocateRegistry.createRegistry(1099) 來註冊遠程對象.
7、啓動服務器端程序
java-Djava.rmi.server.codebase=file:///d:/TestRMI/ c15.ptime.Per
fectTime
8、編寫客户端程序
package c15.ptime;
import java.rmi.*;
public class DisplayPerfectTime {
public static void main(String[] args) {
System.setSecurityManager( new RMISecurityManager());
try {
PerfectTimeI t = (PerfectTimeI)Naming.lookup( "192.168.0.171:2005/PerfectTime");
for(int i = 0 ; i < 10; i++)
System.out.println("Perfect time =" +
t.getPerfectTime());
} catch(Exception e) {
e.printStackTrace();
}
}
}
9、編譯客端程序
javac -classpath . -d . DisplayPerfectTime.java
10、修改JVM的配置文件 (客户機和服務器的都需要經過修改)
%JRE_HOME%\policytool.exe
11、啓動客户程序
java -classpath . c15.ptime.DisplayPerfectTime
12、返回結果
Perfect time =967274884390
Perfect time =967274884450
Perfect time =967274884450
Perfect time =967274884450
Perfect time =967274884500
Perfect time =967274884500
Perfect time =967274884560
Perfect time =967274884610
Perfect time =967274884610
Perfect time =967274884610
RMI(遠程方法調用)的優點
從最基本的角度看,RMI是Java的遠程過程調用(RPC)機制。與傳統的RPC系統相比,RMI具有若干優點,因為它是Java面向對象方法的一部分。傳統的RPC系統採用中性語言,所以是最普通的系統--它們不能提供所有可能的目標平台所具有的功能。
RMI以Java為核心,可與採用本機方法與現有系統相連接。這就是説,RMI可採用自然、直接和功能全面的方式為您提供分佈式計算技術,而這種技術可幫助您以不斷遞增和無縫的方式為整個系統添加Java功能。
RMI的主要優點如下:
面向對象:RMI可將完整的對象作為參數和返回值進行傳遞,而不僅僅是預定義的數據類型。也就是説,您可以將類似Java哈希表這樣的複雜類型作為一個參數進行傳遞。而在目前的RPC系統中,您只能依靠客户機將此類對象分解成基本數據類型,然後傳遞這些數據類型,最後在服務器端重新創建哈希表。RMI則不需額外的客户程序代碼(將對象分解成基本數據類型),直接跨網傳遞對象。
可移動屬性:RMI可將屬性(類實現程序)從客户機移動到服務器,或者從服務器移到客户機。例如,您可以定義一個檢查僱員開支報告的接口,以便察看僱員是否遵守了公司目前實行的政策。在開支報告創建後,客户機就會從服務器端獲得實現該接口的對象。如果政策發生變化,服務器端就會開始返回使用了新政策的該接口的另一個實現程序。您不必在用户系統上安裝任何新的軟件就能在客户端檢查限制條件--從而向用户提供爍快的反饋,並降低服務器的工作量。這樣就能具備最大的靈活性,因為政策改變時只需要您編寫一個新的Java類,並將其在服務器主機上安裝一次即可。
設計方式:對象傳遞功能使您可以在分佈式計算中充分利用面向對象技術的強大功能,如二層和三層結構系統。如果您能夠傳遞屬性,那麼您就可以在您的解決方案中使用面向對象的設計方式。所有面向對象的設計方式無不依靠不同的屬性來發揮功能,如果不能傳遞完整的對象--包括實現和類型--就會失去設計方式上所提供的優點。
安 全:RMI使用Java內置的安全機制保證下載執行程序時用户系統的安全。RMI使用專門為保護系統免遭惡意小應用程序侵害而設計的安全管理程序,可保護您的系統和網絡免遭潛在的惡意下載程序的破壞。在情況嚴重時,服務器可拒絕下載任何執行程序。
便於編寫和使用:RMI使得Java遠程服務程序和訪問這些服務程序的Java客户程序的編寫工作變得輕鬆、簡單。遠程接口實際上就是Java接口。服務程序大約用三行指令宣佈本身是服務程序,其它方面則與任何其它Java對象類似。這種簡單方法便於快速編寫完整的分佈式對象系統的服務程序,並快速地製做軟件的原型和早期版本,以便於進行測試和評估。因為RMI程序編寫簡單,所以維護也簡單。
可連接現有/原有的系統:RMI可通過Java的本機方法接口JNI與現有系統進行進行交互。利用RMI和JNI,您就能用Java語言編寫客户端程序,還能使用現有的服務器端程序。在使用RMI/JNI與現有服務器連接時,您可以有選擇地用Java重新編寫服務程序的任何部分,並使新的程序充分發揮Java的功能。類似地,RMI可利用JDBC、在不修改使用數據庫的現有非Java源代碼的前提下與現有關係數據庫進行交互。
編寫一次,到處運行:RMI是Java“編寫一次,到處運行 ”方法的一部分。任何基於RMI的系統均可100%地移植到任何Java虛擬機上,RMI/JDBC系統也不例外。如果使用RMI/JNI與現有系統進行交互工作,則採用JNI編寫的代碼可與任何Java虛擬機進行編譯、運行。
分佈式垃圾收集:RMI採用其分佈式垃圾收集功能收集不再被網絡中任何客户程序所引用的遠程服務對象。與Java虛擬機內部的垃圾收集類似,分佈式垃圾收集功能允許用户根據自己的需要定義服務器對象,並且明確這些對象在不再被客户機引用時會被刪除。
並行計算:RMI採用多線程處理方法,可使您的服務器利用這些Java線程更好地並行處理客户端的請求。Java分佈式計算解決方案:RMI從JDK 1.1開始就是Java平台的核心部分,因此,它存在於任何一台1.1 Java虛擬機中。所有RMI系統均採用相同的公開協議,所以,所有Java 系統均可直接相互對話,而不必事先對協議進行轉換。
RMI與CORBA的關係
RMI 和 CORBA 常被視為相互競爭的技術,因為兩者都提供對遠程分佈式對象的透明訪問。但這兩種技術實際上是相互補充的,一者的長處正好可以彌補另一者的短處。RMI 和 CORBA 的結合產生了RMI-IIOP,RMI-IIOP 是企業服務器端 Java 開發的基礎。
1997 年,IBM 和 Sun Microsystems啓動了一項旨在促進 Java 作為企業開發技術的發展的合作計劃。兩家公司特別着力於如何將 Java 用作服務器端語言,生成可以結合進現有體系結構的企業級代碼。所需要的就是一種遠程傳輸技術,它兼有 Java 的 RMI(Remote Method Invocation,遠程方法調用)較少的資源佔用量和更成熟的 CORBA(Common Object Request Broker Architecture,公共對象請求代理體系結構)技術的健壯性。出於這一需要,RMI-IIOP問世了,它幫助將 Java 語言推向了目前服務器端企業開發的主流語言的領先地位。
RMI示例
Java遠程方法調用(RMI)提供了Java程序語言的遠程通訊功能,這種特性使客户機上運行的程序可以調用遠程服務器上的對象,使Java編程人員能夠在網絡環境中分佈操作。
創建一個簡單的Java分佈式遠程方法調用程序可以按以下幾個步驟操作,
一、定義遠程接口
在 Java 中,遠程對象是實現遠程接口的類的實例, 遠程接口聲明每個要遠程調用的方法。在需要創建一個遠程對象的時候,我們通過傳遞一個接口來隱藏基層的實施細節,客户通過接口句柄發送消息即可。
遠程接口具有如下特點:
1) 遠程接口必須為public屬性。如果不這樣,除非客户端與遠程接口在同一個包內,否則 當試圖裝入實現該遠程接口的遠程對象時,調用會得到錯誤結果。
2) 遠程接口必須擴展接口java.rmi.Remote。
3) 除與應用程序本身特定的例外之外,遠程接口中的每個方法都必須在自己的throws從句中 聲明java.rmi.RemoteException。(或RemoteException 的父類)。
4) 作為參數或返回值傳遞的一個遠程對象(不管是直接,還是本地對象中嵌入)必須聲明為遠 程接口,而不應聲明為實施類。
下面是遠程接口的接口RmiSample的定義
Java代碼
import java.rmi.*; public interface RmiSample extends Remote { public int sum(int a,int b) throws RemoteException; }
二、實現遠程接口
遠程對象實現類必須擴展遠程對象java.rmi.UnicastRemoteObject類,並實現所定義的遠程接口。遠程對象的實現類中包含實現每個遠程接口所指定的遠程方法的代碼。這個類也可以含有附加的方法,但客户只能使用遠程接口中的方法。因為客户是指向接口的一個句柄,而不是它的哪個類。必須為遠程對象定義構造函數,即使只准備定義一個默認構造函數,用它調用基礎類構造函數。因為基礎類構造函數可能會拋出java.rmi.RemoteException,所以即使別無它用必須拋出java.rmi.RemoteException例外。
以下是遠程對象實現類的聲明:
Java代碼
import java.rmi.*;
public class RmiSampleImpl extends UnicastRemoteObject implements RmiSample {
RmiSampleImpl() throws RemoteException {
super();
}
public int sum(int a,int b) throws RemoteException {
return a + b;
}
}
三、編寫服務器類:
包含 main 方法的類可以是實現類自身,也可以完全是另一個類。下面通過RmiSampleServer 來創建一個遠程對象的實例,並通過java.rmi.registry.LocateRegistry類的createRegistry 方法從指定端口號啓動註冊服務程序,也可以通過執行 rmiregistry 命令啓動註冊服務程序,註冊服務程序的缺省運行端口為 1099。必須將遠程對象名字綁定到對遠程對象的引用上:Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
以下是服務器類的聲明:
Java代碼
import java.rmi.*;
import java.rmi.registry.*;
public class RmiSampleServer{
public static void main(String args[]) {
try {
LocateRegistry.createRegistry(8808) ;
SampleServerImpl Server = new SampleServerImpl();
// 將該對象實例與名稱“SAMPLE-SERVER”捆綁
Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
} catch (MalformedURLException me) {
System.out.println("Malformed URL: " + me.toString());
} catch (RemoteException re) {
System.out.println("Remote exception: " + re.toString());
}
}
}
四、編寫使用遠程服務的客户機類:
客户機類的主要功能有兩個,一是通過Naming.lookup方法來構造註冊服務程序stub 程序實例,二是調用服務器遠程對象上的遠程方法。
以下是服務器類的聲明:
Java代碼
import java.rmi.*;
public class RmiSampleClient { public static void main(String[] args) {
try {
String url = "//localhost:8808/SAMPLE-SERVER";
RmiSample RmiObject = (RmiSample)Naming.lookup(url);
System.out.println(" 1 + 2 = " + RmiObject.sum(1,2) );
} catch (RemoteException exc) {
System.out.println("Error in lookup: " + exc.toString());
} catch (MalformedURLException exc) {
System.out.println("Malformed URL: " + exc.toString());
} catch (java.rmi.NotBoundException exc) {
System.out.println("NotBound: " + exc.toString());
}
}
}
五、編譯代碼:
要編譯 Java 源文件,請運行javac 命令:
Java代碼
javac RmiSample.java RmiSampleImpl.java RmiSampleServer.java RmiSampleClient.java
javac RmiSample.java RmiSampleImpl.java RmiSampleServer.java RmiSampleClient.java
六、為遠程對象實現創建根和幹:
要創建存根程序和骨架文件,應以包含遠程對象實現的已編譯類包全名運行 rmic編譯器
存根(Stub)是遠程對象在客户端的代理,它將RMI調用傳遞給服務器端的骨架(Skeleton),後者負責將該調用傳遞給實際的遠程方法輸入如下:
Java代碼
D:\RMI>rmic -d D:\RMI RmiSampleImpl
D:\RMI>rmic -d D:\RMI RmiSampleImpl 執行這個命令, 若rmic成功運行,RMI目錄下就會多出兩個新類: RmiSampleImpl_Stub.class RmiSampleImpl_Skel.class 它們分別對應的是存根(stub)和骨架(skeleton).
七、運行代碼:
運行服務端程序:在Windows下,輸入下列命令,在後台啓動RmiSampleServer程序:
Java代碼
D:\RMI>java RmiSampleServer
D:\RMI>java RmiSampleServer
運行客户端程序:
Java代碼
D:\RMI>java RmiSampleClient
D:\RMI>java RmiSampleClient
客户端輸出: 1 + 2 = 3
RMI(Retailer Managed Inventory)零售商管理庫存 RMI(Retailer Managed Inventory,RMI),零售商管理庫存。是一種傳統的庫存管理方法,相對於VMI(Vendor Managed Inventory,供應商管理庫存)而言,由零售商根據自己的銷售需要來控制管理庫存。

RMI指示器介紹

radio magnetic indicator
無線電磁指示器(RMI)是一種備用儀表,通過無線電磁指示器,可以指示VOR台與ADF台的相對位置,也可以指示飛機的磁航向。
參考資料