RMI (Remote Method Invocation)
de RMI (Remote Method Invocation) is een API die een mechanisme biedt om gedistribueerde toepassing in java te maken. Het KMI staat een object toe om methoden aan te roepen op een object dat in een andere JVM draait.
het KMI biedt communicatie op afstand tussen de toepassingen met behulp van twee objecten stub en skelet.
stub en skelet begrijpen
KMI gebruikt stub en skeletobject voor communicatie met het object op afstand.
een object op afstand is een object waarvan de methode kan worden aangeroepen vanaf een andere JVM. Laten we de stub-en skeletobjecten begrijpen:
stub
de stub is een object, fungeert als een gateway voor de clientzijde. Alle uitgaande verzoeken worden er doorheen geleid. Het bevindt zich aan de clientzijde en vertegenwoordigt het object op afstand. Wanneer de beller de methode op het stub-object aanroept, voert hij de volgende taken uit:
- het Start een verbinding met remote Virtual Machine (JVM),
- het schrijft en verzendt (marshals) de parameters naar de remote Virtual Machine (JVM),
- het wacht op het resultaat
- het leest (unmarshals) de retourwaarde of uitzondering, en
- het geeft uiteindelijk de waarde terug aan de beller.
skeleton
het skelet is een object, fungeert als een gateway voor het object aan de serverzijde. Alle inkomende verzoeken worden er doorheen geleid. Wanneer het skelet de inkomende aanvraag ontvangt, doet het de volgende taken:
- het leest de parameter voor de remote methode
- het roept de methode aan op het werkelijke remote object, en
- het schrijft en zendt (marshals) het resultaat naar de beller.
in de Java 2 SDK werd een stub-protocol geïntroduceerd dat de behoefte aan skeletten elimineert.
inzicht in de vereisten voor gedistribueerde toepassingen
als een toepassing deze taken uitvoert, kan het gedistribueerde toepassing zijn.
.
- de toepassing moet de methode op afstand lokaliseren
- het moet de communicatie met de objecten op afstand leveren, en
- de toepassing moet de klassendefinities voor de objecten Laden.
de RMI-toepassing heeft al deze functies, dus het wordt de gedistribueerde toepassing genoemd.
Java RMI voorbeeld
het krijgt de 6 stappen om het RMI-programma te schrijven.
- maak de externe interface
- Geef de implementatie van de externe interface
- compileer de implementatieklasse en maak de stub-en skeletobjecten met behulp van het rmic-Gereedschap
- Start de registerservice met het rmiregistry-Gereedschap
- maak en start de externe toepassing
- maak en start de client-toepassing
RMI voorbeeld
in dit voorbeeld hebben we alle 6 stappen gevolgd om de KMI-toepassing te maken en uit te voeren. De clienttoepassing heeft slechts twee bestanden nodig, remote interface en clienttoepassing. In de rmi-toepassing werken zowel de client als de server samen met de externe interface. De clienttoepassing roept methoden op op het proxy-object, RMI stuurt het verzoek naar de externe JVM. De retourwaarde wordt teruggestuurd naar het proxy-object en vervolgens naar de clienttoepassing.
1) Maak de externe interface
voor het maken van de externe interface, breidt u de Externe interface uit en declareert u de RemoteException met alle methoden van de externe interface. Hier maken we een remote interface die de remote interface uitbreidt. Er is slechts één methode met de naam add() en het verklaart RemoteException.
2) Geef de implementatie van de externe interface
geef nu de implementatie van de externe interface. Voor de implementatie van de remote interface moeten we
- ofwel de unicastremoteobject-klasse uitbreiden,
- of de methode exportObject() gebruiken van de unicastremoteobject-klasse
in het geval u de unicastremoteobject-klasse uitbreidt, moet u een constructor definiëren die RemoteException declareert.
3) Maak de stub-en skeletobjecten met behulp van het rmic-Gereedschap.
de volgende stap is het maken van stub-en skeletobjecten met behulp van de rmi-compiler. De rmic-tool roept de RMI-compiler aan en maakt stub-en skeletobjecten.
4) Start de registry service met de rmiregistry tool
start nu de registry service met behulp van de rmiregistry tool. Als u het poortnummer niet opgeeft, gebruikt het een standaard poortnummer. In dit voorbeeld gebruiken we poortnummer 5000.
5) servertoepassing
aanmaken en uitvoeren nu moeten rmi-services in een serverproces worden gehost. De Naamgevingsklasse biedt methoden om het object op afstand te verkrijgen en op te slaan. De naamgeving klasse biedt 5 methoden.
publieke statische java.rmi.Remote lookup (java.lang.String) gooit java.rmi.NotBoundException, java. net. Misformedurlexception, java.rmi.RemoteException; | het geeft de referentie van het object op afstand terug. |
public static void bind (java.lang.String, java.rmi.Remote) gooit java.rmi.Reeds afgesloten, java.net.Misvormdurlexception, java.rmi.RemoteException; | het verbindt het object op afstand met de opgegeven naam. |
public static void unbind (java.lang.String) gooit java.rmi.RemoteException, java.rmi.NotBoundException, java. net. Misformedurlexception; | het vernietigt het object op afstand dat is gebonden aan de opgegeven naam. |
public static void rebind (java.lang.String, java.rmi.Remote) gooit java.rmi.RemoteException, java. net. Misformedurlexception; | het bindt het object op afstand aan de nieuwe naam. |
publieke statische java.lang.String list (java.lang.String) gooit java.rmi.RemoteException, java. net. Misformedurlexception; | het geeft een array terug van de namen van de objecten op afstand die in het register zijn gebonden. |
In dit voorbeeld binden we het object op afstand met de naam sonoo.
6) Create and run the client application
op de client krijgen we het stub object door de lookup() methode van de naamgeving klasse en het aanroepen van de methode op dit object. In dit voorbeeld draaien we de server-en clienttoepassingen op dezelfde machine, dus gebruiken we localhost. Als u het object op afstand vanaf een andere machine wilt benaderen, wijzigt u de localhost naar de hostnaam (of IP-adres) waar het object op afstand zich bevindt.
uitvoer van dit RMI voorbeeld
zinvol voorbeeld van RMI toepassing met database
beschouw een scenario, er zijn twee toepassingen draaien op verschillende machines. Laten we zeggen MachineA en MachineB, machineA is gevestigd in de Verenigde Staten en MachineB in India. MachineB wil lijst van alle klanten van machine krijgeneen toepassing.
laten we de KMI-toepassing ontwikkelen door de stappen te volgen.
1) Maak de tabel
Allereerst moeten we de tabel in de database aanmaken. Hier gebruiken we de oracle10-database.
2) Customer class en Remote interface
bestand: klant.java
opmerking: Klantklasse moet serialiseerbaar zijn.
Bestand: Bank.java
3) Maak de klasse aan die de implementatie van externe interface
biedt bestand: BankImpl.java
4) compileer de klasse rmic tool en start de registry service met rmiregistry tool
5) Maak en voer de Server
bestand: MyServer.java
6) Maak en voer de Client
bestand: MyClient.java