R I Szer e i r alizáció.

Hasonló dokumentumok
Párhuzamos és Elosztott Rendszerek II

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

Serialization. RMI működése

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

Segédanyag: Java alkalmazások gyakorlat

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

Segédanyag: Java alkalmazások gyakorlat

Java Remote Method Invocation API

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

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

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

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

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

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

Java I. A Java programozási nyelv

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

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

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

Java IX. telkezelés a Java-ban

Programozási nyelvek Java

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

Java IX. telkezelés a Java-ban

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 4. rész Osztályok II.

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamá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?

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

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

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

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

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 Áttekintés. Mi a CORBA? OMG and OMA. Ficsor Lajos. Miskolci Egyetem Általános Informatikai Tanszék

Programozási technológia

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

OOP #14 (referencia-elv)

Bevezetés a Java programozási nyelvbe

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

Programozási nyelvek II.: JAVA

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

Programozási nyelvek Java

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

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

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Osztályok. 4. gyakorlat

Objektumorientált programozás C# nyelven

JAVA PROGRAMOZÁS 3.ELŐADÁS

és az instanceof operátor

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

Objektumorientált programozás C# nyelven

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

Objektumorientált programozás C# nyelven

Java Programozás 11. Ea: MVC modell

Szoftvertechnológia alapjai Java előadások

JNDI - alapok. Java Naming and Directory Interface

Java és web programozás

Bevezető. Servlet alapgondolatok

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

Osztályszintű elérés, kivételkezelés, fájlkezelés

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

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Elosztott rendszerek

Java programozási nyelv 9. rész Kivételkezelés

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

BME MOGI Gépészeti informatika 8.

Java I. A Java programozási nyelv

Bevezetés a Java programozási nyelvbe

Java és web programozás

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

Programozási nyelvek Java

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

7. K: JAVA alapok Konzultáció

Pénzügyi algoritmusok

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

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

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

Programozási nyelvek II.: JAVA

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

Java III. I I. Osztálydefiníció (Bevezetés)

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

OOP és UML Áttekintés

Java III. I I. Osztálydefiníció (Bevezetés)

Java programozási nyelv 6. rész Java a gyakorlatban

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

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

Bánsághi Anna

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

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

OOP: Java 8.Gy: Gyakorlás

Pénzügyi algoritmusok

Sikeres végrehajtás(pass): ez azt jelenti, hogy a teszt rendben lefutott, és az ellenőrzési feltételek mind teljesültek.

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

Kivételek. A program végrehajtása során ritkán bekövetkező események Nem a fő végrehajtási ág ; logikailag alacsonyabbrendű feladat jelzése

Tartalom. Az EJB 2.1 problémái Az EJB 3 megoldásai

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

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

Átírás:

Bevezetés Java RMI Párhuzamos és Elosztott rendszerek II. Dr. Mileff Péter A számítógép-hálózatok rohamos terjedésével a hálózattal összekapcsolt számítógépekbıl álló rendszerek egyre népszerőbbek: Erıforrás megosztás Megbízhatóság növelés Teljesítmény növelés Elosztott rendszerek kialakulásának célja. Programozók szempontjából egy elosztott rendszer kényelmesen programozható, ha a lehetı legkevésbé kell a hálózati protokollok, kommunikáció programozásával törıdni. (a feladatra való koncentrálás) A Java egy rohamosan fejlıdı programozási nyelv. Már a megjelenéskor hangoztatott tulajdonsága volt az elosztottság. (1.0-ban ez még nem igazán teljesült) A szállítási szintő hálózati kommunikáció egyszerő programozása. Távoli eljáráshívás (RPC) visszatekintés Az elosztott rendszerek programozásában kiemelkedı szerepet játszik a távoli eljáráshívás (RPC, Remote Procedure Call) ) módszere. A programozó egy processzoros rendszerben gondolkozik, és egyszerő eljáráshívással valósítja meg a program részei között a kommunikációt. A fejlesztés egy késıbbi lépésében szétválaszthatja a hívó és hívott eljárásokat, más-más számítógépre telepítve azokat. Függvénykönyvtárak alkalmazása: biztosítják, hogy a hálózaton keresztül is az eljáráshívás, a paraméterek átadása és átvétele automatikusan, a programozó elıl rejtetten" történjen meg. Az RPC folyamata 1

Mi is az az RMI? RMI (Remote Method Invocation), azaz távoli metódushívás megvalósítása objektum orientált módon. A távoli eljáráshívás egy magasabb szintő megvalósítása Java nyelven. 1997-ben megjelent JDK 1.1 verziótól elérhetı. Lehetıvé teszi más VM-ben (Virtual Machine virtuális gép) elhelyezkedı objektumok metódusainak meghívását. A rendszer elrejti a kommunikációt végzı részt, és a metódushívás hasonló a helyi, azaz lokális objektumok metódusainak meghívásával, bizonyos megszorításokkal és kötöttségekkel. A rendszert úgy tervezték, hogy a hálózaton elosztott objektumok viselkedése hasonló legyen a helyi objektumok viselkedésével, de ne egyezzen meg, a teljes transzparencia biztosítása nem volt cél. Miért szükséges az RMI? A klasszikus távoli eljáráshívás (RPC) nem igazodik a modern objektum orientált paradigmába. Problémája: Összetett adatszerkezetek hálózaton keresztüli átvitele. A paraméterátadást az átvihetı adatszerkezetek szigorú korlátozásával, a programtól független specifikációjával segítik. Az RMI elınyei A Java RMI hatékonyabb, és robosztusabb megoldást kínál ilyen feladatok megoldására. RMI esetén a paraméterátadás a programozó számára nem jelent semmiféle korlátozásokat. Okai: Jáva egyszerőbb, egységesebb szerkezete. A referenciák következetes, kizárólagos használata. A Jáva virtuális gép tulajdonságai. Távoli módszereink tetszıleges paraméterekkel rendelkezhetnek a paraméterátadás alapvetıen az objektum másolatának átadásával történik. Egyszerő szám paraméter is objektumként értelmezett. Az objektumok átadása A rendszerben objektumok keringenek egy egy RMI hívás során. Egy hívás menete: A csonk az átadandó objektum állapotát (tagváltozóinak értékét) átalakítja a hálózaton átvihetı, úgynevezett soros reprezentációvá. Szerializáció. A szerializált objektum átmegy a hálózaton. A másik oldalon, a szerializált objektumot a csontváz (a másik csonk) visszaalakítja. Létrehoz a szerver oldalon egy lokális objektumot. Végül erre utaló hivatkozást ad tovább a szerver módszer törzsének. 2

Szerializáció Egy objektum szerializáció során egy bájtfolyammá alakul át. Tulajdonságai: Ezek után használható a Java nyelv szabványos kimenet és bemenet kezelési módszereivel. Ellenkezıje a deszerializáció: a bájtfolyam visszaalakul objektummá. Mire alkalmazható? Egy objektum háttértárra való kiírására, állományba mentéshez. Alkalmas a VM-ek közötti kommunikáció megvalósítására: A szerializált objektum a hálózaton átküldhetı, mint bájtfolyam, és a másik oldalon visszaalakítható objektummá. A szerializáció azon objektumokra is végrehajtódik, amelyek valamilyen referenciaként jelennek meg az eredeti objektumban. (Rekurzió) Szerializáció megvalósítása Valamely Java osztály szerializálásához az osztálynak implementálnia kell a java.io.serializable interface-t. Pl.: class myclass implements java.io.serializable. Innentıl kezdve a programozónak nincs több feladata a szerializáció kapcsán. A Java virtuális gép megoldja a feladatot. Az RMI mőködése A rendszer alapfogalma a távoli objektum. más virtuális gépeken lévı objektumok metódusait lehet meghívni. Egy objektum nem minden metódusa hívható távolról Csak azok, amelyek egy úgynevezett távoli interface-ben definiálva vannak. Fontos: Nem biztosítja az osztályok távoli elérését egy osztály konstruktor mőveletei nem lesznek használhatók. A rendszer teljesen transzparens: Távoli objektumok használata teljesen megegyezik a távolról nem hívható objektumokéval. A programozónak csak kevés helyen kell foglalkozni ezzel. RMI mőködése Az RMI nem nyelvi elem, hanem Java osztályok győjteménye. A hálózati kommunikációt végzı rész teljesen láthatatlan, ezért mégis annak tőnik: egy saját RMI rendszer implementálása Java nyelven tehát lehetséges A Java RMI saját szemétgyőjtı mechanizmussal rendelkezik. (A távoli objektumok miatt) Mőködése hasonló, mint a VM-é. A nyelvben nincsen olyan referencia, mely egy másik virtuális gépen elhelyezkedı objektumot címezne meg, ezért ehelyett egy úgynevezett csonkot kell használni. 3

A csonk A csonk egy olyan objektum, mely a lokális virtuális gépen helyezkedik el, és hasonlít a távoli objektumra. Különbség: nincs benne implementálva a távoli objektum metódusainak törzse. A metódushívás ekkor olyan, mint a csonk egy metódushívása. JRMP (Java Remote Method Protocol) protokollt használva továbbítja a hívást a távoli objektumnak, szerializája a paramétereket, blokkolva a végrehajtást ha visszaérkezik a visszatérési érték a hálózaton, deszerializálja azt, és visszaadja azt a hívó félnek. A csonk A csonk elkészítése kvázi automatikus, a Java biztosít eszközt a létrehozáshoz. A csonk használata teljesen transzparens, egyenértékő a távoli referenciával. A hívás során a hálózaton a következı információk mennek át: a hívott objektum azonosításához szükséges információk. a hívott metódus azonosításához szükséges információk. a metódushívás aktuális paraméterei szerializálva. Fontos: más-más virtuális gépen az ugyanarra az objektumhoz tartozó csonk igaz ugyan, hogy különbözı objektum, de ugyanarra az objektumra vonatkozó referencia A fogadó oldal A fogadó oldalon RMI háttérszálak futnak. Várják a beérkezı távoli metódushívásokat. Amint kapnak egy ilyet, továbbadják azt a megcímzett objektumnak, mely ugyanazon a virtuális gépen helyezkedik el. Itt van implementálva az adott metódus törzse, amely végrehajtódik. A visszatérési értéket aztán visszaküldi a hívó oldalon szereplı csonknak, mely továbbadja a hívónak. Rejtett információk a hálózaton: A távoli metódus visszatérési értéke, kivételek, melyet a távoli objektum dobott, vagy az RMI mőködése során lépett fel. A kivételek A kivételkezelés elosztott környezetben bonyolult probléma mindig a hívó oldalon kell lekezelni. Szerializálva mennek át a hálózaton objektumként. Az RMI rendszer mőködése közben fellépett hibák válthatják ki: A hálózat megszakadása vagy a hívott fél helytelen mőködése okozhatja. Egyéb dobott kivételeknél a szerializáció során elveszhetnek egyéb járulékos információk, melyek megkönnyíthetnék a hibakeresést. Ebbıl is látszik, hogy a paraméterként átadott objektumok nem mennek vissza a hívó félhez. Érték szerinti paraméterátadás. A deszerializáció során a hívott oldalon egy másolat keletkezik az eredeti objektumból 4

Exportálás Ha példányosítunk egy objektumot, ami távolról elérhetıvé akarunk tenni, közölni kell az RMI háttérszálakkal a készen állását: Ekkor már fogadhat távoli metódushívásokat erre az objektumra vonatkozólag. Azért, hogy tudja, hova kell a hívást továbbadni. A közlést exportálásnak nevezzük. Exportáláskor létrejön egy csonk példány is a hívott oldalon: használva a hívó oldalon érhetjük el az eredeti, távolról elérhetı objektumot. Fordítottja az unexportálás. RMI registry Ahhoz, hogy referenciához jussunk a távolról hívható objektumra, szükségünk van a hozzá tartozó csonkra. a csonk példány a hívott oldalon keletkezik. Ennek lekérése az RMI registry-n keresztül történik RMI technikával. A registry is egy távolról elérhetı objektum. A registry csonk és név párokat tartalmaz. Egy távoli objektum azonosítását egy speciális cím teszi lehetıvé: a számítógép neve, opcionálisan egy port, az objektum neve. RMI registry A fejlesztés lépései Java fejlesztı környezetben kapunk egy segédprogramot, mely létrehoz egy registry példányt és exportálja azt. Erre azért van szükség, mivel a registry is egy távolról elérhetı objektum. Viszont honnan tud a hívó fél referenciát szerezni a registry-re? Ismerjük a registry címét és a port számát, ezért csonkot generálhatunk anélkül, hogy kapcsolatba lépnénk az registry-t példányosító és azt exportáló virtuális géppel. Saját magunk is implementálhatunk RMI registry-t Mi is példányosíthatunk és exportálhatunk. 5

Lépések 1. Távoli interface definiálása: A távol objektum interface-ének definiálása Java interface- ként. a java.rmi.remote interface kiterjesztése szükséges, minden metódusnak dobnia kell egy java.rmi.remoteexception kivételt. Pl.: public interface TestServer extends java.rmi.remote { Lépések 2. Távoli interface implementálása: Az elsı lépésben definiált interface-t implementálni kell A Java 1.5 verziók esetén a java.rmi.unicastremoteobject osztály leszármazottja kell legyen. Az 5. verziótól kezdve ez nem szükséges már. 3. A szerver osztály lefordítása 3a. A stub compiler lefuttatása (csak 1.5 elıtti verziók esetén) A csonk lefordítása az rmic paranccsal, a paraméterei megegyeznek a javac-al al. Az rmic feladata a kliens csonk és a szerver oldali csonk generálása. Lépések 4. RMI registry indítása: rmiregistry parancs indítása a szerver gépen Minden szerver processz használhat saját registry-t t vagy akár egy közöset is. Kezdetben üres, a távoli objektumokat a szervernek kell bejegyeznie. 5. Szerver processz indítása A szerver processz létrehozza a szerver objektum példányát vagy példányait. Lépések 6. Távoli objektumok regisztrációja: A szerver processz bejegyzi a távoli objektumokat a registry-be. Ehhez felhasználja a java.rmi.naming osztály metódusait. A szerver ezzel képes fogadni a kliensek kapcsolódását. 7. Kliens kód megírása: A távoli objektum eléréséhez használni kell java.rmi.naming osztály metódusait. A távoli objektum használata ezután ugyanolyan, mint a helyi objektumé. 8. Kliens kód lefordítása 9. Kliens indítása 6

Példaprogram Távoli interface definiálása: package hello; import java.rmi.remote; import java.rmi.remoteexception; public interface Hello extends Remote { String sayhello() throws RemoteException; A szerver osztály public class HelloImpl extends UnicastRemoteObject implements Hello { public HelloImpl() throws RemoteException { super(); public String sayhello() { return "Hello World!"; public static void main(string args[]) { // Create and install a security manager if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); A szerver osztály Kliens applet public class HelloApplet extends Applet { String message = "blank"; try { HelloImpl obj = new HelloImpl(); // Bind this object instance to the name "HelloServer" Naming.rebind("//myhost/HelloServer", obj); System.out.println("HelloServer bound in registry"); catch (Exception e) { System.out.println("HelloImpl err: " + e.getmessage()); e.printstacktrace(); Hello obj = null; public void init() { try { obj = (Hello)Naming.lookup("//" + getcodebase().gethost() + "/HelloServer"); message = obj.sayhello(); catch (Exception e) { System.out.println("HelloApplet exception: " + e.getmessage()); e.printstacktrace(); public void paint(graphics g) { g.drawstring(message, 25, 50); 7

Köszönöm a figyelmet! 8