版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第十章RMI計算機學(xué)院網(wǎng)絡(luò)工程,2#410本章關(guān)鍵字分布式計算是一門計算機科學(xué),它研究如何把一個需要非常巨大的計算能力才能解決的問題分成許多小的局部,然后把這些局部分配給許多計算機進行處理,最后把這些計算結(jié)果綜合起來得到最終的結(jié)果。RMI:面向?qū)ο蟮倪h程方法調(diào)用(RemoteMethodInvocation)是EnterpriseJavaBeans的支柱,是建立分布式Java應(yīng)用程序的方便途徑。2思考場景計算PI效勞預(yù)報天氣情況數(shù)據(jù)調(diào)度資源用戶3程序舉例RMI/Arith.java本地數(shù)據(jù)調(diào)用遠程的累加資源4第十章RMI10.1RMI概念10.2RMI工作機制10.3RMI實現(xiàn)技術(shù)510.1RMI概念分布式計算是一門計算機科學(xué),其實質(zhì)是“要求運行在不同地址空間不同主機上的對象互相調(diào)用。〞各種分布式系統(tǒng)都有自己的調(diào)用協(xié)議,CORBA〔CommonObjectRequestBrokerArchitecture,公共對象請求代理體系結(jié)構(gòu)〕的IIOP(InternetInterORBProtocol,互聯(lián)網(wǎng)內(nèi)部對象請求代理協(xié)議);MTS〔MicrosoftTransactionServer〕的DCOM〔DistributedComponentObjectModel,分布式組件對象模型〕。6JAVA中的分布式解決方案在EJB〔EnterpriseJavaBean〕組件的選擇Socket,但它要求客戶端和效勞端必須進行應(yīng)用級協(xié)議的編碼交換數(shù)據(jù);RPC(RemoteProcedureCall),它抽象出了通訊接口用于過程調(diào)用,使得編程者調(diào)用一個遠程過程調(diào)用本地過程同樣方便,但RPC并不支持對象;面向?qū)ο蟮倪h程調(diào)用RMI(RemoteMethodInvocation),采用它使得調(diào)用遠程對象和調(diào)用本地對象同樣方便。RMI采用JRMP(JavaRemoteMethodProtocol)通訊協(xié)議,是構(gòu)建在TCP/IP協(xié)議上的一種遠程調(diào)用方法。7什么是RMIRMI是Java的一組開發(fā)分布式應(yīng)用程序的API。RMI使用Java語言接口定義了遠程對象,它集合了Java序列化和Java遠程方法協(xié)議(JavaRemoteMethodProtocol)。通過RMI技術(shù),使原先的程序在同一操作系統(tǒng)的方法調(diào)用,變成了不同操作系統(tǒng)之間程序的方法調(diào)用,由于J2EE是分布式程序平臺,它一RMI機制實現(xiàn)程序組件在不同操作系統(tǒng)之間的通信。比方,一個EJB可以通過RMI調(diào)用Web上另一臺機器上的EJB遠程方法。8RMI調(diào)用例如圖對象應(yīng)用程序?qū)ο髮ο髮ο驲MI(提供參數(shù))網(wǎng)絡(luò)本地遠程返回結(jié)果9強大的RMI技術(shù)RMI〔RemoteMethodInvocation,遠程方法調(diào)用〕是用Java在JDK1.1中實現(xiàn)的,它大大增強了Java開發(fā)分布式應(yīng)用的能力。為什么稱Java為網(wǎng)絡(luò)開發(fā)語言,其主要原因就在于〞強大開發(fā)分布式網(wǎng)絡(luò)應(yīng)用“的能力上,而RMI就是開發(fā)百分之百純Java的網(wǎng)絡(luò)分布式應(yīng)用系統(tǒng)的核心解決方案之一。其實,它可以被看作是RPC的Java版本,但是傳統(tǒng)RPC并不能很好地應(yīng)用于分布式對象系統(tǒng)。而JavaRMI那么支持存儲于不同地址空間的程序級對象之間彼此進行通信,實現(xiàn)遠程對象之間的無縫遠程調(diào)用。10真正的跨平臺操作RMI是以Java為核心的,它將Java的平安性和可移植性等強大功能帶給了分布式計算,所以可將代理和業(yè)務(wù)邏輯等屬性移動到網(wǎng)絡(luò)中最適宜的地方。RMI可利用標準Java本機方法接口JNI與現(xiàn)有的和原有的系統(tǒng)相連接,RMI還可利用標準JDBC包與關(guān)系數(shù)據(jù)庫連接,RMI/JNI和RMI/JDBC相結(jié)合,可利用RMI與目前使用非Java語言的現(xiàn)有效勞器進行通信。RMI為采用Java對象的分布式計算提供了簡單而直接的途徑,通過RMI技術(shù)充分表達了“編寫一次就能在任何地方運行的模式〞。11JAVA的平安性12JAVA的可移植性13RMI的主要優(yōu)點:面向?qū)ο螅篟MI可將完整的對象作為參數(shù)和返回值進行傳遞,而不僅僅是預(yù)定義的數(shù)據(jù)類型??梢浦矊傩裕篟MI可將屬性(類實現(xiàn)程序)從客戶機移動到效勞器,或者從效勞器移到客戶機。設(shè)計方式:對象傳遞功能使您可以在分布式計算中充分利用面向?qū)ο蠹夹g(shù)的強大功能。14RMI的主要優(yōu)點〔續(xù)〕:安全:RMI使用Java內(nèi)置的平安機制保證下載執(zhí)行程序時用戶系統(tǒng)的平安。便于編寫和使用:RMI使得Java遠程效勞程序和訪問這些效勞程序的Java客戶程序的編寫工作變得輕松、簡單??蛇B接現(xiàn)有/原有的系統(tǒng):RMI可通過Java的本機方法接口JNI與現(xiàn)有系統(tǒng)進行進行交互。RMI可利用JDBC、在不修改使用數(shù)據(jù)庫的現(xiàn)有非Java源代碼的前提下與現(xiàn)有關(guān)系數(shù)據(jù)庫進行交互。15RMI的主要優(yōu)點〔續(xù)〕:編寫一次,到處運行:RMI是Java“編寫一次,到處運行〞方法的一局部。分布式垃圾收集:RMI采用其分布式垃圾收集功能收集不再被網(wǎng)絡(luò)中任何客戶程序所引用的遠程效勞對象。并行計算:RMI采用多線程處理方法,可使您的效勞器利用這些Java線程更好地并行處理客戶端的請求。16RMI標準支持對存在于不同虛擬機上對象的無縫的遠程調(diào)用支持效勞器對客戶的回調(diào)把分布式對象模型自然地集成到Java語言里,盡可能從語義上保存Java的面向?qū)ο蟮奶卣魇狗植际綄ο竽P秃捅镜豃ava對象模型間的差異明朗使編寫可靠的分布式應(yīng)用程序盡可能簡單保存Javarun-time環(huán)境索提供的平安性多樣化的遠程調(diào)用機制支持多傳輸?shù)哪芰Ψ植际降睦厥?710.2RMI工作機制RMI應(yīng)用程序通常包括兩個獨立的程序:效勞器程序和客戶機程序。而RMI為效勞器和客戶機進行通信和信息傳遞提供了一種機制。典型的效勞器應(yīng)用程序?qū)?chuàng)立多個遠程對象,使這些遠程對象能夠被引用,然后等待客戶機調(diào)用這些遠程對象的方法。典型的客戶機程序那么從效勞器中得到一個或多個遠程對象的引用,然后調(diào)用遠程對象的方法。18樁和構(gòu)架在與遠程對象的通信過程中,RMI使用標準機制:樁stub和構(gòu)架skeleton;樁和架構(gòu)是應(yīng)用程序與系統(tǒng)其他局部的接口,通常使用RMI的rmic編譯器產(chǎn)生;樁通常負責(zé):初始化遠程調(diào)用、序列化、遠程方法調(diào)用、反序列化、遠程方法調(diào)用完成等;構(gòu)架負責(zé):反序列化客戶端參數(shù)、調(diào)用實際遠程對象、序列化返回客戶端參數(shù)。19樁20RMI系統(tǒng)結(jié)構(gòu)客戶服務(wù)器樁stub構(gòu)架skeleton遠程引用層傳輸層21RMI系統(tǒng)結(jié)構(gòu)RMI系統(tǒng)由以下組成樁/構(gòu)架層(stub/skeleton):應(yīng)用程序與系統(tǒng)其他局部的接口;遠程引用層:負責(zé)獨立于客戶樁和效勞器構(gòu)架,提供多種形式的遠程引用和調(diào)用協(xié)議;傳輸層:低級層,在不同的地址空間內(nèi)傳輸序列化的流。22方法調(diào)用的流向方法調(diào)用從客戶對象經(jīng)樁程序〔Stub)、遠程引用層(RemoteReferenceLayer)和傳輸層〔TransportLayer〕向下,傳遞給主機,然后再次經(jīng)傳輸層,向上穿過遠程調(diào)用層和骨干網(wǎng)〔Skeleton〕,到達效勞器對象。23方法調(diào)用的流向〔續(xù)〕樁程序扮演著遠程效勞器對象的代理的角色,使該對象可被客戶激活。遠程引用層處理語義、管理單一或多重對象的通信,決定調(diào)用是應(yīng)發(fā)往一個效勞器還是多個。傳輸層管理實際的連接,并且追蹤可以接受方法調(diào)用的遠程對象。效勞器端的骨干網(wǎng)完成對效勞器對象實際的方法調(diào)用,并獲取返回值。返回值向下經(jīng)遠程引用層、效勞器端的傳輸層傳遞回客戶端,再向上經(jīng)傳輸層和遠程調(diào)用層返回。最后,樁程序獲得返回值。24RMI工作機制調(diào)用將樁/構(gòu)架層傳遞,他們作為應(yīng)用程序與RMI系統(tǒng)其他局部的一個接口來提供效勞。它惟一目的是通過序列化流,傳輸數(shù)據(jù)到遠程引用層;一旦數(shù)據(jù)通過樁/構(gòu)架層傳遞,它將通過遠程引用層,實現(xiàn)調(diào)用的予以,并且使用面向連接的流,將數(shù)據(jù)傳遞到傳輸層;數(shù)據(jù)到達傳輸層,負責(zé)建立連接并管理這些連接。2510.3RMI實現(xiàn)技術(shù)利用RMI編寫分布式對象應(yīng)用程序需要完成以下工作:〔1〕定位遠程對象。應(yīng)用程序通常使用簡單命名工具rmiRegistry來注冊它的遠程對象?!?〕與遠程對象通信。遠程對象間通信的細節(jié)由RMI處理,對于程序員來說,遠程通信看起來就像標準的Java方法調(diào)用?!?〕給作為參數(shù)或返回值傳遞的對象加載類字節(jié)碼。26rmi由5個包和3個應(yīng)用工具組成java.rmi
客戶端的rmi類,接口和異常
java.rmi.sever
效勞器端的rmi類,接口和異常
java.rmi.registry
用于管理rmi命名效勞的類
java.rmi.dgc
用于管理分布式垃圾收集的類
java.rmi.activation
用于按需緝獲的rmi效勞的類
rmic
編譯器,生成stub和skeleton
rmiregistry
一個為rmi提供命名效勞的效勞器,這項效勞把名字和對象關(guān)聯(lián)在一起
rmid
一個支持rmi激活框架的效勞器
27Java.rmi軟件包RemoteRemoteObjectRemoteServerActivatableUnicastRemoteObjectIOExceptionRemoteExceptionObjectLocateRegisterySecurityManagerNamingRMISecurityManager28Java.rmi.Remote接口29Remote接口該接口是一個不定義方法的標記接口,其全部內(nèi)容只有下面一行
publicinterfaceRemote{}30RMI實現(xiàn)的步驟遠程效勞的接口定義;遠程效勞接口的具體實現(xiàn);樁〔Stub〕和框架〔Skeleton〕文件;一個運行遠程效勞的效勞器;一個RMI命名效勞,它允許客戶端去發(fā)現(xiàn)這個遠程效勞;類文件的提供者〔一個HTTP或者FTP效勞器〕;一個需要這個遠程效勞的客戶端程序。3110.3.2RMI實現(xiàn)流程1、生成一個遠程接口;2、實現(xiàn)遠程對象(效勞器端程序);3、生成樁程序和骨干網(wǎng)(效勞器端程序);4、編寫效勞器程序;5、編寫客戶程序;6、注冊遠程對象;7、啟動遠程對象。32RMI根底的類設(shè)置在根底的RMI中至少包含三個類遠程接口效勞端程序客戶端程序例如:RMI/arith.java33定義遠程接口遠程接口定義說明了效勞器提供的方法特性,包含了方法的名字和參數(shù)。這樣的接口必備的特性必須聲明為public必須extendsjava.rmi.Remote接口異常處理時,必須throwsjava.rmi.RemoteException34實現(xiàn)遠程接口必要步驟指定要執(zhí)行的遠程接口定義遠程對象的成員屬性實現(xiàn)能被遠程調(diào)用的方法創(chuàng)立一個平安管理器RMISecurityManager對象實例創(chuàng)立遠程對象的對象實例注冊rebind或bind遠程對象到RMI注冊表中35開發(fā)客戶端程序建立遠程對象實例對象;在制定的RMI注冊表查找相應(yīng)的遠程效勞;傳遞參數(shù)及調(diào)用相關(guān)遠程方法;等待結(jié)果及輸出結(jié)果。3610.3.3RMI在Windows下運行步驟一共分為5步1.進入命令行窗口,進入自己工程的文件夾內(nèi)使用javac*.java2.使用rmicserverName這時會產(chǎn)生一個serverName_Stub.class的文件3.使用startrmiregistry4.輸入java-Djava.security.policy=policyNameserverName運行效勞器5.如果成功另外翻開一個命令行窗口進入自己工程文件夾輸入java-Djava.security.policy=policyNameclientName〔注意,有的時候要在后面加上參數(shù)localhost〕37產(chǎn)生樁和框架樁和框架是是在效勞器端在運行時確定,根據(jù)需要動態(tài)裝載,采用rmic編譯器生成stub和skeleton。例如 rmicrmiExampl在JDK1.5下,該命令執(zhí)行后將生成一個樁文件,文件名為:rmiExampl_Stub.class
38啟動RMI注冊表RMI注冊表是一個名字效勞,允許客戶程序獲得對遠程對象的引用,在效勞器/客戶程序之前,必須啟動RMI注冊表。在Windows環(huán)境下,啟動方式為 startrmiregistry 默認情況下,啟動的端口為1099。如果要改變端口那么使用 startrmiregistry300039執(zhí)行RMI效勞器和客戶機首先,執(zhí)行效勞器端程序JavarmiServer然后,執(zhí)行客戶端程序JavarmiClient40程序舉例RMI/獲得遠程時間41在執(zhí)行效勞器端程序時的異常執(zhí)行javarmiServer出現(xiàn)異常java.security.AccessControlException:accessdenied(.SocketPermission:3000connect,resolve)被本地的策略文件所限制4210.3.4什么是策略文件一個文本文件,里面記錄了一些對計算機資源訪問的方式;比方對本地文件的訪問控制,對端口的訪問控制等。其文件后綴名為〞*.policy〞系統(tǒng)策略文件的缺省位置為: java.home/lib/security/java.policy(Solaris)java.home\lib\security\java.policy(Windows)43根本的授權(quán)設(shè)置GrantcodeBase“路徑"{ permissionjava.io.FilePermission "C:\\users\\cathy\\foo.bat","read"; permission.SocketPermission "*:1024-65535","connect,accept"; permission
java.security.AllPermission;};44最簡單的解決方案翻開你的jdk目錄下的這個文件C:\ProgramFiles\Java\jdk1.5.0_04\jre\lib\security\java.policy在文件最后參加下面代碼:grant{
permission.SocketPermission"*:1024-65535","connect,accept";
permission.SocketPermission"*:80","connect";};45最常用的解決方案建立自己的策略文件,如c:\MyPolicy.policy,內(nèi)容為:grant{
permission.SocketPermission"localhost:2005","connect,resolve";}執(zhí)行時用命令,指定了平安策略文件java-Djava.security.policy=c:\MyPolicy.policyrmiServer46其它2種解決方案1)設(shè)置平安管理器System.setSecurityManager(newRMISecurityManager());,2)把System.setSecurityManager(newRMISecurityManager())改為匿名類實現(xiàn),覆蓋兩個方法System.setSecurityM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度商鋪租賃合同能源消耗及節(jié)能措施3篇
- 2025年出租車座套廣告創(chuàng)意內(nèi)容制作與傳播合同4篇
- 二零二五年度農(nóng)業(yè)科技園區(qū)基礎(chǔ)設(shè)施建設(shè)項目合同10篇
- 2025年墻體改梁與智能家居系統(tǒng)集成服務(wù)合同4篇
- 2025年度城市園林景觀設(shè)計與木工班組施工服務(wù)合同3篇
- 二零二五版醫(yī)療衛(wèi)生單位委托醫(yī)護人員招聘合同3篇
- 二零二五年度農(nóng)副業(yè)農(nóng)業(yè)保險服務(wù)承包合同書模板4篇
- 2025年度醫(yī)療設(shè)備采購及維護服務(wù)合同模板4篇
- 二零二五年度特色農(nóng)產(chǎn)品基地土地租賃合同樣本4篇
- 2025年度二手房買賣合同(含裝修及家具家電清單)
- GB/T 43650-2024野生動物及其制品DNA物種鑒定技術(shù)規(guī)程
- 2024年南京鐵道職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 暴發(fā)性心肌炎查房
- 口腔醫(yī)學(xué)中的人工智能應(yīng)用培訓(xùn)課件
- 工程質(zhì)保金返還審批單
- 【可行性報告】2023年電動自行車項目可行性研究分析報告
- 五月天歌詞全集
- 商品退換貨申請表模板
- 實習(xí)單位鑒定表(模板)
- 數(shù)字媒體應(yīng)用技術(shù)專業(yè)調(diào)研方案
- 2023年常州市新課結(jié)束考試九年級數(shù)學(xué)試卷(含答案)
評論
0/150
提交評論