java remote method invocation Kateřina Fricková, Matouš Jandek
Distribuovaný systém počítačový systém, ve kterém jsou jednotlivé komponenty propojeny počítačovou síťí komponenty systému sdílí cíl, kterého se snaží dosáhnout základní vlastnosti distribuovaného systému: komponenty systému jsou v provozu souběžně vysoká úroveň nezávislosti systému na jednotlivých komponentách komponenty systému nejsou navzájem synchronizované 1
Remote procedure call komunikační protokol umožňující programu vykonat kód, který existuje v jiném adresním prostoru (lokálním i vzdáleném) základní model fungování RPC protokolů metoda komunikace: request-response architektura systému: klient-server klient: lokální zdroj, poskytuje programu rozhraní pro volání vzdálených procedur server: vzdálený zdroj, zpracovává požadavky zaslané klienty, vrací výsledky vykonaných procedur a funkcí zpět klientovi 2
stub: lokální reprezentace vzdálené metody 2 typy client stub a server stub 3
postup volání vzdálené procedury: v klientské aplikaci se zavolá příslušná client stub metoda client stub provede konverzi parametrů do formátu určeného konkrétním RPC protokolem tzv. marshalling data se odešlou na cílový server server stub provede konverzi parametrů do formátu používaného serverem tzv. unmarshalling server stub zavolá danou metodu odpověď obsahující výsledek volané metody probíhá obdobně 4
Java RMI RMI Remote Method Invocation rozhraní pro vzdálené volání metod v jazyce Java objektově orientované 2 Podporované komunikační protokoly JRMP RMI-IIOP (CORBA) 5
Distributed garbage collection automatická správa paměti pro vzdálené objekty na straně serveru když klient vytvoří referenci na vzdálený objekt, zavolá se metoda dirty() na straně serveru když klient po nějakou dobu nepoužívá danou referenci, zavolá se metoda clean(), která referenci zruší 6
Architektura Java RMI Java RMi se skládá ze 3 vrstev vrstva Stub/Skeleton vrstva Remote Reference vrstva Tranport 7
Stub/Skeleton layer odpovídá za serializaci a deserializaci objektů lokální zástupná třída pro vzdálené třídy stub dynamicky generovaný (preferovaný způsob) staticky generovaný nástroj rmic skeleton v aktualní verzi Java již nepotřebné 8
Remote reference layer uchovává informace o vzdálených serverech získává reference na vzdálené objekty zajišťuje volání vzdálených metod překlad paměťových adres z/do lokálních ke komunikaci používá transport layer 9
Získání vzdálených objektů klient potřebuje od serveru reference na vzdálené objekty server pomocí třídy java.rmi.naming nebo java.rmi.registry spojí v registru název se vzdáleným objektem klient si podle jména v registru vyhledá vzdálený objekt, nyní si objekt může zavolat ze serveru další reference lze získat pomocí návratové hodnoty metody 10
Rozhraní java.rmi.registry.registry než si klient může zavolat vzdálenou metodu, musí obdržet referenci na vzdálený registr LocateRegistry.getRegistry(port) rozhraní dokáže vyhledat (dle názvu), vypsat a získat reference na vzdálené objekty v registru metody bind, unbind, rebind umožňují klientovi obsluhovat reference na objekt, aniž by záznam smazaly z registru na straně serveru 11
Třída UnicastRemoteObject UnicastRemoteObject.exportObject(engine, 0) metoda zpřístupňuje vzdáleným uživatelům metody a upřesňuje číslo portu, na kterém komunikace proběhne druhý argument rovný nule znamená, že se jedná o anonymní port metoda exportobject vrací stub vzdáleného objektu 12
Rozhraní odvozené od java.rmi.remote Interface aby se objekt stal vzdáleným, musí implementovat rozhraní splňující: je potomkem rozhraní java.rmi.remote musí být public každá z metod musí mít uvedeno vyjímečné ukončení java.rmi.remoteexception java.rmi.notboundexception je vyvolána, pokud se klient snaží hledat v registru metody, které neexistují 13
Jednoduchá RMI aplikace 14
Vytvoření rozhraní serveru Compute.java Task.java 15
Vytvoření rozhraní klienta ComputeClient.java 16
Vytvoření rozhraní klienta Factorial.java 17
Vytvoření rozhraní klienta Factorial.java 18
Nasazení ComputeEngine.java 19
Výhody Java RMI objektově orientované mobilní chování (bezproblémová změna role klienta a serveru) jednoduché na používání přenositelné (spustitelné na čemkoli, co má JVM) server může mít více klientů 20
Nevýhody Java RMI závislé na propojení sítí občas nemusí být tolik bezpečné 21
Děkujeme za pozornost. 22