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:

  1. Hozzon létre egy felületet, amely meghatározza az ügyfél / szerver szerződést.
  2. 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.