Všetko o registri Java RMI a jeho použití

Všetko o registri Java RMI a jeho použití

RMI znamenať vyvolanie vzdialenej metódy a ako naznačuje názov, je to protokol pre program Java na vyvolanie metódy objektu spusteného na inom počítači. Poskytuje API (Application Programming Interface) na export objektu z jedného programu (nazývaného server) a vyvolávanie metód tohto objektu z iného programu (nazývaného klient), ktorý možno beží na inom počítači.





Java Register RMI je kľúčovou súčasťou systému Java RMI a poskytuje centralizovaný adresár pre servery na registráciu služieb a pre klientov na vyhľadávanie týchto služieb. V tomto článku sa naučíme implementovať server na odhalenie objektu a klienta na vyvolanie metódy na serveri, ako aj registráciu a vyhľadanie služby v registri RMI.





koľko GB je Windows 10

Deklarácia serverového rozhrania

Aby sme sa dozvedeli zložitosti fungovania systému Java RMI, implementujme jednoduchý serverový objekt, ktorý poskytuje metódu prijatia mena a vrátenia pozdravu. Tu je definícia rozhrania objektu:





import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Greeting extends Remote
{
public String greet(String name) throws RemoteException;
}

Volá sa názov rozhrania S pozdravom . Poskytuje jednu metódu, tzv pozdravujem () ktorý prijme meno a vráti vhodný pozdrav.

Aby bolo toto rozhranie označené ako exportovateľné, musí rozšíriť java.rmi.Vzdialené rozhranie. Tiež metóda musí deklarovať a hody zoznam klauzúl java.rmi.RemoteException okrem akýchkoľvek výnimiek špecifických pre aplikáciu. Je to tak preto, že kód klienta dokáže spracovať (alebo šíriť) chyby vyvolania vzdialenej metódy, ako napr hostiteľ nebol nájdený , zlyhanie spojenia , atď.



Implementácia objektu servera

Po deklarovaní rozhrania (ktoré používajú klienti) implementujeme objekt na strane servera a poskytneme súbor pozdravujem () metóda, ako je znázornené. Na formátovanie pozdravu používa jednoduchý formátovací reťazec.

public class GreetingObject implements Greeting
{
private String fmtString = 'Hello, %s';
public String greet(String name)
{
return String.format(this.fmtString, name);
}
}

Hlavná metóda servera

Poďme teraz zhromaždiť všetky tieto časti dohromady a implementovať Hlavná() metóda servera. Prejdeme si každý z príslušných krokov.





  • Prvým krokom je vytvorenie implementácie objektu servera. | _+_ |
  • Ďalej získame stub pre objekt servera z behu RMI. Stub implementuje rovnaké rozhranie ako objekt servera. Metóda však implementuje požadovanú komunikáciu s objektom vzdialeného servera. Tento útržok používa klient na transparentné vyvolanie metódy na serverovom objekte. | _+_ |
  • Hneď ako sa získa záporný bod, odovzdáme tento záporný list do registra RMI, aby sa viazal na zadanú pomenovanú službu. Keď klient požaduje implementáciu tejto služby, dostane útržok, ktorý vie, ako komunikovať s objektom servera. Nasledujúca statická metóda LocateRegistry.getRegistry () sa používa na získanie referencie na miestny register. The rebind () metóda sa potom použije na viazanie názvu na inzerát. | _+_ |

Kompletná hlavná metóda.

Greeting greeting = new GreetingObject();

Budovanie servera

Pozrime sa teraz na stavbu servera. Aby to bolo jednoduché, staviame pomocou príkazového riadka v systéme Linux, a nie pomocou nástrojov na vytváranie, ako je napríklad Maven.





Nasledujúce kompiluje zdrojové súbory do súborov triedy v cieľovom adresári.

Greeting stub = (Greeting)UnicastRemoteObject.exportObject(greeting, 0);

Zozbierajte súbory triedy do súboru JAR na vykonanie.

String name = 'Greeting';
Registry registry = LocateRegistry.getRegistry(port);
registry.rebind(name, stub);

Zhromažďujeme tiež súbory rozhrania potrebné na kompiláciu klienta do knižnice JAR.

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class Main
{
static public void main(String[] args) throws Exception
{
if ( args.length == 0 ) {
System.err.println('usage: java Main port#');
System.exit(1);
}
int index = 0;
int port = Integer.parseInt(args[index++]);
String name = 'Greeting';
Greeting greeting = new GreetingObject();
Greeting stub = (Greeting)UnicastRemoteObject.exportObject(greeting, 0);
Registry registry = LocateRegistry.getRegistry(port);
registry.rebind(name, stub);
System.out.println('Greeting bound to '' + name + ''');
}
}

Implementácia klienta

Pozrime sa teraz na implementáciu klienta použitého na vyvolanie metód objektu servera.

  • Rovnako ako na serveri získajte odkaz na register, zadajte názov hostiteľa, na ktorom je register spustený, a číslo portu. | _+_ |
  • Ďalej vyhľadajte službu v registri. The vyhľadať() metóda vráti útržok, ktorý je možné použiť na vyvolanie služieb. | _+_ |
  • A vyvolajte metódu odovzdania požadovaných argumentov. Tu dostaneme pozdrav odovzdaním mena a vytlačením. | _+_ |

Kompletný kód klienta:

rm -rf target
mkdir target
javac -d target src/server/*.java

Register RMI

Teraz spustime serverový program, aby mohol začať obsluhovať požiadavky.

jar cvf target/rmi-server.jar -C target server

Čo je táto výnimka ? spojenie zamietnuté .

Túto výnimku získate preto, že: z kódu servera sa pokúsite pripojiť k miestnemu registru na porte 1099. Ak to zlyhá, skončíte s touto výnimkou.

Riešením je spustiť register RMI. Register RMI je program dodávaný s virtuálnym strojom Java a nazýva sa rmiregistry . Mala by byť umiestnená v dopoludnia adresár inštalácie Java Virtual Machine. Jeho spustenie je také jednoduché ako:

jar cvf target/rmi-lib.jar -C target server/Greeting.class

Register predvolene počúva na porte 1099. Ak ho chcete počúvať na inom porte, zadajte číslo portu nasledovne:

Registry registry = LocateRegistry.getRegistry(host, port);

Skontrolujte, či je na uvedenom porte skutočne poslucháč príkaz netstat :

Nástroj na vytváranie médií systému Windows 10 je zaseknutý
Greeting greeting = (Greeting) registry.lookup(name);

Spustenie servera

Skúsme teraz znova spustiť server.

System.out.println(name + ' reported: ' + greeting.greet(myName));

Opäť výnimka! Čo je to tentokrát?

Server nemôže načítať triedu rozhrania server. S pozdravom . K tomu dochádza, pretože register RMI nemôže načítať požadovanú triedu. Musíte teda určiť umiestnenie požadovaných tried. Jedným zo spôsobov, ako to urobiť, je zadať premennú prostredia CLASSPATH:

package client;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import server.Greeting;
public class Client
{
static public void main(String[] args) throws Exception
{
if ( args.length != 3 ) {
System.err.println('usage: java Client host port myName');
System.exit(1);
}
int index = 0;
String host = args[index++];
int port = Integer.parseInt(args[index++]);
String myName = args[index++];
String name = 'Greeting';
Registry registry = LocateRegistry.getRegistry(host, port);
Greeting greeting = (Greeting) registry.lookup(name);
System.out.println(name + ' reported: ' + greeting.greet(myName));
}
}

Pokus o opätovné spustenie servera poskytuje:

java -cp target/rmi-server.jar server.Main 1099
# throws
Exception in thread 'main' java.rmi.ConnectException: Connection refused to host: xxx; nested exception is:
java.net.ConnectException: Connection refused

Teraz je server spustený.

Spustenie klienta

Po zostavení a spustení všetkých častí je spustenie klienta jednoduché. Na vykonanie potrebuje príslušné JAR. Patrí sem trieda obsahujúca príponu Hlavná() metóda a trieda rozhrania. Prijíma argumenty označujúce, kde je spustený register RMI, a názov pozdravu.

/usr/lib/jvm/jdk1.8.0_71/bin/rmiregistry

Zhrnutie

Java RMI poskytuje API a nástroje na uľahčenie vzdialeného spustenia kódu. Môžete implementovať server, ktorý registruje objekt služby v registri Java RMI. Klienti môžu dotazovať register a získať inzerát na objekte servisného objektu na vyvolanie servisných metód. Ako ukazuje tento príklad, všetko je celkom jednoduché.

Používate vo svojom projekte Java RMI? Aké máte skúsenosti? Existujú nejaké alternatívy, ktoré ste skúmali? Dajte nám prosím vedieť v nižšie uvedených komentároch.

zdieľam zdieľam Tweet E -mail Príručka pre začiatočníkov k animovanej reči

Animovaná reč môže byť výzvou. Ak ste pripravení začať pridávať dialógy do svojho projektu, proces za vás rozložíme.

Čítajte ďalej
Súvisiace témy
  • Programovanie
  • Java
O autorovi Jay Sridhar(17 článkov uverejnených) Viac od Jaya Sridhara

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber