RMI (Remote Method Invocation)

az RMI (Remote Method Invocation) egy API, amely mechanizmust biztosít elosztott alkalmazások létrehozására java-ban. Az RMI lehetővé teszi egy objektum számára, hogy metódusokat hívjon meg egy másik JVM-ben futó objektumon.

az RMI távoli kommunikációt biztosít az alkalmazások között két objektumcsonk és csontváz segítségével.

a csonk és a csontváz megértése

az RMI a csonkot és a csontváz objektumot Használja a távoli objektummal való kommunikációhoz.

a távoli objektum olyan objektum, amelynek metódusa meghívható egy másik JVM-ből. Értsük meg a csonkot és a csontváz objektumokat:

csonk

a csonk egy objektum, amely átjáróként működik a kliens oldalon. Az összes kimenő kérés rajta keresztül történik. A kliens oldalon helyezkedik el, és a távoli objektumot képviseli. Amikor a hívó metódust hív meg a csonk objektumon, a következő feladatokat hajtja végre:

  1. kapcsolatot kezdeményez a távoli virtuális géppel (JVM),
  2. írja és továbbítja (marshals) a paramétereket a távoli virtuális gépnek (JVM),
  3. megvárja az eredményt
  4. elolvassa (unmarshals) a visszatérési értéket vagy kivételt, és
  5. végül visszatér a hívó fél értéke.

csontváz

a csontváz egy objektum, átjáróként működik a szerver oldali objektumhoz. Az összes bejövő kérés rajta keresztül történik. Amikor a csontváz megkapja a bejövő kérést, a következő feladatokat látja el:

  1. beolvassa a távoli metódus paraméterét
  2. meghívja a metódust a tényleges távoli objektumra, és
  3. írja és továbbítja (marshals) az eredményt a hívónak.

a Java 2 SDK-ban egy csonk protokollt vezettek be, amely kiküszöböli a csontvázak szükségességét. csonk és csontváz az RMI-ben

az elosztott alkalmazások követelményeinek megértése

ha bármelyik alkalmazás elvégzi ezeket a feladatokat, akkor elosztott alkalmazás lehet.

.

  1. az alkalmazásnak meg kell találnia a távoli módszert
  2. biztosítania kell a kommunikációt a távoli objektumokkal, és
  3. az alkalmazásnak be kell töltenie az objektumok osztálydefinícióit.

az RMI alkalmazás rendelkezik ezekkel a funkciókkal, ezért elosztott alkalmazásnak hívják.

Java RMI Example

az RMI program megírásához 6 lépés szükséges.

  1. a távoli interfész létrehozása
  2. a távoli interfész megvalósításának biztosítása
  3. az implementációs osztály összeállítása és a csonk és a csontváz objektumok létrehozása az rmic eszköz segítségével
  4. indítsa el a registry szolgáltatást az rmiregistry eszköz segítségével
  5. hozza létre és indítsa el a távoli alkalmazást
  6. hozza létre és indítsa el a távoli alkalmazást ügyfélalkalmazás

rmi példa

ebben a példában az RMI alkalmazás létrehozásához és futtatásához mind a 6 lépést követtük. Az ügyfélalkalmazásnak csak két fájlra van szüksége, a távoli interfészre és az ügyfélalkalmazásra. Az rmi alkalmazásban mind az ügyfél, mind a kiszolgáló kölcsönhatásba lép a távoli interfésszel. Az ügyfélalkalmazás metódusokat hív meg a proxy objektumon, az RMI elküldi a kérést a távoli JVM-nek. A visszatérési érték visszakerül a proxy objektumba, majd az ügyfélalkalmazásba.

 rmi példa

1) hozza létre a távoli interfészt

a távoli interfész létrehozásához bővítse ki a távoli interfészt, és deklarálja a RemoteException-t a távoli interfész összes módszerével. Itt egy távoli interfészt hozunk létre, amely kiterjeszti a távoli interfészt. Csak egy add() nevű metódus létezik, amely a RemoteException-t deklarálja.

2) biztosítja a távoli interfész megvalósítását

most biztosítja a távoli interfész megvalósítását. A távoli interfész megvalósításának biztosításához

  • vagy ki kell terjesztenünk az UnicastRemoteObject osztályt,
  • vagy használnunk kell az unicastremoteobject osztály exportObject() metódusát

abban az esetben, ha kiterjeszti az UnicastRemoteObject osztályt, meg kell adnunk egy konstruktort, amely deklarálja a RemoteException-t.

3) hozza létre a csonk és a csontváz objektumokat az rmic eszköz segítségével.

a következő lépés a csonk és csontváz objektumok létrehozása az rmi Fordító segítségével. Az rmic eszköz meghívja az RMI fordítót, és létrehoz csonk és csontváz objektumokat.

4) Indítsa el a rendszerleíró szolgáltatást az rmiregistry eszközzel

most indítsa el a rendszerleíró szolgáltatást az rmiregistry eszközzel. Ha nem adja meg a port számát, akkor az alapértelmezett portszámot használja. Ebben a példában az 5000 portszámot használjuk.

5) hozza létre és futtassa a szerveralkalmazást

most az rmi-szolgáltatásokat szerverfolyamatban kell tárolni. Az elnevezési osztály metódusokat biztosít a távoli objektum lekéréséhez és tárolásához. Az elnevezési osztály 5 módszert biztosít.

nyilvános statikus java.rmi.Távoli keresés (java.lang.String) dob java.rmi.NotBoundException, java. net. MalformedURLException, java.rmi.RemoteException; visszaadja a távoli objektum hivatkozását.
nyilvános statikus void bind (java.lang.String, java.rmi.Távoli) dob java.rmi.AlreadyBoundException, java.net.MalformedURLException, java.rmi.RemoteException; a távoli objektumot az adott névvel köti össze.
nyilvános statikus void unbind (java.lang.String) dob java.rmi.RemoteException, java.rmi.NotBoundException, java.net.MalformedURLException; elpusztítja az adott névvel kötött távoli objektumot.
nyilvános statikus void rebind (java.lang.String, java.rmi.Távoli) dob java.rmi.RemoteException, java.net.MalformedURLException; a távoli objektumot az új névhez köti.
nyilvános statikus java.lang.Karakterlánc lista (java.lang.String) dob java.rmi.RemoteException, java.net.MalformedURLException; a rendszerleíró adatbázisban kötött távoli objektumok nevének tömbjét adja vissza.

ebben a példában a távoli objektumot sonoo névvel kötjük össze.

6) hozza létre és futtassa az ügyfélalkalmazást

az ügyfélnél az elnevezési osztály lookup() metódusával kapjuk meg a csonk objektumot, és meghívjuk a metódust ezen az objektumon. Ebben a példában a szerver és a kliens alkalmazásokat ugyanazon a gépen futtatjuk, tehát a localhost-ot használjuk. Ha egy másik gépről szeretné elérni a távoli objektumot, változtassa meg a localhostot arra a gazdagépnévre (vagy IP-címre), ahol a távoli objektum található.

ennek az RMI-példának a kimenete

RMI RMI

értelmes példa az RMI-alkalmazásra

adatbázissal. Tegyük fel, hogy a MachineA és a MachineB, a machineA az Egyesült Államokban, a MachineB pedig Indiában található. MachineB szeretne kapni a MachineA alkalmazás összes ügyfelének listáját.

fejlesszük ki az RMI alkalmazást a lépések végrehajtásával.

1) hozzon létre egy táblázatot

először is létre kell hoznunk a táblázatot az adatbázisban. Itt az Oracle10 adatbázist használjuk.

 rmi alkalmazás adatbázissal

2) Hozzon létre Ügyfélosztályt és távoli interfészt

Fájl: ügyfél.java

Megjegyzés: Az Ügyfélosztálynak Sorosíthatónak kell lennie.

Fájl: Bank.java

3) Hozzon létre egy osztályt, amely biztosítja a távoli interfész megvalósítását

Fájl: BankImpl.java

4) fordítsa le az osztály rmic eszköz, majd indítsa el a registry service által rmiregistry eszköz

rmi példa adatbázis

5) hozzon létre, majd futtassa a szerver

Fájl: MyServer.java példa a távoli módszer meghívására

6) hozza létre és futtassa a kliens

fájlt: MyClient.java valós példa az rmi-re