Java RMI Áttekintés. A Java RMI. A Java RMI architektúrája. Ficsor Lajos. Általános Infromatikai Tanszék Miskolci Egyetem 1.

Hasonló dokumentumok
Java RMI Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. javarmi / 1

R I Szer e i r alizáció.

Java Remote Method Invocation API

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat

CORBA Áttekintés. Mi a CORBA? OMG and OMA. Ficsor Lajos. Miskolci Egyetem Általános Informatikai Tanszék

Kommunikáció. Folyamatok közötti kommunikáció. Minden elosztott rendszer alapja

Párhuzamos és Elosztott Rendszerek II

Elosztott rendszerek

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

RMI = Remote Method Invocation. Java tutorial. Kliens-szerver forgato kő nyv. Elosztott objektumok rendszere forgato kő nyv.

Osztott alkalmazások fejlesztési technológiái Áttekintés

JNDI - alapok. Java Naming and Directory Interface

A Java nyelv. V. rész Az objektumorientáltság magasabb fokú tulajdonságai: Perszisztencia, CORBA, RMI

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Enterprise JavaBeans 1.4 platform (EJB 2.0)

és az instanceof operátor

Abstract osztályok és interface-ek. 7-dik gyakorlat

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Komponens modellek. 3. Előadás (első fele)

OOP: Java 8.Gy: Abstract osztályok, interfészek

Programozási nyelvek Java

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Objektumorientált szoftvertervezés

Objektumorientált szoftvertervezés

Programozási nyelvek Java

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Objektumorientált szoftvertervezés

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java IX. telkezelés a Java-ban

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Java IX. telkezelés a Java-ban

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Osztályok. 4. gyakorlat

Java és web programozás

Osztott rendszerek (Distributed. systems) Bevezetés. Tartalom. Ficsor Lajos. Miskolci Egyetem Általános Informatikai Tanszék

Már megismert fogalmak áttekintése

Kivételkezelés a C++ nyelvben Bevezetés

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

OOP és UML Áttekintés

Serialization. RMI működése

A Java EE 5 plattform

Osztott rendszerek (Distributed

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Kommunikáció. 3. előadás

Bevezető. Servlet alapgondolatok

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Java és web programozás

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Java programozási nyelv 4. rész Osztályok II.

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Java programozási nyelv 5. rész Osztályok III.

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Szoftvertechnológia alapjai Java előadások

Osztott rendszerek. Krizsán Zoltán 1 Ficsór Lajos 1. Webalkalmazások fejlesztése tananyag. Miskolci Egyetem. Bevezetés A múlt - történelem A jelen

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Tartalom. Történeti áttekintés. Történeti áttekintés Architektúra DCOM vs CORBA. Szoftvertechnológia

Programozási nyelvek II.: JAVA

Bevezetés a Java programozási nyelvbe

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Komponens alapú programozás Bevezetés

Programozási nyelvek Java

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Elosztott rendszerek: Alapelvek és paradigmák Distributed Systems: Principles and Paradigms

Áttekintés. Tartalom. Mi is az a Bean?

Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék

RMI. Az alapoktól a részletekig RMI, activation, class loader-ek, serialization

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

Java. Java Message Service. ANTAL Margit. JMS API technológia. ANTAL Margit. Sapientia - EMTE

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

CORBA bevezetés. Paller Gábor Internet és mobil rendszerek menedzselése

Hálózatkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Hálózatkezelés / 20

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Kommunikáció. Távoli eljáráshívás. RPC kommunikáció menete DCE RPC (1) RPC - paraméterátadás. 3. előadás Protokollok. 2. rész

Java programozási nyelv

Programozási nyelvek Java

Kivételkezelés, naplózás. Exception handling, logging

OOP: Java 8.Gy: Gyakorlás

JAVA PROGRAMOZÁS 3.ELŐADÁS

BME MOGI Gépészeti informatika 8.

CORBA. Mi a CORBA? A CORBA felépítése

JAVA webes alkalmazások

S04-2 Elosztott alkalmazások készítése

A SZOFTVERTECHNOLÓGIA ALAPJAI

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

A Jáva programozási nyelv rejtelmei

Java és web programozás

CO C R O B R A B OMG, ORB, CORBA

Átírás:

Java RMI Áttekintés Miskolci Egyetem Általános Informatikai Tanszék RMI /1 A Java RMI RPC - egy távoli eljárás hívása helyi hívásnak tÿnik RMI - hasonló mechanizmust biztosít, de objektum orientált módon: egy távoli objektum metódusának hívása helyi objektum használatának tÿnik A Java nyelvnek nincs speciális IDL-je, ehelyett minden remote interface a java.rmi.remote interface-t terjeszti ki Java RMI (Áttekintés) RMI /2 A Java RMI architektúrája Alkalmazás Client Server Stubs Skeletons Remote Reference Layer Transport Layer Java RMI (Áttekintés) RMI /3 Miskolci Egyetem 1

Az RMI architektúra elemei Stubs A kliens hivatkozása a távoli objektumra valójában hivatkozás a helyi csonkra. A csonk meghívja a Remote Reference Layer-t átalakítja (marshals) az argumentumokat értesíti a Remote Reference Layer-t hogy a hívás továbbítható visszaalakítja (unmarshals) a visszatérési értéket vagy a kivételt értesíti a Remote Reference Layer-t, hogy a hívás befejez dött. Java RMI (Áttekintés) RMI /4 Az RMI architektúra elemei (folyt.) Skeleton Tartalmaz egy metódust, amely továbbítja a hívásokat az aktuális távoli objektumok implementációjának: visszaalakítja (unmarshals) az argumentumokat meghívja az aktuális távoli objektum implementációját átalakítja (marshals) a visszatérési értéket vagy a kivételt Java RMI (Áttekintés) RMI /5 Az RMI architektúra elemei (folyt.) Remote reference layer A specifikus távoli hivatkozás protokoll végrehajtásáért felel s. Minden távoli objektum saját távoli hivatkozás osztályt választ, amely a kéréseit végrehajtja. Számos hívási protokoll választható ebben a rétegben. Például: unicast point-to-point invocation invocation to replicated object groups support for a specific replication strategy support for a persistent reference to the remote object (enabling activation of the remote objectum) reconnection strategies Java RMI (Áttekintés) RMI /6 Miskolci Egyetem 2

Az RMI architektúra elemei (folyt.) Transport layer A távoli címtartománnyal való kapcsolat létrehozása A kapcsolat menedzselése A kapcsolat "él " voltának figyelése Abejöv hívások figyelése Az címtartományhoz tartozó távoli objektumok táblázatának karbantartása Kapcsolat létrehozása egy bejöv híváshoz A távoli hívás céljának megfelel elosztó (dispatcher) megkeresése és a kapcsolat átadása a dispatcher-nek. Java RMI (Áttekintés) RMI /7 Az RMI egyéb jellemzÿi Fonál használat az RMI-ben A szerver külön szálban, vagy azonos szálban is futhat Szemétgyÿjt mechanizmus a távoli objektumokra is Dinamikus osztálybetöltés Remote objektumok és interface-eik osztályára Stub és skeleton osztályokra Egyéb, az RMI által használt osztályokra (paraméterek, visszatérési értékek) Java RMI (Áttekintés) RMI /8 RMI kliens és szerver fejlesztése 8 Kliens implementálása (.java) 9 javac 1 Kliens alk. (.class) 10 Kliens indítása Remote interface definiálása uses 2 Interface implementálása (.java) 3 javac User 4 rmic Kliens stub (.class) User feladata Generált elem Program feladata Manuális tev. Jelölés Szerver osztály (.class) Szerver skeleton (.class) 5 RMI registry indítása 6 Szerver objektum aktivizálása 7 Távoli objektum regisztrálása Java RMI (Áttekintés) RMI /9 Miskolci Egyetem 3

A fejlesztés lépései 1. A távoli interface definiálása A távoli objektum interface-ének definiálása Java interface-ként A java.rmi.remote interface-t kell kiterjesztenie Minden metódusának dobnia kell a java.rmi.remoteexception kivételt Java RMI (Áttekintés) RMI /10 A fejlesztés lépései (folyt.) 2. A távoli interface implementálása A Java server osztály megírása Az el bbi interface-t kell implementálnia A java.rmi.unicastremoteobject osztály leszármazottja kell legyen 3. A szerver osztály lefordítása 4. A stub compiler futtatása Anevermic, paraméterei azonosak a javac-vel Generálja a kliens stub-ot és a szerver skeletont. Java RMI (Áttekintés) RMI /11 A fejlesztés lépései (folyt.) 5. RMI registry indítása rmiregistry parancs a szerver gépen Lehet vé teszi a távoli objektum név szerinti elérését Ez is távoli objektumként van implementálva Minden szerver processz használhat saját registry-t vagy egy közöset A registry kezdetben üres, a távoli objektumokat a szerver processz(ek)nek kell bejegyeznie Java RMI (Áttekintés) RMI /12 Miskolci Egyetem 4

A fejlesztés lépései (folyt.) 6. Szerver processz indítása A szerver processz létrehozza a szerver objektum példányát vagy példányait 7. Távoli objektumok regisztrációja A szerver processz bejegyzi a távoli objektumokat a registry-be Ehhez a java.rmi.naming osztály metódusait használhatja A szerver ezzel kész fogadni a kliensek kapcsolódását Java RMI (Áttekintés) RMI /13 A fejlesztés lépései (folyt.) 8. Kliens kód megírása A távoli objektum megkereséséhez használnia kell a java.rmi.naming osztály metódusait A távoli objektum használata ezután ugyanolyan, mint a lokális objektumoké 9. Kliens kód lefordítása 10. Kliens indítása Java RMI (Áttekintés) RMI /14 RMI interface-ek ek és osztályok RMI-vel kapcsolatos csomagok (több, mint 25 osztály és interface): java.rmi java.rmi.server java.rmi.dgc java.rmi.registry Három funkcionális kategória: RMI alapok RMI security RMI marshalling Java RMI (Áttekintés) RMI /15 Miskolci Egyetem 5

RMI alap osztályok és interface-ek ek Remote Object osztály (from java.lang) IOException osztály (from Java.io) (from java.rmi) <<implements>> RemoteObject (from java.rmi.server) RemoteException RemoteStub (from j ava.rmi.server) RemoteObject() equals() tostring() RemoteServer (from java.rmi.server) (from java.rmi ) RemoteException() getmessage() RemoteStub() setref() <<uses>> RemoteServer() getclienthost() getlog() setlog() UnicastRemoteObject (from java.rmi. server) Kliens osztály Szerver osztály Unicas tremoteobject() exportobject() clone() Java RMI (Áttekintés) RMI /16 RMI alap osztályok feladata Remote interface Nincs egyetlen metódusa sem. Csak jelz. Minden remote objektumnak implementálnia kell RemoteObject osztály A Java Object osztály szerepét tölti be a távoli objektumokra RemoteStub osztály A kliens objektum(ok) közvetlen sosztálya Elrejti a szerver objektummal való kapcsolatot az t használó objektumok el l. Java RMI (Áttekintés) RMI /17 RMI alap osztályok feladata (folyt.) RemoteServer osztály Szerver objektumok létrehozása és exportálása (elérhet vé tétele) A szerver implementációk közös bázisosztálya UnicastRemoteObject osztály A távoli szerver objektum implementációja, az alábbi tulajdonságokkal: Tranziens objektum összeköttetés alapú TCP protokollt használ a kommunikációra A szerver osztály sosztálya kell legyen Java RMI (Áttekintés) RMI /18 Miskolci Egyetem 6

RMI alap osztályok feladata (folyt.) RemoteException osztály Az RMI által kiváltható valamennyi kivétel sosztálya A remote interface valamennyi metódusánál specifikálni kell Java RMI (Áttekintés) RMI /19 RMI Naming szolgáltatás Object osztály (from java.lang) Remote (from java.rmi) Registry (from java.rmi.registry) lookup() bind() unbind() rebind() LocateRegistry (from java.rmi.registry) getregistry() createregistry() Naming (from java.rmi.registry) lookup() bind() unbind() rebind() list() Java RMI (Áttekintés) RMI /20 A naming szolgáltatás használata Többnyire csak a Naming osztályt használjuk. Azonosítás URL formátumú: rmi://host:port/objektumnev Default port: 1099 A kliens a lookup metódust használja a távoli objektum referencia megszerzésére: Remote lookup(string name) A szerver a bind vagy rebind metódust használja a szerver objektum regisztrálására: void bind(string name, Remote obj) Java RMI (Áttekintés) RMI /21 Miskolci Egyetem 7

Az RMI forgatókönyve Kliens oldal Szerver oldal Kliens System Naming System Szerver 1. setsecuritymanager 2. rebind 3. setsecuritymanager 4. lookup Proxy download szerver 5. metódus hívás metódus hívás Java RMI (Áttekintés) RMI /22 Az RMI forgatókönyve (folyt.) 1. A szerver engedélyezi az RMI Security Manager mÿködését: létrehoz egy új RMISecurityManager objetumot és átadja a System objektumnak 2. A szerver regisztrálja magát a névszolgáltatónál 3. A kliens is engedélyezi az RMI Security Managert a saját rendszerében Java RMI (Áttekintés) RMI /23 Az RMI forgatókönyve (folyt.) 4. A kliens megkeresi a távoli objektumot Kiad egy lookup hívást a Naming objektumnak, és megadja a kivánt szerver URL nevét A metódus visszad egy referenciát a proxy szerverre Ha szükséges, a kliens oldali stub letölt dik 5. A kliens meghívja a távoli objektum metódusát A hívás a proxy szerver objektumhoz fut be A proxy szerver továbbítja a hívást a stub segítségével A hívás eredménye visszaérkezik szintén a stub segítségével Java RMI (Áttekintés) RMI /24 Miskolci Egyetem 8

Egyszer példa Ebben a példában a távoli objektum egy számlálóval rendelkezik. A számláló adott értékre beállítható, inkrementálható, lekérdezhet. Egy kliens ezt a távoli objektumot használva nullázza a számlálót, ezerszer inkrementálja, majd lekérdezi az értékét. A szerver helye a kliens program paramétere. Java RMI (Áttekintés) RMI /25 Példa: távoli interface A távoli objektum interface-e: public interface CountRMI extends java.rmi.remote public int sum() throws java.rmi.remoteexception; public void sum(int val) throws java.rmi.remoteexception; public int increment() throws java.rmi.remoteexception; Java RMI (Áttekintés) RMI /26 Példa: kliens program import java.rmi.*; import java.rmi.registry.*; import java.rmi.server.*; public class CountRMIClient public static void main(string args[]) // Security manager beállítása System.setSecurityManager(new RMISecurityManager()); Java RMI (Áttekintés) RMI /27 Miskolci Egyetem 9

Példa: kliens program (folyt.) // Referencia szerzese a tavoli objektumra try CountRMI mycount = (CountRMI)Naming.lookup("rmi://" + args[0] + "/" + "my CountRMI"); // Megjegyzesek: // a fenti castolas szukseges es lehetseges // innentol kezdve a mycount ugyanugy // hasznalhato, mint egy helyi referencia // szamlalo nullazasa System.out.println("Setting Sum to 0"); mycount.sum(0); // Mint egy helyi hivas Java RMI (Áttekintés) RMI /28 Példa: kliens program (folyt.) // Incrementalas 1000-szer System.out.println("Incrementing"); for (int i = 0 ; i < 1000 ; i++ ) mycount.increment(); System.out.println("Sum = " + mycount.sum()); // Kivetel kezelese catch(exception e) System.err.println("System Exception" + e); System.exit(0); Java RMI (Áttekintés) RMI /29 Szerver objektum implementációja import java.rmi.*; import java.rmi.server.unicastremoteobject; public class CountRMIImpl extends UnicastRemoteObject implements CountRMI // Adattag private int sum; Java RMI (Áttekintés) RMI /30 Miskolci Egyetem 10

Szerver objektum impl. (folyt.) public CountRMIImpl(String name) throws RemoteException super(); try // Az objektum regisztralasa Naming.rebind(name, this); sum = 0; catch (Exception e) System.out.println("Exception: "+ e.getmessage()); Java RMI (Áttekintés) RMI /31 Szerver objektum impl. (folyt.) // Tavolrol is elerheto metodusok public int sum() throws RemoteException return sum; public void sum(int val) throws RemoteException sum = val; public int increment() throws RemoteException sum++; return sum; Java RMI (Áttekintés) RMI /32 Szerver objektum inicializálása import java.rmi.*; import java.rmi.server.*; public class CountRMIServer public static void main(string args[]) // Security manager letrehozasa es inditasa System.setSecurityManager(new RMISecurityManager()); Java RMI (Áttekintés) RMI /33 Miskolci Egyetem 11

Szerver objektum inicializálása (folyt.) try // CountRMIImpl peldagny letrehozasa CountRMIImpl mycount = new CountRMIImpl("my CountRMI"); System.out.println("CountRMI Server ready."); catch (Exception e) System.out.println("Exception: " + e.getmessage()); e.printstacktrace(); Java RMI (Áttekintés) RMI /34 Apélda futtatása Lefordítjuk az összes modult (feltételezve, hogy a java file-ok katalógusában vagyunk) javac CountRMI.java javac CountRMIClient.java javac CountRMIImpl.java javac CountRMIServer.java Futatjuk a stub compilert rmic CountRMIImpl Elindítjuk az RMI registry-t rmiregistry Elindítjuk a szervert majd a klienst Java RMI (Áttekintés) RMI /35 Hivatkozások Csizmazia Balázs: Hálózati alkalmazások készítése (második kiadás), 6. fejezet Kiadó: Kalibán Bt., Budapest. 1998 ISBN 963 03 5113 7 Sok szerz : JAVA 2 útikalauz programozóknak. (Hatodik kiadás) 21. Fejezet Kiadó: ELTE TTK Hallgatói Alapítvány Budapest, 2000 ISBN 963 463 364 1 Java RMI (Áttekintés) RMI /36 Miskolci Egyetem 12

Hivatkozások (folyt.) Robert Orfali, Dan Harkey: Client/Sserver Programming with JAVA and CORBA (Second Edition) Chapter 13. John Wiley & Sons, 1998 ISBN 0 471 24578 X Java RMI (Áttekintés) RMI /37 Miskolci Egyetem 13