Párhuzamos és Elosztott Rendszerek II

Hasonló dokumentumok
R I Szer e i r alizáció.

Serialization. RMI működése

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

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

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

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

Java I. A Java programozási nyelv

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

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

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

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

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

és az instanceof operátor

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

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

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

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

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

Programozási nyelvek Java

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

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

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

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

Programozási technológia

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

Java IX. telkezelés a Java-ban

Java IX. telkezelés a Java-ban

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

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

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

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

Java I. A Java programozási nyelv

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?

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

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

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

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

Bevezető. Servlet alapgondolatok

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

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

Bevezetés a Java programozási nyelvbe

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

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

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

Objektumorientált programozás C# nyelven

Programozási nyelvek II.: JAVA

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

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

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

Programozási nyelvek Java

JNDI - alapok. Java Naming and Directory Interface

Szoftvertechnológia alapjai Java előadások

Programozási nyelvek Java

OOP és UML Áttekintés

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

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

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

OOP #14 (referencia-elv)

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

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

Már megismert fogalmak áttekintése

Java és web programozás

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

Osztályok. 4. gyakorlat

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

Java Programozás 11. Ea: MVC modell

Elosztott rendszerek

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

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

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

Objektumorientált programozás C# nyelven

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

Interfészek. PPT 2007/2008 tavasz.

Objektumorientált programozás C# nyelven

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

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

Bevezetés a Java programozási nyelvbe

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

Ja J v a a v a há h l á óz ó a z t a i al a ka k l a maz ma á z s á o s k o Socket, URL

JAVA PROGRAMOZÁS 3.ELŐADÁS

Thread-Specific Storage. Neuwirth István, 2009

ISA szimulátor objektum-orientált modell (C++)

Java és web programozás

Osztott rendszerek (Distributed

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

Pénzügyi algoritmusok

Adatstruktúrák, algoritmusok, objektumok

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

Számítógépes Hálózatok. 7. gyakorlat

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

BME MOGI Gépészeti informatika 8.

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

A SZOFTVERTECHNOLÓGIA ALAPJAI

Átírás:

Párhuzamos és Elosztott Rendszerek II JAVA RMI Készítette: Dr. Mileff Péter Miskolci Egyetem Általános Informatikai Tanszék 1. Bevezetés 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, hiszen lehetıvé teszik a rendszer erıforrásainak szélesebb körő megosztását (resource sharing), a rendszer megbízhatóságának (reliability) illetve teljesítményének növelését, valamint a felhasználók egymás közti üzenetváltásait. Programozók szempontjából elosztott egy rendszer akkor programozható kényelmesen, ha a lehetı legkevésbé kell a hálózati protokollok, kommunikáció programozásával törıdnie. A Jáva nyelvnek már a megjelenésénél is hangoztatott, kiemelt tulajdonsága az elosztottság" volt. Sajnos az elsı nyilvános verzióban, a JDK 1.0-ban ez csak ígéretnek bizonyult. A korai könyvtárak támogatták ugyan a szállítási szintő hálózati kommunikáció egyszerő programozását, azonban az alkalmazások erre épülı protokollját már külön kellett beprogramozni. Az 1997. januárjában megjelent új Jáva alap-környezet, a JDK (Java Development Kit) 1.1-es változata az RMI könyvtár megvalósításával jelentıs újításokat hozott ezen a téren. 2. Távoli eljáráshívás Korábban megfigyelhettük, hogy az elosztott rendszerek programozásában kiemelkedı szerepet játszik az úgynevezett távoli eljáráshívás (RPC, Remote Procedure Call) módszere. Itt a programozó a fejlesztése során egy processzoros rendszerben gondolkozik, ahol 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. A felhasznált rendszerkönyvtárak 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 alábbi ábra a távoli eljáráshívást általánosan mutatja be: 1

1.ábra: Távoli eljáráshívás 2.1 A Java RMI Az RMI (Remote Method Invocation), azaz távoli metódushívás egy olyan eszköz a Java nyelvben, mely lehetıvé teszi más VM-ben (Virtual Machine virtuális gép) elhelyezkedı objektumok metódusainak meghívását. 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. 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. Tehát azt mondhatjuk, hogy az RMI az RPC-hez hasonló mechanizmust biztosít, csak objektum orientált módon teszi. A távoli eljáráshívások (RPC) legnagyobb problémája az összetett adatszerkezetek hálózaton keresztüli átvitele. Leggyakrabban az átvihetı adatszerkezetek szigorú korlátozásával, a programtól független specifikációjával segítik a paraméterátadást. A Jáva egyszerőbb, egységesebb szerkezete, a referenciák következetes, kizárólagos használata, valamint a Jáva virtuális gép tulajdonságai miatt az RMI-nél a paraméterátadás, legalábbis a programozó számára nem jelent semmiféle korlátozásokat. 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. 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á, amelyet a másik oldal, a csontváz (a másik csonk) visszaalakít, létrehozva a szerver oldalon egy lokális objektumot, majd erre utaló hivatkozást ad tovább a szerver módszer törzsének. Az RMI másik hatalmas elınye a Java-ban alkalmazott objektummodellhez való illeszkedésen kívül a kommunikáció egyszerősége. Ugyanis a széles körben alkalmazott kliens-szerver modellben a rendszer részei közötti adatátvitel az I/O köré épül, sokszor saját protokollt kell kiépíteni az információcserére, illetve szinkronizációra. Ilyenkor a program írójának minden kapcsolódási pontnál implementálni kell a hálózati kommunikációt megvalósító eljárásokat, az adatátvitelt és szinkronizációt. (Ez annyit jelent, hogy létre kell hozni egy csatornát a kommunikáló felek között, ami általában egy TCP csatorna, szinkronizálni, kódolni, illetve dekódolni az átvitelre váró adatokat.) Ezen eljárások 2

hasonlítanak egymásra, de nehéz általános megoldást találni megvalósításukra a speciális esetek miatt, illetve könnyő hibát ejteni. Ezzel szemben az RMI egy magasabb szintő absztakciós eszköz, melynél az információáramlás a metódusok hívásakor átadott paraméterekkel oldható meg. Nagyon fontos, hogy a paraméterek csakis szerializálható adattípusok lehetnek. Szerializáció Egy objektum szerializáció során egy bájtfolyammá alakul (általánosan kifejezve: adatfolyam), mely ezek után használható a Java nyelv szabványos kimenet és bemenet kezelési módszereivel. Ennek ellenkezıje a deszerializáció, mely a visszaalakítást jelenti a bájtsorozatból objektummá. A szerializáció szó, mint technika takarhatja mind az elıbbi értelemben vett szerializációt, mind a deszerializációt. A szerializáció alkalmas például egy objektum háttértárra való kiírására, azaz állományba mentéshez, illetve alkalmas a VM-ek közötti kommunikáció megvalósítására, ugyanis a szerializált objektum a hálózaton átküldhetı, mint bájtfolyam, és a másik oldalon visszaalakítható objektummá. A szerializáció egy nagyon elınyös tulajdonsága, hogy egy objektum szerializálásakor nem csak az objektum kerül szerializálásra, hanem minden olyan objektum is, amire az eredeti objektum valamely mezıje referenciát tartalmaz. És ez ismétlıdik ezen objektumokra rekurzívan. Amennyiben szeretnénk, hogy Java osztályunk szerializálható legyen, akkor az osztálynak implementálnia kell a java.io.serializable interface-t. Pl.: class myclass implements java.io.serializable. 3. A Java RMI mőködése A továbbiakban az RMI alapvetı mőködését vizsgáljuk meg, nem említve az implementációs kérdéseket, amelyekre késıbb térünk ki, közvetlenül a mőködése bemutatása után. Az RMI tehát olyan eszközt ad a kezünkbe, mellyel más virtuális gépeken lévı objektumok metódusait tudjuk meghívni. Így a rendszer alapfogalma a távoli objektum. Viszont egy objektum nem minden metódusa hívható távolról (csupán azok, melyek egy úgynevezett távoli interfészben definiálva vannak), és fontos momentum, hogy nem biztosítja az osztályok távoli elérését (ami azt jelenti, hogy egy osztály konstruktor mőveletei nem lesznek használhatók). Ezen objektumok használata teljesen megegyezik a távolról nem hívható objektumok használatával, azaz a programozónak csak nagyon kevés helyen kell ezzel foglalkoznia, azaz a rendszer teljesen transzparens módon viselkedik. Az RMI rendszer nem más, mint Java osztályok győjteménye, azaz nem nyelvi elem. Mivel a hálózati kommunikációt végzı rész teljesen láthatatlan, ezért mégis annak tőnik. Ebbıl következik, hogy egy saját RMI rendszer implementálása Java nyelven lehetséges, a felmerülı problémák és azok megoldásainak ismeretében. Fontos megjegyezni, hogy a Java fejlesztıkörnyezettel adott RMI rendszer saját szemétgyőjtı mechanizmussal is rendelkezik, és mivel mőködése hasonló a Java nyelvben, illetve VM-ben implementálttal, így erre nyugodtan hagyatkozhatunk, néhány megkötéssel. A Java 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. A csonk egy olyan objektum, mely a lokális virtuális gépen helyezkedik el, és hasonlít a távoli objektumra azzal a különbséggel, hogy nincs benne implementálva a távoli objektum metódusainak törzse. A metódushívást tehát úgy kell elképzelni, hogy a csonk egy metódusát 3

hívjuk meg, mely a JRMP (Java Remote Method Protocol) protokollt használva továbbítja a hívást a távoli objektumnak, szerializálva a paramétereket, blokkolva a végrehajtást, majd 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 elkészítése automatikus, a Java fejlesztıkörnyezetben találunk hozzá eszközt. Tehát 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, melyek el vannak rejtve: 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, illetve a metódushívás aktuális paraméterei, szerializálva. Fontos, hogy 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. Míg a fogadó oldalon RMI háttérszálak futnak, melyek 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. Ebben már implementálva van a metódus törzse, így végrehajtódik az. A visszatérési értéket aztán visszaküldi a hívó oldalon szereplı csonknak, mely továbbadja a hívónak. Az elılünk elrejtett információk, melyek átmennek a hálózaton: a távoli metódus visszatérési értéke, és a kivétel, melyet vagy a távoli objektum dobott, vagy az RMI rendszer mőködése közben lépett fel. A kivételkezelés elosztott környezetben bonyolult probléma, melyeket mindig a hívó oldalon kell lekezelni, amik szintén szerializálva mennek át a hálózaton. Az RMI rendszer mőködése közben fellépett hibák válthatják ki a távoli metódushívás kivételeit, melyet például a hálózat megszakadása vagy a hívott fél helytelen mőködése okozhat. Egyéb dobott kivételeknél a szerializáció során elveszhetnek egyéb járulékos információk, melyek a hibakeresést jelentısen megkönnyítenék. Ebbıl is látszik, hogy a paraméterként átadott objektumok nem mennek vissza a hívó félhez. Ez azt jelenti, hogy a paramétereken véghezvitt változás nem aktualizálódik a hívó oldalon, azaz érték szerinti paraméterátadásról beszélünk. Ez közvetlenül abból következik, hogy a deszerializáció során a hívott oldalon egy másolat keletkezik az eredeti objektumból. Exportálás Abban az esetben, mikor 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, hogy most már fogadhat távoli metódushívásokat erre az objektumra vonatkozólag, illetve azért, hogy tudja, hova kell a hívást továbbadni. A közlést exportálásnak nevezzük. Természetesen egy objektumot unexportálni is lehet, ezek után nem érhetı el többet RMIn keresztül. Exportáláskor létrejön egy csonk példány is a hívott oldalon, melyet használva a hívó oldalon érhetjük el az eredeti, távolról elérhetı objektumot. RMI registry Ahhoz, hogy referenciához jussunk a távolról hívható objektumra, szükségünk van a hozzá tartozó csonkra. De ahogy korábban említettük, a csonk példány a hívott oldalon keletkezik, tehát valahogy el kell jutnia a hívó félhez. Ennek lekérése az RMI registry-n keresztül történik, méghozzá RMI technikával, ugyanis a registry nem más, mint egy távolról elérhetı objektum, melynek távolról hívható metódusaival rendelhetünk egy objektumhoz egy referenciát, kérhetjük le azt, illetve távolíthatjuk el a registry-bıl. 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é, melyben szerepel a számítógép neve, opcionálisan egy port, illetve az objektum neve. A 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 4

tud a hívó fél referenciát szerezni a registry-re? Mivel tudjuk ennek a címét és a port számát, valamint speciális azonosítóval rendelkezik, 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. Persze saját magunk is implementálhatunk RMI registry-t, sıt mi is példányosíthatjuk és exportálhatjuk a programból. Fontos megjegyezni, hogy nem csak az registry-n keresztül kaphatunk meg egy referenciát ez távolról elérhetı objektumra, hanem egy távoli metódushívás visszatérési értékeként is megkaphatunk egy hivatkozást, ami nem más mint egy csonk példány. Fontos kérdések még az RMI-vel kapcsolatban a biztonsági feltételek, lévén szó hálózati kommunikációról, illetve az elosztott szemétgyőjtés megvalósítása. 4. Példaprogram A következıkben egy egyszerő példaprogramon keresztül mutatjuk be az RMI megvalósítását. 4.1 A fejlesztés lépései Az alábbi ábra a kliens és szerver fejlesztésének lépéseit mutatja be vázlatosan. 2.ábra: RMI kliens és szerver fejlesztése (Forrás: Ficsor Lajos Java RMI) Lépések: 1. Távoli interface definiálása: 5

A távol objektum interface-ének definiálása Java interface-ként. Ehhez a java.rmi.remote interface kiterjesztése szükséges, valamint minden metódusnak dobnia kell egy java.rmi.remoteexception kivételt. Pl.: public interface TestServer extends java.rmi.remote { 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. Ezután a szerver osztály példányosítani kell a main() metódusban, amely történhet ugyanabban az osztályban, vagy akár egy tetszıleges más osztályban is. Végül a szerver objektumot exportálni kell. A leszármazott változat esetén ez nem szükséges. 3. A szerver osztály lefordítása 3a. A stub compiler lefuttatása (csak 5. elıtti verziók esetén): A csonk lefordítása az rmic parancs segítségével történik, amely paraméterei megegyeznek a javac-al. Ezen alkalmazás feladata a kliens csonk és a szerver oldali csonk (skeleton) generálása. A Java 1.5 verzióktól ez szintén nem szükséges. 4. RMI registry indítása: rmiregistry parancs indítása a szerver gépen, amely lehetıvé teszi a távoli objektumok név szerinti elérését. Ez maga is távoli objektumként van implementálva. Minden szerver processz használhat saját registry-t vagy akár egy közöset is. A registry 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. 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

4.2 Hello World RMI 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 távoli interface implementálása és a szerver osztály: A kiszolgálót implementáló osztálynak egy speciális osztályból, a java.rmi.server.unicastremoteobject-bıl kell leszármaznia és természetesen meg kell valósítania a távoli hívások interfészét. package hello; import java.rmi.naming; import java.rmi.remoteexception; import java.rmi.rmisecuritymanager; import java.rmi.server.unicastremoteobject; 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()); 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(); 7

A távoli objektumot használó kliens applet: package examples.hello; import java.applet.applet; import java.awt.graphics; import java.rmi.naming; import java.rmi.remoteexception; public class HelloApplet extends Applet { String message = "blank"; // "obj" is the identifier that we'll use to refer // to the remote object that implements the "Hello" // interface 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); Forrásmunkák: 1. Viczián István: Alkalmazásfejlesztés Java-ban. 2. Ficsor Lajos: Java RMI áttekintés. 3. java.sun.com: Java Remote Method Invocation - Distributed Computing for Java: http://java.sun.com/javase/technologies/core/basic/rmi/whitepaper/index.jsp. 8