RMI = Remote Method Invocation í Meg tudjuk hıvni olyan objektumok meto dusait is, amelyek mas virtualis gepben futnak í Kommunikacio kulő nbő z gepeken futo Java programok kő ző tt Kliens-szerver alkalmazasok Elosztott alkalmazasok í Alternatıva: CORBA Nem csak Java programok/objektumok kő ző tt Kliens-szerver forgato kő nyv í A szerver program ele rhet ve tesz objektumokat bejegyzi ket egy registry-be a tavoli objektumok varjak, hogy a kliensek meghıvjak a meto dusaikat í A kliensek szereznek egy referenciat egy ilyen objektumra aztan hıvogatjak a tavoli objektumok meto dusait í A reszleteket az RMI rendszer elintezi... Elosztott objektumok rendszere forgato kő nyv í Kulő nbő z sza mıto gepeken futo kulő nbő z virtualis gepekben elhelyezked objektumokat bejegyzunk í Megkeresik egymast es kommunikalnak egyma ssal hıvogatjak egymas meto dusait í Egymas megkeresese: pl. registry-n keresztul í A reszleteket az RMI rendszer elintezi... Teve kenyse gek í Tavoli objektumok megkeresese rajuk referencia beszerzese rmiregistry-n keresztul meto dushıvasok parameterekent/eredmenyekent í Kommunika cio a ta voli objektummal sima meto dushıvasok a programozo szamara a reszleteket az RMI elfedi í Osztalydefinıcio s fa jlok tova bbıta sa egymasnak atadott objektumok osztalyanak bető ltese egy masik, tavoli virtualis gepb l 1
Dinamikus osztalybető ltes í Amikor a tavoli objektumok egymas meto dusait hıvja k... í parame tereket adnak a t e s visszate re si e rte keket kapnak í Nem biztos, hogy egy virtualis gep ismeri annak az objektumnak az osztalyat, amit ıgy kap í Az RMI lető lti az osztalydefinıcio t is Tavoli objektumok í Amelyeknek meg lehet hıvni meto dusait az RMI segıtse gevel ma s virtua lis ge pekb l í A java.rmi.remote interfe szt megvalo sıtja k í Megvalo sıtanak egy tavoli interfeszt (a Remote egy kiterjeszteset), amiben fel vannak sorolva a tavolro l elerhet meto dusaik Ta voli meto dus í Kiterjesztjuk a java.rmi.remote interfeszt í Ez lesz a ta voli interfe szú í Ebben vannak definialva a tavolro l meghıvhato meto dusok csak ezek hıvhato k tavolro l í Ezek a meto dusok specifikaljak, hogy kivalthatjak a java.rmi.remoteexception kive telt Mi is tő rtenik? í A kliens egy tavoli referenciavalú rendelkezik a tavoli objektumra í A kliens virtualis gepben egy proxy objektum van, ami Így csinal, mintha lenne a tavoli objektum tovabbıtja a meto dushıvasokat a tavoli objektumnak í Ezt a proxy objektumot stub-nak nevezik Stub - csonk: klienscsonk í A tavoli objektum reprezentansa a klien virtualis gepekben í Amikor tavoli objektumra referenciat szerzunk a registry-b l, akkor egy ilyen jő n letre í Amikor tavoli objektumokat parameterkent vagy visszateresi ertekkent atadunk, akkor ilyen ado dik at helyette í Ugyanazokat a tavoli interfeszeket valo sıtja meg, mint amit a tavoli objektum Meg cast-olni is lehet 2
Mit is kell akkor tennunk? í megvalo sıta sa í Fordıta s, e s uta na a csonkok legenera la sa í A fajlok kitevese a halo ra í Futtatas megvalo sıta sa (4/1) í El kell dő nteni, hogy a rendszerben mely komponensek lesznek ta volro l ele rhet k, e s melyek lesznek lokalisak megvalo sıta sa (4/2) í A ta voli interfe szek definia la sa a tavolro l elerhet szolgaltatasok definialasa í A ta voli meto dusok parame tereiben e s visszate re si erte keiben haszna lt tıpusok (osztalyok es interfeszek) megırasa megvalo sıta sa (4/3) í A tavoli osztalyok elkeszıtese implementaljak a tavoli interfeszeket megvalo sıtjak a ta volro l igenybevehet szolgaltata sokat í A meto dusok parame tereiben es visszate resi e rte keiben haszna lt tıpusok (oszta lyok e s interfe szek) megıra sa megvalo sıta sa (4/4) í Kliensek megvalo sıta sa raer akkor is, ha a tavoli objektumok mar uzembe vannak helyezve... 3
Fordıtas, es utana a csonkok legenera la sa í Forra sfa jlok lefordıtasa javac í A.class fajlokbo l a csonkok legeneralasa rmic tő bbek kő ző tt ez is resze a Development Kit-nek A fajlok kitevese a halo ra í Minden.class fajlt, amit a kliensek haszna lni szeretne nek majd, ele rhet ve tesszuk egy WEB-szerveren keresztul a tavoli interfeszek a klienscsonkok a segedosztalyok es segedinterfeszek (parameterek, visszate re si e rte kek tıpusa...) Futtata s í Az rmiregistry program ez is resze a Development Kit-nek í A tavoli objektumokat bejegyz programok pl. a szerverek í A haszna lo programok kliensek Hogyan is kell akkor ilyet ırni? í Keszıtsunk el egy tavoli objektumot, ami tud ő sszegezni egesz szamokat! í Definia ljuk a szolga ltata st: Adder interfesz í Megvalo sıtjuk a tavoli objektumot: RemoteAdder osztaly í Irunk egy kliens programot, ami hasznalja Adder interfesz í Terjesszuk ki a java.rmi.remote interfeszt í Irjuk bele a szolgaltatast, ami most ket meto dus add: hozzad egy szamot az eddigi ő sszeghez get: lekerdezi az eddigi ő sszeget í Gondoskodjunk arro l, hogy a meto dusok deklaraljak a throws klo zukban a java.rmi.remoteexception kivetelt mellette egyebeket is deklaralhatnanak... 4
RemoteAdder osztaly í Meg kell valo sıtson egy tavoli interfeszt, most pl. az Adder interfeszt í Kiterjesztjuk a java.rmi.server.unicastremoteobject osztalyt í Irnunk kell konstruktort is í Gondoskodni kell arro l, hogy beregisztraljuk az osztaly egy peldanyat egy registry-be pl. ırhatunk egy main meto dust is benne, ami ezt megteszi... Ta voli interfe sz megvalo sıta sa í Implementa ljuk az interfe szben specifika lt meto dusokat í A throws klo zban mar nem kell feltuntetni a java.rmi.remoteexception kivetelt persze, ha akarjuk, kivalthatjuk, es akkor fel kell tuntetni í Konstruktort is kell ırni, ami viszont kivalthatja ezt a kivetelt, tehat nem lehet a default konstruktorra tamaszkodni. UnicastRemoteObject í Erdemes ebb l szarmaztatni a tavoli objektumok osztalyat í Kenyelmi oszta ly tostring, equals, hashcode ű exportalasú, lesza rmazasnal automatikus í Pont-pont (unicast, es nem broadcast) kommunika cio í Alapertelmezett socket-os megvalo sıtasa az RMI-nek Ha nem leszarmazott... í Meg kell valo sıtani az RMI specifikacio ban adott szemantikaval az Object-beli m veleteket í Explicit exportalni kell a tavoli objektumot hogy az RMI rendszer tudomast szerezzen ro la UnicastRemoteObject.exportObject(ᑺ) A beregisztra la s mo dja í Megfelel biztonsa gi felugyel (security manager) installalasa í A tavoli objektum osztalyanak peldanyosıtasa í Bejegyzes pl. rmiregistry-be vagy mas szolgaltato ba, pl. JNDI 5
Biztonsagi felugyel í Vedi a virtualis gepet es az azt futtato rendszert a lető ltő tt ko dto l (pl. lokalis fajlrendszer elerese) í Kő telez definialni, ha azt akarjuk, hogy dinamikus osztalylető ltes menjen parameterek, visszateresi ertekek, kivetelek tıpusara í java.rmi.rmisecuritymanager í Olyasmi, mint ami az appletek eseten is van í Lehet mast is beallıtani, vagy jogokat adni egy policy fajllal System.get/setSecurityManager() Bejegyze s í Ahhoz, hogy egy kliens szerezni tudjon egy referencia t e lete els ta voli objektuma ra í A tő bbire mar tud referenciat szerezni ett l í Predefinit tavoli objektum: RMI registry í Nev alapjan lehet t le tavoli objektumokra referencia t ke rni í Szolga ltata s elindıta sa: rmiregistry í API hozza: java.rmi.naming registry rmi://sza mıtoge p:port/ne v í Ha nem adunk meg szamıto gepet, akkor az aktualis szamıto gep í Ha nem adunk meg portot, akkor 1099 í Ha bejegyeztunk egy tavoli objektumot, akkor mar van egy referencia ra, ezert nem lehet t felszabadıtani szemetgy jtessel, ezert a main vegeterese utan nem all le a prg. Pelda í Olyan tavoli objektumot fogunk ırni, ami valamilyen feladatot old meg. Az, hogy mi a feladat, ismeretlen akkor, amikor a tavoli objektumot elkeszıtjuk. Annyit tudunk csak, hogy leırhato egy bizonyos interfesszel. A dinamikus osztalybető ltes gondoskodik a tő bbir l 6