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:
- kapcsolatot kezdeményez a távoli virtuális géppel (JVM),
- írja és továbbítja (marshals) a paramétereket a távoli virtuális gépnek (JVM),
- megvárja az eredményt
- elolvassa (unmarshals) a visszatérési értéket vagy kivételt, és
- 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:
- beolvassa a távoli metódus paraméterét
- meghívja a metódust a tényleges távoli objektumra, és
- í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.
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.
.
- az alkalmazásnak meg kell találnia a távoli módszert
- biztosítania kell a kommunikációt a távoli objektumokkal, és
- 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.
- a távoli interfész létrehozása
- a távoli interfész megvalósításának biztosítása
- 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
- indítsa el a registry szolgáltatást az rmiregistry eszköz segítségével
- hozza létre és indítsa el a távoli alkalmazást
- 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.
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
é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.
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
5) hozzon létre, majd futtassa a szerver
Fájl: MyServer.java
6) hozza létre és futtassa a kliens
fájlt: MyClient.java