RMI (Remote Method Invocation)
The RMI (Remote Method Invocation) on API, joka tarjoaa mekanismin hajautetun sovelluksen luomiseen Javassa. RMI sallii objektin käyttää menetelmiä toisessa JVM: ssä käynnissä olevaan objektiin.
RMI tarjoaa etäyhteyden sovellusten välillä käyttäen kahta objektia tynkää ja luurankoa.
tynkä ja luuranko
RMI käyttää tynkä-ja luurankokohdetta viestintään etäkohteen kanssa.
etäobjekti on objekti, jonka menetelmään voidaan vedota toisesta JVM: stä. Ymmärretään tynkä-ja luurankoesineet:
tynkä
tynkä on objekti, toimii porttina asiakaspuolelle. Kaikki lähtevät pyynnöt ohjataan sen kautta. Se sijaitsee asiakkaan puolella ja edustaa etäkohdetta. Kun soittaja vetoaa menetelmän tynkä objekti, se tekee seuraavat tehtävät:
- se aloittaa yhteyden kauko-virtuaalikoneeseen (JVM),
- se kirjoittaa ja lähettää (marshals) parametrit kauko-virtuaalikoneeseen (JVM),
- se odottaa tulosta
- se lukee (merkitsemättömät) palautusarvon tai poikkeuksen, ja
- se lopulta palauttaa arvo soittajalle.
luuranko
luuranko on objekti, joka toimii porttina palvelinpuolen objektille. Kaikki saapuvat pyynnöt ohjataan sen kautta. Kun luuranko vastaanottaa saapuvan pyynnön, se tekee seuraavat tehtävät:
- se lukee etämenetelmän parametrin
- se vetoaa menetelmään varsinaiseen etäkohteeseen, ja
- se kirjoittaa ja lähettää (marshals) tuloksen soittajalle.
Java 2 SDK: ssa otettiin käyttöön tynkäprotokolla, joka poistaa luurankojen tarpeen.
hajautettujen sovellusten Ymmärtämisvaatimukset
jos jokin sovellus suorittaa nämä tehtävät, se voidaan jakaa sovellus.
.
- sovelluksen täytyy paikantaa etämenetelmä
- sen täytyy tarjota kommunikaatio etäobjektien kanssa, ja
- sovelluksen täytyy ladata objektien luokkamääritykset.
RMI-sovelluksessa on kaikki nämä ominaisuudet, joten sitä kutsutaan hajautetuksi sovellukseksi.
Java RMI esimerkki
is: lle annetaan 6 askelta RMI-ohjelman kirjoittamiseen.
- luo etäliittymä
- tarjoa etäliittymän toteutus
- kokoa toteutusluokka ja luo tynkä-ja luurankoobjektit rmic-työkalulla
- Aloita rekisteripalvelu rmiregistry-työkalulla
- luo ja käynnistä etäsovellus
- luo ja käynnistä asiakassovellus
RMI-esimerkki
tässä esimerkissä olemme noudattaneet kaikkia 6 vaihetta RMI-sovelluksen luomiseksi ja toteuttamiseksi. Asiakassovellus tarvitsee vain kaksi tiedostoa, etäliittymän ja asiakassovelluksen. Rmi-sovelluksessa sekä asiakas että palvelin ovat vuorovaikutuksessa etäkäyttöliittymän kanssa. Asiakassovellus vetoaa menetelmiin välityspalvelinobjektissa, RMI lähettää pyynnön kauko-ohjattavalle JVM: lle. Palautusarvo lähetetään takaisin proxy-objektiin ja sen jälkeen asiakassovellukseen.
1) Luo etäliittymä
etäliittymän luomista varten, pidennä etäliittymää ja ilmoita Etäliittymän poikkeaminen kaikilla etäliittymän menetelmillä. Täällä luomme etäliittymää, joka laajentaa Etäliittymää. On olemassa vain yksi menetelmä nimeltä add() ja se ilmoittaa syrjäisen syrjinnän.
2) tarjoavat etäliittymän toteutuksen
nyt tarjoavat etäliittymän toteutuksen. Etärajapinnan toteuttamiseksi on
- joko laajennettava UnicastRemoteObject-luokkaa,
- tai käytettävä exportObject () – menetelmää unicastremoteobject-luokasta
jos laajennat UnicastRemoteObject-luokkaa, sinun on määriteltävä rakentaja, joka ilmoittaa syrjäisestä syrjinnästä.
3) Luo tynkä-ja luurankoesineet rmic-työkalulla.
seuraava vaihe on luoda tynkä-ja luurankoesineet RMI-kääntäjän avulla. Rmic-työkalu vetoaa RMI-kääntäjään ja luo tynkä-ja luurankoesineitä.
4) Aloita rekisteripalvelu rmiregistry-työkalulla
aloita rekisteripalvelu rmiregistry-työkalulla. Jos et määritä portin numeroa, se käyttää oletusporttinumeroa. Tässä esimerkissä käytämme porttinumeroa 5000.
5) Luo ja suorita palvelinsovellus
nyt rmi-palvelut on isännöitävä palvelinprosessissa. Nimeämisluokka tarjoaa menetelmät etäkohteen saamiseksi ja tallentamiseksi. Nimeämisluokka tarjoaa 5 menetelmää.
Julkinen staattinen java.rmi.Remote lookup(java.lang.String) heittää java.rmi.NotBoundException, java. net. MalformedURLException, java.rmi.RemoteException; | se palauttaa kaukokohteen viitteen. |
public static void bind (java.lang.String, java.rmi.Kauko) heittää java.rmi.Jo havaittu poikkeaminen, java.net.Epämuodostuma, Jaava.rmi.RemoteException; | se sitoo kaukokohteen annettuun nimeen. |
public static void unbind (java.lang.String) heittää java.rmi.Kauko-ohjaus, java.rmi.NotBoundException, java. net. MalformedURLException; | se tuhoaa etäkohteen, joka on sidottu annettuun nimeen. |
public static void rebind (java.lang.String, java.rmi.Kauko) heittää java.rmi.RemoteException, java. net. MalformedURLException; | se sitoo kaukokohteen uuteen nimeen. |
Julkinen staattinen java.lang.String list (java.lang.String) heittää java.rmi.RemoteException, java. net. MalformedURLException; | se palauttaa joukon rekisteriin sidottujen etäobjektien nimiä. |
tässä esimerkissä sidomme kaukokohteen sonoo-nimellä.
6) Luo ja suorita asiakassovellus
asiakkaalla saamme tynkäobjektin nimeämisluokan lookup () – menetelmällä ja vetoamme menetelmään tässä objektissa. Tässä esimerkissä, olemme käynnissä palvelimen ja asiakkaan sovelluksia, samassa koneessa, joten käytämme localhost. Jos haluat käyttää etäkohdetta toisesta koneesta, vaihda localhost isäntänimeksi (tai IP-osoitteeksi), jossa etäobjekti sijaitsee.
tämän RMI-esimerkin Tuotos
mielekäs esimerkki RMI-sovelluksesta tietokantoineen
harkitse skenaariota, on kaksi sovellusta käynnissä eri koneissa. Sanotaan MachineA ja MachineB, machineA sijaitsee Yhdysvalloissa ja MachineB Intiassa. MachineB haluavat saada listan kaikista asiakkaista MachineA sovellus.
kehitetään RMI-sovellusta seuraamalla vaiheita.
1) Luo taulukko
ensinnäkin on luotava taulukko tietokantaan. Tässä, käytämme Oracle10-tietokantaa.
2) Luo Asiakasluokka ja etäliittymä
tiedosto: asiakas.java
Huom: Asiakasluokan on oltava sarjamuotoinen.
Tiedosto: Pankki.java
3) Luo luokka, joka tarjoaa Etäliittymän
toteutuksen tiedosto: BankImpl.java
4) kokoaa luokan rmic-työkalu ja käynnistä rekisteripalvelu rmiregistry-työkalulla
5) Luo ja suorita palvelin
tiedosto: MyServer.java
6) Luo ja suorita asiakas
tiedosto: MyClient.java