Note:
paquet java.rmi : L'invocation de méthode à distance (RMI) est obsolète dans Java 9 et les versions ultérieures, au profit d'autres mécanismes de communication à distance tels que les services Web ou les appels de procédure à distance (RPC).
L'invocation de méthode à distance (RMI) est une API qui permet à un objet d'invoquer une méthode sur un objet qui existe dans un autre espace d'adressage, qui peut se trouver sur la même machine ou sur une machine distante. Grâce à RMI, un objet exécuté dans une JVM présente sur un ordinateur (côté client) peut invoquer des méthodes sur un objet présent dans une autre JVM (côté serveur). RMI crée un objet serveur distant public qui permet les communications côté client et serveur via de simples appels de méthode sur l'objet serveur.
Objet de talon : L'objet stub sur la machine client crée un bloc d'informations et envoie ces informations au serveur.
Le bloc est composé de
- Un identifiant de l'objet distant à utiliser
- Nom de la méthode à appeler
- Paramètres de la JVM distante
Objet squelette : L'objet squelette transmet la requête de l'objet stub à l'objet distant. Il effectue les tâches suivantes
- Il appelle la méthode souhaitée sur l'objet réel présent sur le serveur.
- Il transmet les paramètres reçus de l'objet stub à la méthode.
Fonctionnement du RMI
La communication entre le client et le serveur est gérée à l'aide de deux objets intermédiaires : l'objet Stub (côté client) et l'objet Skeleton (côté serveur), comme cela peut également être représenté à partir du support ci-dessous comme suit :
Voici les étapes à suivre séquentiellement pour implémenter l'interface telle que définie ci-dessous :
surcharge de méthode
- Définir une interface distante
- Implémentation de l'interface distante
- Création d'objets Stub et Skeleton à partir de la classe d'implémentation à l'aide de rmic (compilateur RMI)
- Démarrer le registre rmi
- Créer et exécuter le programme d'application serveur
- Créez et exécutez le programme d'application client.
Étape 1 : Définition de l'interface distante
La première chose à faire est de créer une interface qui fournira la description des méthodes pouvant être invoquées par les clients distants. Cette interface doit étendre l'interface Remote et le prototype de méthode au sein de l'interface doit lever l'exception RemoteException.
Exemple:
Java
// Creating a Search interface> import> java.rmi.*;> public> interface> Search> extends> Remote> {> > // Declaring the method prototype> > public> String query(String search)> throws> RemoteException;> }> |
>
>
Étape 2 : Implémentation de l'interface distante
L'étape suivante consiste à implémenter l'interface distante. Pour implémenter l'interface distante, la classe doit s'étendre à la classe UnicastRemoteObject du package java.rmi. En outre, un constructeur par défaut doit être créé pour lancer l'exception java.rmi.RemoteException à partir de son constructeur parent dans la classe.
Java
// Java program to implement the Search interface> import> java.rmi.*;> import> java.rmi.server.*;> public> class> SearchQuery> extends> UnicastRemoteObject> > implements> Search> {> > // Default constructor to throw RemoteException> > // from its parent constructor> > SearchQuery()> throws> RemoteException> > {> > super> ();> > }> > // Implementation of the query interface> > public> String query(String search)> > throws> RemoteException> > {> > String result;> > if> (search.equals(> 'Reflection in Java'> ))> > result => 'Found'> ;> > else> > result => 'Not Found'> ;> > return> result;> > }> }> |
>
souligner dans la démarque
>
Étape 3 : Création d'objets Stub et Skeleton à partir de la classe d'implémentation à l'aide de rmic
L'outil rmic est utilisé pour appeler le compilateur rmi qui crée les objets Stub et Skeleton. Son prototype est rmic classname. Pour le programme ci-dessus, la commande suivante doit être exécutée à l'invite de commande
rmic SearchQuery.
Étape 4 : Démarrez le rmiregistry
Démarrez le service de registre en exécutant la commande suivante à l'invite de commande : démarrez rmiregistry
Étape 5 : Créer et exécuter le programme d'application serveur
L'étape suivante consiste à créer le programme d'application serveur et à l'exécuter sur une invite de commande distincte.
- Le programme serveur utilise la méthode createRegistry de la classe LocateRegistry pour créer rmiregistry dans la JVM du serveur avec le numéro de port passé en argument.
- La méthode rebind de la classe Naming est utilisée pour lier l'objet distant au nouveau nom.
Java
// Java program for server application> import> java.rmi.*;> import> java.rmi.registry.*;> public> class> SearchServer> {> > public> static> void> main(String args[])> > {> > try> > {> > // Create an object of the interface> > // implementation class> > Search obj => new> SearchQuery();> > // rmiregistry within the server JVM with> > // port number 1900> > LocateRegistry.createRegistry(> 1900> );> > // Binds the remote object by the name> > // geeksforgeeks> > Naming.rebind(> ' rmi://localhost:1900 '> +> > '/geeksforgeeks'> ,obj);> > }> > catch> (Exception ae)> > {> > System.out.println(ae);> > }> > }> }> |
>
>
Étape 6 : Créer et exécuter le programme d'application client
La dernière étape consiste à créer le programme d'application client et à l'exécuter sur une invite de commande distincte. La méthode de recherche de la classe Naming est utilisée pour obtenir la référence de l'objet Stub.
Java
// Java program for client application> import> java.rmi.*;> public> class> ClientRequest> {> > public> static> void> main(String args[])> > {> > String answer,value=> 'Reflection in Java'> ;> > try> > {> > // lookup method to find reference of remote object> > Search access => > (Search)Naming.lookup(> ' rmi://localhost:1900 '> +> > '/geeksforgeeks'> );> > answer = access.query(value);> > System.out.println(> 'Article on '> + value +> > ' '> + answer+> ' at techcodeview.com'> );> > }> > catch> (Exception ae)> > {> > System.out.println(ae);> > }> > }> }> |
>
>
Note: Le programme client et serveur ci-dessus est exécuté sur la même machine, donc localhost est utilisé. Afin d'accéder à l'objet distant depuis une autre machine, localhost doit être remplacé par l'adresse IP où l'objet distant est présent.
enregistrez les fichiers respectivement selon le nom de la classe sous
Search.java, SearchQuery.java, SearchServer.java et ClientRequest.java
Observations importantes :
- RMI est une solution Java pure pour les appels de procédure à distance (RPC) et est utilisée pour créer des applications distribuées en Java.
- Les objets Stub et Skeleton sont utilisés pour la communication entre le client et le serveur.