Vzdálené vyvolání metody Java - Java remote method invocation
v výpočetní, Vzdálená vyvolání metody Java (Java RMI) je Jáva API který vystupuje vzdálené vyvolání metody, objektově orientovaný ekvivalent vzdálené volání procedur (RPC), s podporou přímého převodu serializováno Java třídy a distribuovaný sběr odpadu.
Původní implementace závisí na Virtuální stroj Java (JVM) mechanismy reprezentace tříd a podporuje tak pouze volání z jednoho JVM do druhého. Protokol, který je základem této implementace pouze pro Javu, je známý jako Protokol vzdálené metody Java (JRMP). Pro podporu kódu běžícího v kontextu jiném než JVM programátoři později vyvinuli a CORBA verze.
Použití výrazu RMI může označovat pouze programovací rozhraní nebo může znamenat jak API, tak JRMP, IIOP, nebo jinou implementaci, zatímco termín RMI-IIOP (číst: RMI přes IIOP ) konkrétně označuje rozhraní RMI delegující většinu funkcí na podpůrné CORBA implementace.
Základní myšlenka Java RMI, protokolu distribuovaného odpadu (DGC) a velké části architektury, která je základem původní implementace Sunu, pochází z funkce „síťových objektů“ Modula-3.
Zobecněný kód
Programátoři původního rozhraní RMI API poněkud zobecnili kód, aby podporovali různé implementace, například a HTTP doprava. Navíc schopnost předávat argumenty "podle hodnoty "byl přidán do CORBA, aby byl kompatibilní s rozhraním RMI. Implementace RMI-IIOP a JRMP přesto nemají úplně identická rozhraní."
Funkce RMI je součástí balení java.rmi
, zatímco většina implementace společnosti Sun se nachází v sun.rmi
balík. Všimněte si, že s verzemi Java před vývojáři Java 5.0 museli vývojáři kompilovat RMI stubs v samostatném kroku kompilace pomocí rmic
. Verze 5.0 Java a další již tento krok nevyžadují.
Jini verze
Jini nabízí pokročilejší verzi RMI v Javě. Funguje podobně, ale poskytuje pokročilejší zabezpečení, možnosti zjišťování objektů a další mechanismy pro aplikace distribuovaných objektů.[1]
Příklad
Následující třídy implementují jednoduchý program klient-server pomocí RMI, který zobrazuje zprávu.
RmiServer
třída - poslouchá požadavky RMI a implementuje rozhraní, které používá klient k vyvolání vzdálených metod.
import java.rmi.Naming;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;import java.rmi.registry. *;veřejnost třída RmiServer rozšiřuje UnicastRemoteObject nářadí RmiServerIntf { veřejnost statický finále Tětiva ZPRÁVA = "Ahoj světe"; veřejnost RmiServer() hodí RemoteException { super(0); // nutné, aby se zabránilo kroku „rmic“, viz níže } veřejnost Tětiva getMessage() { vrátit se ZPRÁVA; } veřejnost statický prázdnota hlavní(Tětiva args[]) hodí Výjimka { Systém.ven.tisk("RMI server spuštěn"); Snaž se { // speciální obsluha výjimek pro vytvoření registru VyhledejteRegistry.createRegistry(1099); Systém.ven.tisk("java RMI registr vytvořen."); } chytit (RemoteException E) { // nedělat nic, chyba znamená, že registr již existuje Systém.ven.tisk("java RMI registr již existuje."); } // Instantiate RmiServer RmiServer serveru = Nový RmiServer(); // Vazba této instance objektu na název "RmiServer" Pojmenování.znovu svázat("// localhost / RmiServer", serveru); Systém.ven.tisk("PeerServer vázán v registru"); }}
RmiServerIntf
rozhraní - definuje rozhraní, které používá klient a implementuje server.
import java.rmi.Remote;import java.rmi.RemoteException;veřejnost rozhraní RmiServerIntf rozšiřuje Dálkový { Tětiva getMessage() hodí RemoteException;}
RmiClient
třída - toto je klient, který získá odkaz (proxy) na vzdálený objekt žijící na serveru a vyvolá svou metodu pro získání zprávy. Pokud by objekt serveru implementoval java.io.Serializable místo java.rmi.Remote, byl by serializován a předán klientovi jako hodnota.[2]
import java.rmi.Naming;veřejnost třída RmiClient { veřejnost statický prázdnota hlavní(Tětiva args[]) hodí Výjimka { RmiServerIntf serveru = (RmiServerIntf)Pojmenování.vzhlédnout("// localhost / RmiServer"); Systém.ven.tisk(serveru.getMessage()); }}
Před spuštěním tohoto příkladu musíme vytvořit soubor „stub“ pro rozhraní, které jsme použili. Pro tento úkol máme kompilátor RMI - 'rmic'
- Poznámka: vytvoříme soubor se zakázaným inzerováním ze souboru „* .class“ s implementací vzdáleného rozhraní, nikoli ze souboru „* .java“.
rmic RmiServer
Všimněte si, že od verze 5.0 J2SE byla přidána podpora pro dynamicky generované soubory se zakázaným inzerováním a rmic je poskytován pouze pro zpětnou kompatibilitu s dřívějšími běhovými časy,[3] nebo pro programy, které při exportu vzdálených objektů neposkytují explicitní číslo portu (nebo nulu), které je nutné pro generování pahýlů, jak je popsáno v Javadoc pro UnicastRemoteObject. Podívejte se na komentář v konstruktoru výše.
Reference
- ^ Taylor, Ian J (2005). Od P2P po webové služby a sítě: Peer ve světě klient / server. Počítačová komunikace a sítě. London: Springer-Verlag. doi:10.1007 / b138333. ISBN 1852338695. OCLC 827073874.[stránka potřebná ]
- ^ Wilson, M. Jeff (10. listopadu 2000). „Buďte chytří s proxy a RMI“. JavaWorld. Citováno 2020-07-18.
- ^ „Poznámky k verzi Java RMI“. Věštec. Citováno 9. května 2012.
externí odkazy
- "Vzdálená metoda vyvolání domů". Oracle Technology Network pro vývojáře Java. Redwood Shores, CA, USA: Oracle Corporation. Citováno 2014-07-14.
- Výukový program Java RMI - dobrý výchozí bod pro učení RMI. Zkontrolujte také Hello World in RMI
- online školení Java RMI - Velmi dobré pro školení JavaRMI a jako reference
- Stránka RMI v dokumentech JDK
java.rmi
(Sun Java Java Reference pro balíček RMI)- Ann Wollrath; Roger Riggs; Jim Waldo. „Model distribuovaného objektu pro systém Java“ (PDF). Citováno 2009-02-11. Citovat deník vyžaduje
| deník =
(Pomoc) - Programování WebLogic RMI - úvod do RMI v Oracle Weblogic.
- Obecné vzdálené vyvolání metody