A Java RMI használatának megkezdése
1. Áttekintés
Amikor két JVM-nek kommunikálnia kell, a Java RMI az egyik lehetőség, amelyet meg kell valósítanunk. Ebben a cikkben egy egyszerű példát mutatunk be, amely bemutatja a Java RMI technológiát.
2. A szerver létrehozása
Az RMI-kiszolgáló létrehozásához két lépés szükséges:
- Hozzon létre egy felületet, amely meghatározza az ügyfél / szerver szerződést.
- Hozzon létre egy megvalósítást az interfészről.
2.1. A szerződés meghatározása
Először hozzuk létre a távoli objektum felületét. Ez az interfész kiterjeszti a java.rmi.Távoli marker interfész.
Ezenkívül az interfészen deklarált minden módszer megdobja a java.rmi.RemoteException:
nyilvános felület A MessengerService kiterjeszti a Remote {String sendMessage (String clientMessage) dobja a RemoteException-t; }
Ne feledje azonban, hogy az RMI támogatja a metódus aláírások teljes Java specifikációját, amennyiben a Java típusok megvalósulnak java.io.Serializable.
A későbbi szakaszokban meglátjuk, hogy mind az ügyfél, mind a szerver hogyan fogja használni ezt a felületet.
A kiszolgáló számára létrehozzuk a megvalósítást, amelyet gyakran nevezünk Távoli objektum.
Az ügyfél számára az RMI könyvtár dinamikusan létrehoz egy a nevű megvalósítást Stub.
2.2. Végrehajtás
Ezenkívül valósítsuk meg a távoli interfészt, amelyet ismét a Távoli objektum:
public class MessengerServiceImpl megvalósítja a MessengerService {@Orride public String sendMessage (String clientMessage) {return "Client Message" .equals (clientMessage)? "Szerverüzenet": null; } public String unexposedMethod () {/ * kód * /}}
Figyelje meg, hogy abbahagytuk a dobRemoteException záradék a módszer meghatározásából.
Szokatlan lenne, ha távoli tárgyunk dobna egy RemoteException mivel ez a kivétel általában az RMI könyvtár számára van fenntartva, hogy kommunikációs hibákat emeljen az ügyfél számára.
Ennek elhagyása azzal az előnnyel is jár, hogy megvalósításunk RMI-agnosztikus marad.
Is, a távoli objektumban definiált további módszerek, de nem az interfész, láthatatlanok maradnak az ügyfél számára.
3. A szolgáltatás regisztrálása
Miután létrehoztuk a távoli megvalósítást, össze kell kötnünk a távoli objektumot egy RMI nyilvántartással.
3.1. Csonka létrehozása
Először létre kell hoznunk egy távoli objektum csonkját:
MessengerService szerver = new MessengerServiceImpl (); MessengerService stub = (MessengerService) UnicastRemoteObject .exportObject ((MessengerService) szerver, 0);
A statikusat használjuk UnicastRemoteObject.exportObject módszer a csonk implementációnk létrehozásához. A csonk az, ami varázslatos, ha a szerverrel kommunikálunk az alapul szolgáló RMI protokollon keresztül.
Az első érv a exportObject a távoli kiszolgáló objektum.
A második érv az a port, amely exportObject felhasználja a távoli objektumnak a rendszerleíró adatbázisba történő exportálására.
A nulla érték azt jelzi, hogy nem mindegy, melyik port exportObject felhasználások, ami tipikus és dinamikusan választott.
Sajnos a exportObject () a portszám nélküli módszer elavult.
3.2. Nyilvántartás létrehozása
Felállhatunk egy helyi nyilvántartási szerverrel a szerverünkön vagy külön önálló szolgáltatásként.
Az egyszerűség kedvéért létrehozunk egy helyi szerverünket:
Nyilvántartási nyilvántartás = LocateRegistry.createRegistry (1099);
Ez létrehoz egy olyan nyilvántartást, amelyhez a csonkokat a szerverek köthetik, és az ügyfelek felfedezhetik.
Ezenkívül használtuk a createRegistry módszerrel, mivel a rendszerleíró adatbázist helyi szinten hozzuk létre a szerver számára.
Alapértelmezés szerint egy RMI nyilvántartás fut az 1099-es porton. Ehelyett egy másik port is meghatározható a createRegistry gyári módszer.
De önálló esetben hívnánk getRegistry, paraméterként átadva a hosztnevet és a portszámot.
3.3 A csonk megkötése
Következésképpen kössük a csonkunkat a rendszerleíró adatbázisba. Az RMI nyilvántartás olyan elnevezési lehetőség, mint a JNDI stb. Hasonló mintát követhetünk itt, egyedi kulcshoz kötve a csonkunkat:
register.rebind ("MessengerService", csonk);
Ennek eredményeként a távoli objektum már elérhető minden olyan ügyfél számára, amely megtalálja a rendszerleíró adatbázist.
4. Az Ügyfél létrehozása
Végül írjuk meg az ügyfelet, hogy hívja meg a távoli módszereket.
Ehhez először megkeressük az RMI nyilvántartást. Ezenkívül megkeressük a távoli objektum csonkját a korlátozott egyedi kulcs használatával.
És végül meghívjuk a üzenet küldése módszer:
Nyilvántartási nyilvántartás = LocateRegistry.getRegistry (); MessengerService server = (MessengerService) nyilvántartás .lookup ("MessengerService"); String responseMessage = server.sendMessage ("Ügyfélüzenet"); String várhatóMessage = "Szerverüzenet"; assertEquals (vártMessage, responseMessage);
Mivel az RMI nyilvántartást a helyi gépen és az alapértelmezett 1099-es porton futtatjuk, ezért nem adunk át paramétereket getRegistry.
Valójában, ha a nyilvántartás inkább más gazdagépen vagy más porton van, akkor megadhatjuk ezeket a paramétereket.
Miután a rendszerleíró adatbázis segítségével megkeresett csonkobjektumot, meghívhatjuk a módszereket a távoli kiszolgálón.
5. Következtetés
Ebben az oktatóanyagban rövid bemutatást kaptunk a Java RMI-ről és arról, hogy ez hogyan alapozhatja meg a kliens-szerver alkalmazásokat. Figyeljen további híreket az RMI néhány egyedi funkciójáról!
Az oktatóanyag forráskódja megtalálható a GitHub oldalon.