Vysoká škola báňská - Technická univerzita Ostrava 30. března 2009
Osnova Co je to RMI? 1 Co je to RMI? 2 Vnější pohled Vrstvy RMI Stub & Skeletons Layer Remote Reference Layer Transport Layer Pojemnování vzdálených objektů Registrace nového objektu do služby Naming 3 4
RMI (Remote Method Invocation) umožňuje objektu z jednoho Javovského Virtualního Stroje (JVM) vyvolávat metody na jiném objektu, který se může nacházet v jiném JVM. RMI se stará v zásadě o tři věci: dokáže lokalizovat vzdálený objekt komunikuje se vzdálenými objekty - komunikace na nižší úrovni je před programátorem skryta v případě dodržení podmínek dokáže přenést mezi danými objekty jiný objekt ve tvaru bajtového kódu
Vnější pohled Co je to RMI? Vnější pohled Vrstvy RMI Pojemnování vzdálených objektů Registrace nového objektu do služby Naming RMI aplikace se zpravidla skláda ze dvou samostatných programů: serveru, který poskytuje nějaké služby a klienta, který nějakou službu požaduje. Obrázek: Vzdtah mezi serverem a klientem
Vrstvy RMI 1/2 Co je to RMI? Vnější pohled Vrstvy RMI Pojemnování vzdálených objektů Registrace nového objektu do služby Naming Vrstvy RMI Stub & Skeletons Layer Remote Reference Layer Transport Layer
Vrstvy RMI 2/2 Co je to RMI? Vnější pohled Vrstvy RMI Pojemnování vzdálených objektů Registrace nového objektu do služby Naming Obrázek: Jednotlivé vrstvy RMI
Stub & Skeletons Layer 1/2 Vnější pohled Vrstvy RMI Pojemnování vzdálených objektů Registrace nového objektu do služby Naming Třídy stub a skeletou se automaticky generují pomoci kompilátoru rmic. Po vyvolání metody na stubu se provedou následující akce: naváže spojení s vzdáleným JVM, který obsahuje vzdálený objekt marshaluje parametry počká na dokončení vzdálené metody odmarshaluje vrácenou hodnotu vrátí výsledek klientovi
Stub & Skeletons Layer 2/2 Vnější pohled Vrstvy RMI Pojemnování vzdálených objektů Registrace nového objektu do služby Naming Skeleton je naopak zástupný objekt v JVM, které obsahuje vzdálený objekt. Po zkontaktování vzdáleného JVM klientem je předáno řízení skeletonu, který má na starosti: odmarshalovaní parametrů vyvolání dané metody na přislušném objektu marshalování vrácené hodnoty a zaslání klientovi Používání skeletonů odstraňuje již specifikace Java 2.
Remote Reference Layer Vnější pohled Vrstvy RMI Pojemnování vzdálených objektů Registrace nového objektu do služby Naming Vrsta slouží pro skeleton a stub jako přenosové médium. Je v ní objekt implementující rozhraní RemoteRef (package: java.rmi.server). Stub volá metody skutečného objektu pomocí metody invoke() tohot rozhraní.
Transport Layer Co je to RMI? Vnější pohled Vrstvy RMI Pojemnování vzdálených objektů Registrace nového objektu do služby Naming Tato vrstva je logicky rozdělena do dvou částí. Ve spodní čáští této vrstvy je protkol TPC/IP. V horní části je Java Remote Method Protocol JRMP.
Pojemnování vzdálených objektů Vnější pohled Vrstvy RMI Pojemnování vzdálených objektů Registrace nového objektu do služby Naming Služba RMI registr, slouží pro zprávu vzdálených objektů a příjmá dotazy na služby. Běží na defautlním portu 1099 Třída Naming, poskytuje metody pro získaní objektu vzdáleného registru nebo jeho registraci. Metoda lookup(), metoda slouží pro získání reference na vzdálený objekt. Předává se ji URL ve tvaru: rmi://<host name>[:<name service port>]/<service name>
Vnější pohled Vrstvy RMI Pojemnování vzdálených objektů Registrace nového objektu do služby Naming Registrace nového objektu do služby Naming Pro registraci nového objektu složí metoda bind(), této metodě se předají dva argumety jeden je jméno služby a druhý je reference na objekt, který bude službu obsluhovat. Druhou metodu, kterou lze pro registraci využít je metoda rebind(), tato metoda má stejné parametry jako metoda bind(), ovšem tato metoda zaregisturje i takovou službu, jejiž jméno je už v RMI registru, prostě ji přepíše. Nakonec třída Naming obsahuje ještě metodu unbind() ta danou službu z RMI registru odstarní.
Jednoduchý kalkulátor Pro vytvoření RMI aplikace je potřeba udělat několik kroků: Definovat rozhraní objektu Implementovat danné rozhraní Vygenerovat stub a skeleton soubory Implementovat server poskytující dané služby Implementovat klienta využívajícího poskytované služby
Jednoduchý kalkulátor Pro vytvoření RMI aplikace je potřeba udělat několik kroků: Definovat rozhraní objektu Implementovat danné rozhraní Vygenerovat stub a skeleton soubory Implementovat server poskytující dané služby Implementovat klienta využívajícího poskytované služby
Jednoduchý kalkulátor Pro vytvoření RMI aplikace je potřeba udělat několik kroků: Definovat rozhraní objektu Implementovat danné rozhraní Vygenerovat stub a skeleton soubory Implementovat server poskytující dané služby Implementovat klienta využívajícího poskytované služby
Jednoduchý kalkulátor Pro vytvoření RMI aplikace je potřeba udělat několik kroků: Definovat rozhraní objektu Implementovat danné rozhraní Vygenerovat stub a skeleton soubory Implementovat server poskytující dané služby Implementovat klienta využívajícího poskytované služby
Jednoduchý kalkulátor Pro vytvoření RMI aplikace je potřeba udělat několik kroků: Definovat rozhraní objektu Implementovat danné rozhraní Vygenerovat stub a skeleton soubory Implementovat server poskytující dané služby Implementovat klienta využívajícího poskytované služby
Jednoduchý kalkulátor Pro vytvoření RMI aplikace je potřeba udělat několik kroků: Definovat rozhraní objektu Implementovat danné rozhraní Vygenerovat stub a skeleton soubory Implementovat server poskytující dané služby Implementovat klienta využívajícího poskytované služby
Rozhraní Co je to RMI? 1 public interface C a l c u l a t o r 2 extends java. rmi. Remote 3 { 4 public double operation ( char op, i n t num ) 5 throws java. rmi. RemoteException ; 6 7 public double getcurrentval ( ) 8 throws java. rmi. RemoteException ; 9 }
Implementace rozhrani 1/2 1 public class C a l c u l a t o r I m p l 2 extends java. rmi. server. UnicastRemoteObject 3 implements C a l c u l a t o r 4 { 5 6 private double numb = 100.0; 7 8 public C a l c u l a t o r I m p l ( ) 9 throws java. rmi. RemoteException 10 { 11 super ( ) ; 12 } 13...
Implementace rozhrani 2/2 1... 2 public double operation ( char op, i n t num ) 3 throws java. rmi. RemoteException 4 { 5... 6 return numb ; 7 } 8 9 public double getcurrentval ( ) 10 { 11 return numb ; 12 } 13 }
Vygenerovaní stub a skeleton soboru Z implementovaných rozhraní se vygenerují stub a skeleton soubory pomocí RMI kompilátoru rmic. Od druhé řady Javy se už negeneruji skeleton soubory, pouze stub.
Server 1/2 Co je to RMI? 1 import java. rmi. Naming ; 2 3 public class C a l c u l a t o r S e r v e r 4 { 5 public C a l c u l a t o r S e r v e r ( ) { 6 t r y { 7 C a l c u l a t o r c = new C a l c u l a t o r I m p l ( ) ; 8 / / r e g i s t r a c e sluzby 9 Naming. rebind ( rmi : / / l o c a l h o s t :1099/ C a l c u l a t o r S e r v i c e, c ) ; 10 } 11 catch ( Exception e ) { 12 System. e r r. p r i n t l n ( Trouble : + e ) ; 13 } 14 } 15...
Server 2/2 Co je to RMI? 1... 2 public s t a t i c void main ( S t r i n g [ ] args ) 3 { 4 new C a l c u l a t o r S e r v e r ( ) ; 5 } 6 }
Klient 1/2 Co je to RMI? 1 public class C a l c u l a t o r C l i e n t 2 { 3 4 public s t a t i c void main ( S t r i n g [ ] args ) 5 { 6 t r y { 7 C a l c u l a t o r c = ( C a l c u l a t o r ) Naming. lookup ( rmi : / / l o c a l h o s t / C a l c u l a t o r S e r v i c e ) ; 8 9 char op = ; 10 i n t num = 0; 11 / / implementace obsluhy 12... 13 14 c. operation ( op, num ) ; 15 } 16...
1... 2 catch ( MalformedURLException murle ) { 3 System. out. p r i n t l n ( murle ) ; 4 } 5 catch ( RemoteException re ) { 6 System. out. p r i n t l n ( re ) ; 7 } 8 catch ( NotBoundException nbe ) { 9 System. out. p r i n t l n ( nbe ) ; 10 } 11 }
Common Object Request Broker Architecture (CORBA) Cíl standardu CORBA je v podstatě stejný jako cíl RMI: umožnit distribuovat objekty po síti a volat na nich metody. Vývoj aplikace v CORBA je malinko odlišný od vývoje aplikace v RMI. Postup je přibližně následující: Napsání interfaců v jazyce IDL Zkompilování interfaců pomocí IDL kompilátoru do nějakého programovacího jazyka - C++, Java,... Doplnění těl metod ve vygenerovaných zdrojových souborech Normální zkompilování do spustitelných souborů na patřičném OS Podobně jako u RMI, tak i u CORBA musí na síti běžet služba typu Naming, které slouží k prvotní identifikaci objektů.
Distributed Component Object Model (DCOM) Systém COM byl vytvořen firmou Microsoft a slouží pro sdílení objektů mezi aplikacemi. COM objekty jsou jednoznačně identifikované 128 bitovým číslem. Vytvoření aplikace spočívá ve vytvoření uživatelského rozhraní a COM objektů, které zajistí funkcionalitu. DCOM je pak rozšíření COM, které umožňuje, aby se COM objekty nalézaly na jiném počítači.
Konec Co je to RMI? Děkuji za pozornost :-)