rmi

rmi

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

公司

背景介紹

RMI總部位于美國加州的庫比提諾(Cupertino)市。RMI子公司負責運營其在中國,印度和日本的發展中心以及代表處。RMI在中國的兩個全資子公司位于北京和深圳(總稱,RMI中國)。

産品

RMI公司為信息基礎設施提供一系列新一代半導體解決方案。

XLR™線程處理器(ThreadProcessor™)系列

基于MIPS64®的XLR處理器系列是全球首款為企業和數據中心關聯計算(ConnectedComputing)應用而設計的線程處理器(ThreadProcessor™)。XLR系列處理器是目前功能最強大、吞吐量最優化的處理器解決方案。

XLR系列是基于RMI增強型MIPS64™内核,同時支持32個線程的獨特構架的處理器,目前工作頻率可達1.5GHz,同時支持高度集成的獨立硬件安全引擎和網絡應用加速器。安全、内容感知和智能應用對網絡和計算的應用變得日益重要,而XLR系列處理器正是為了滿足這些應用不斷融合的主要推動器。這些應用包括集成安全(防火牆、VPN、防病毒、入侵防禦)、Web服務、虛拟存儲、負載平衡、服務器卸載、智能路由與交換等。

XL™處理器系列

基于MIPS64®的XL處理器系列為數字影像應用帶來了低功耗的處理器解決方案。業界領先的性價比和低功耗特性,使XL處理器系列成為針對辦公室自動化和數字化娛樂市場理想的嵌入式處理器。

Orion™智能接入(IntelligentAccess™)處理器系列

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公司由世界級的架構師團隊和具有豐富經驗的管理團隊創立,由首席執行官AtiqRaza先生領導。Raza先生是享譽世界、深受尊敬的半導體行業泰鬥,他在三十三年的職業曆程中為新一代處理器的革新做出了卓越的貢獻。

RMI公司采取積極的研發模式,其精幹的研發隊伍由最優秀的架構師和工程師組成。RMI公司具有快速提供重塑市場的革命性産品的能力,使得系統制造商能夠對常變的市場需求做出快速反應。這個團隊利用本身在半導體和系統制造行業廣泛的産品開發及豐富的商業領導經驗,使得RMI公司從一家概念性的新公司,快速成長為成功的高科技公司。

制造

RMI公司與其緊密合作的制造夥伴都完全遵守嚴格的質量标準,保證其産品供應的連續性及可靠性。通過采用标準的CMOS生産技術,RMI公司将産品生産外發給世界一流的具擁有大量先進半導體生産技術的晶圓制造商夥伴,通過大幅度的降低成本及對資源的戰略性運用,成功地發揮了無晶圓半導體産品廠商的戰略性優勢。

沿革

2009年6月,NetLogic宣布收購RMI公司。

2011年9月,博通收購了NetLogic公司。

總裁背景

AtiqRaza

主席兼首席執行官

AtiqRaza是RMI公司的創立者、主席兼首席執行官。

在創立RMI公司之前,Raza先生曾擔任AdvancedMicroDevices(AMD)的總裁兼首席運營長官,期間為AMD處理器産品的發展規劃制定了基礎,并成功推出AMD-K6和Athlon系列處理器。

1996年1月,AMD和NexGen公司合并,Raza成為AMD管理層成員,并任董事。在合并前,Raza先生是當時NexGen公司的主席兼首席執行官。

Raza先生還是MatrixSemiconductors、AMISemiconductor、MellanoxTechnologies,Inc.、eASIC和TRG的董事會成員。

RMI公司由世界級的架構師團隊和具有豐富經驗的管理團隊創立,由首席執行官AtiqRaza先生領導。Raza先生是享譽世界、深受尊敬的半導體行業泰鬥,他在三十三年的職業曆程中為新一代處理器的革新做出了卓越的貢獻。

RMI公司采取積極的研發模式,其精幹的研發隊伍由最優秀的架構師和工程師組成。RMI公司具有快速提供重塑市場的革命性産品的能力,使得系統制造商對常變的市場需求能夠做出快速反應。這個團隊利用本身在半導體和系統制造行業廣泛的産品開發及豐富的商業領導經驗,使得RMI公司從一家概念性的新公司,快速成長為成功的高科技公司。

RMI在中國的全資子公司位于深圳,北京等地(總稱:RMI中國),使得RMI公司可以為客戶提供很好的研發協助和技術支持。

中國團隊

RMI公司的中國團隊是在中國獨樹一幟的支持團隊。團隊成員全部由具有多年研發經驗的高級工程師組成,團隊成員對MIPS,PowerPC,IXP2400/2800等處理器及其應用,以及各種操作系統如VxWorks,Linux有着豐富的經驗。與其他芯片供應商在中國的技術支持團隊相比,RMI的中國團隊更像是一支研發隊伍,而不僅僅完成技術支持的工作。在與國内領先的通訊設備制造商的合作中,RMI團隊的工作能力得到了極高的評價,從不同客戶那裡傳來的聲音都表示:RMI中國團隊的技術支持工作非常高效,及時。尤其在幫助客戶把RMI産品集成到客戶自己的系統和網絡當中方面做的很好。RMI中國團隊可以真正做到幫助客戶快速搭建開發平台,高效的解決技術問題,并在系統設計方面給出建設性意見,從而幫助客戶大大提高工作效率,縮短産品的研發周期。

遠程方法調用

概述

RMI是Java的一組擁護開發分布式應用程序的API。RMI使用Java語言接口定義了遠程對象,它集合了Java序列化和Java遠程方法協議(JavaRemoteMethodProtocol)。簡單地說,這樣使原先的程序在同一操作系統的方法調用,變成了不同操作系統之間程序的方法調用,由于J2EE是分布式程序平台,它以RMI機制實現程序組件在不同操作系統之間的通信。比如,一個EJB可以通過RMI調用Web上另一台機器上的EJB遠程方法。

RMI(RemoteMethodInvocation,遠程方法調用)是用Java在JDK1.1中實現的,它大大增強了Java開發分布式應用的能力。Java作為一種風靡一時的網絡開發語言,其巨大的威力就體現在它強大的開發分布式網絡應用的能力上,而RMI就是開發百分之百純Java的網絡分布式應用系統的核心解決方案之一。其實它可以被看作是RPC的Java版本。但是傳統RPC并不能很好地應用于分布式對象系統。而JavaRMI則支持存儲于不同地址空間的程序級對象之間彼此進行通信,實現遠程對象之間的無縫遠程調用。

RMI目前使用Java遠程消息交換協議JRMP(JavaRemoteMessagingProtocol)進行通信。JRMP是專為Java的遠程對象制定的協議。因此,JavaRMI具有Java的“WriteOnce,RunAnywhere”的優點,是分布式應用系統的百分之百純Java解決方案。用JavaRMI開發的應用系統可以部署在任何支持JRE(JavaRunEnvironmentJava,運行環境)的平台上。但由于JRMP是專為Java對象制定的,因此,RMI對于用非Java語言開發的應用系統的支持不足。不能與用非Java語言書寫的對象進行通信。

JavaRemoteMethodInvocation(RMI--Java遠程方法調用)允許您使用Java編寫分布式對象。本文将介紹RMI的優點以及如何将其連接到現有的和原有的系統中,以及與用Java編寫的組件的連接。

RMI為采用Java對象的分布式計算提供了簡單而直接的途徑。這些對象可以是新的Java對象,也可以是圍繞現有API的簡單的Java包裝程序。Java體現了“編寫一次就能在任何地方運行的模式。而RMI可将Java模式進行擴展,使之可在任何地方運行”。

因為RMI是以Java為核心的,所以,它将Java的安全性和可移植性等強大功能帶給了分布式計算。您可将代理和梢?務邏輯等屬性移動到網絡中最合适的地方。如果您要擴展Java在系統中的使用,RMI将使您充分利用其強大功能。

RMI可利用标準Java本機方法接口JNI與現有的和原有的系統相連接。RMI還可利用标準JDBC包與現有的關系數據庫連接。RMI/JNI和RMI/JDBC相結合,可幫助您利用RMI與目前使用非Java語言的現有服務器進行通信,而且在您需要時可擴展Java在這些服務器上的使用。RMI可幫助您在擴展使用時充分利用Java的強大功能。

系統運行機理

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)、遠程引用層(RemoteReferenceLayer)和傳輸層(TransportLayer)向下,傳遞給主機,然後再次經傳輸層,向上穿過遠程調用層和骨幹網(Skeleton),到達服務器對象。占位程序扮演着遠程服務器對象的代理的角色,使該對象可被客戶激活。遠程引用層處理語義、管理單一或多重對象的通信,決定調用是應發往一個服務器還是多個。傳輸層管理實際的連接,并且追追蹤可以接受方法調用的遠程對象。服務器端的骨幹網完成對服務器對象實際的方法調用,并獲取返回值。返回值向下經遠程引用層、服務器端的傳輸層傳遞回客戶端,再向上經傳輸層和遠程調用層返回。最後,占位程序獲得返回值。

要完成以上步驟需要有以下幾個步驟:

1、生成一個遠程接口

2、實現遠程對象(服務器端程序)

3、生成占位程序和骨幹網(服務器端程序)

4、編寫服務器程序

5、編寫客戶程序

6、注冊遠程對象

7、啟動遠程對象

具體實現如下:

1、生成一個遠程接口

packagec15.ptime;

importjava.rmi.*;

publicinterfacePerfectTimeIextendsRemote{longgetPerfectTime()throwsRemoteException;}

2、實現遠程對象(服務器端程序)

packagec15.ptime;

importjava.rmi.*;

importjava.rmi.server.*;

importjava.rmi.registry.*;

importjava.net.*;

publicclassPerfectTimeextendsUnicastRemoteObjectimplementsPerfectTimeI{

publiclonggetPerfectTime()throwsRemoteException{returnSystem.currentTimeMillis();}

publicPerfectTime()throwsRemoteException{super();}

publicstaticvoidmain(String[]args){System.setSecurityManager(newRMISecurityManager());try{

PerfectTimept=newPerfectTime();Naming.rebind("//zhouty:2005/PerfectTime",pt);System.out.println("Readytodotime");}catch(Exceptione){e.printStackTrace();}}}

4、編譯遠程對象(服務器端程序)

javac-classpath.-d.PerfectTime.java

5、生成根和幹(占位程序和骨幹程序)

rmic-classpath.-d.c15.ptime.PerfectTime

注:jdk1.2以後的都不需要skeleton,所以如果你用的jdk為5.0版本的,

不要奇怪為什麼隻産生了stub沒有skeleton。

6、注冊遠程對象

startrmiregistry2005

注:綁定服務的默認端口為1099,如果使用了這個端口,則可以直接使用startrmiregistry而不需要跟端口

如果這種注冊遠程對象的方法不起作用.

還有一種方法就是在綁定服務之前使用LocateRegistry.createRegistry(1099)來注冊遠程對象.

7、啟動服務器端程序

java-Djava.rmi.server.codebase=file:///d:/TestRMI/c15.ptime.Per

fectTime

8、編寫客戶端程序

packagec15.ptime;

importjava.rmi.*;

importjava.rmi.registry.*;

publicclassDisplayPerfectTime{publicstaticvoidmain(String[]args){System.setSecurityManager(newRMISecurityManager());try{PerfectTimeIt=(PerfectTimeI)Naming.lookup("192.168.0.171:2005/PerfectTime");for(inti=0;i<10;i++)System.out.println("Perfecttime="+t.getPerfectTime());}catch(Exceptione){e.printStackTrace();}}}

9、編譯客端程序

javac-classpath.-d.DisplayPerfectTime.java

10、修改JVM的配置文件(客戶機和服務器的都需要經過修改)

%JRE_HOME%policytool.exe

11、啟動客戶程序

java-classpath.c15.ptime.DisplayPerfectTime

12、返回結果

Perfecttime=967274884390

Perfecttime=967274884450

Perfecttime=967274884450

Perfecttime=967274884450

Perfecttime=967274884500

Perfecttime=967274884500

Perfecttime=967274884560

Perfecttime=967274884610

Perfecttime=967274884610

Perfecttime=967274884610

優點

從最基本的角度看,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從JDK1.1開始就是Java平台的核心部分,因此,它存在于任何一台1.1Java虛拟機中。所有RMI系統均采用相同的公開協議,所以,所有Java系統均可直接相互對話,而不必事先對協議進行轉換。

與CORBA的關系

RMI和CORBA常被視為相互競争的技術,因為兩者都提供對遠程分布式對象的透明訪問。但這兩種技術實際上是相互補充的,一者的長處正好可以彌補另一者的短處。RMI和CORBA的結合産生了RMI-IIOP,RMI-IIOP是企業服務器端Java開發的基礎。

1997年,IBM和SunMicrosystems啟動了一項旨在促進Java作為企業開發技術的發展的合作計劃。兩家公司特别着力于如何将Java用作服務器端語言,生成可以結合進現有體系結構的企業級代碼。所需要的就是一種遠程傳輸技術,它兼有Java的RMI(RemoteMethodInvocation,遠程方法調用)較少的資源占用量和更成熟的CORBA(CommonObjectRequestBrokerArchitecture,公共對象請求代理體系結構)技術的健壯性。出于這一需要,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代碼

importjava.rmi.*;publicinterfaceRmiSampleextendsRemote{publicintsum(inta,intb)throwsRemoteException;}

二、實現遠程接口:

遠程對象實現類必須擴展遠程對象java.rmi.UnicastRemoteObject類,并實現所定義的遠程接口。遠程對象的實現類中包含實現每個遠程接口所指定的遠程方法的代碼。這個類也可以含有附加的方法,但客戶隻能使用遠程接口中的方法。因為客戶是指向接口的一個句柄,而不是它的哪個類。必須為遠程對象定義構造函數,即使隻準備定義一個默認構造函數,用它調用基礎類構造函數。因為基礎類構造函數可能會抛出java.rmi.RemoteException,所以即使别無它用必須抛出java.rmi.RemoteException例外。

以下是遠程對象實現類的聲明:

Java代碼

importjava.rmi.*;

importjava.rmi.server.*;

publicclassRmiSampleImplextendsUnicastRemoteObjectimplementsRmiSample{RmiSampleImpl()throwsRemoteException{super();}publicintsum(inta,intb)throwsRemoteException{returna+b;}}

三、編寫服務器類:

包含main方法的類可以是實現類自身,也可以完全是另一個類。下面通過RmiSampleServer來創建一個遠程對象的實例,并通過java.rmi.registry.LocateRegistry類的createRegistry方法從指定端口号啟動注冊服務程序,也可以通過執行rmiregistry命令啟動注冊服務程序,注冊服務程序的缺省運行端口為1099。必須将遠程對象名字綁定到對遠程對象的引用上:Naming.rebind("//localhost:8808/SAMPLE-SERVER",Server);

以下是服務器類的聲明:

Java代碼

importjava.rmi.*;

importjava.rmi.registry.*;

publicclassRmiSampleServer{

publicstaticvoidmain(Stringargs[]){

try{LocateRegistry.createRegistry(8808);SampleServerImplServer=newSampleServerImpl();//将該對象實例與名稱“SAMPLE-SERVER”捆綁Naming.rebind("//localhost:8808/SAMPLE-SERVER",Server);}catch(MalformedURLExceptionme){System.out.println("MalformedURL:"+me.toString());}catch(RemoteExceptionre){System.out.println("Remoteexception:"+re.toString());}}}

四、編寫使用遠程服務的客戶機類:

客戶機類的主要功能有兩個,一是通過Naming.lookup方法來構造注冊服務程序stub程序實例,二是調用服務器遠程對象上的遠程方法。

以下是服務器類的聲明:

Java代碼

importjava.rmi.*;

importjava.rmi.server.*;

publicclassRmiSampleClient{publicstaticvoidmain(String[]args){try{Stringurl="//localhost:8808/SAMPLE-SERVER";RmiSampleRmiObject=(RmiSample)Naming.lookup(url);System.out.println("1+2="+RmiObject.sum(1,2));}catch(RemoteExceptionexc){System.out.println("Errorinlookup:"+exc.toString());}catch(MalformedURLExceptionexc){System.out.println("MalformedURL:"+exc.toString());}catch(java.rmi.NotBoundExceptionexc){System.out.println("NotBound:"+exc.toString());}}}

五、編譯代碼:

要編譯Java源文件,請運行javac命令:

Java代碼

javacRmiSample.javaRmiSampleImpl.javaRmiSampleServer.javaRmiSampleClient.java

javacRmiSample.javaRmiSampleImpl.javaRmiSampleServer.javaRmiSampleClient.java

六、為遠程對象實現創建根和幹:

要創建存根程序和骨架文件,應以包含遠程對象實現的已編譯類包全名運行rmic編譯器。

存根(Stub)是遠程對象在客戶端的代理,它将RMI調用傳遞給服務器端的骨架(Skeleton),後者負責将該調用傳遞給實際的遠程方法輸入如下:

Java代碼

D:RMI>rmic-dD:RMIRmiSampleImpl

D:RMI>rmic-dD:RMIRmiSampleImpl執行這個命令,若rmic成功運行,RMI目錄下就會多出兩個新類:RmiSampleImpl_Stub.classRmiSampleImpl_Skel.class它們分别對應的是存根(stub)和骨架(skeleton).

七、運行代碼:

運行服務端程序:在Windows下,輸入下列命令,在後台啟動RmiSampleServer程序:

Java代碼

D:RMI>javaRmiSampleServer

D:RMI>javaRmiSampleServer

運行客戶端程序:

Java代碼

D:RMI>javaRmiSampleClient

D:RMI>javaRmiSampleClient

客戶端輸出:1+2=3

RMI(RetailerManagedInventory)零售商管理庫存RMI(RetailerManagedInventory,RMI),零售商管理庫存。是一種傳統的庫存管理方法,相對于VMI(VendorManagedInventory,供應商管理庫存)而言,由零售商根據自己的銷售需要來控制管理庫存。

上一篇:中國台風網

下一篇:卡斯柯

相關詞條

相關搜索

其它詞條