Note : on pourra se référer à l'API JavaSE 7 pour plus de détails.
Ce concept est lié à l'utilisation d'objets qui rendent un service plutôt que de serveur qui rend un résultat. Même si de prime abord, cela peut apparaître équivalent, les objets distants recellent une problématique plus contraignante, notamment parce que l'on se place du point de vue du paradigme Objet :
Plusieurs méthodes existent
RMI pour Remote Method Invocation est une API (Application Programming Interface) Java permettant de manipuler des objets distants (instanciés sur une autre machine du réseau au sein d'une JVM) de manière transparente pour l'utilisateur, c'est-à-dire de la même façon que si l'objet était sur la machine virtuelle de la machine locale.
On utilise un modèle client / serveur qui repose sur une interface partagée par client et serveur :
Les connexions et les transferts de données dans RMI sont effectués par Java sur TCP/IP grâce à un protocole propriétaire JRMP (Java Remote Method Protocol) sur le port 1099.
A partir de Java 2, les communications entre client et serveur s'effectuent grâce au protocole RMI-IIOP (Internet Inter-Orb Protocol), un protocole normalisé par l'OMG (Object Management Group) et utilisé dans l'architecture CORBA.
Le serveur permet à un client d'invoquer des méthodes à distance sur un objet qu'il instancie. Deux machines virtuelles sont donc nécessaires (une sur le serveur et une sur le client) et l'ensemble des communications se fait en Java.
RMI est une solution "tout Java", contrairement à la norme CORBA de l'OMG (Object Management Group) permettant de manipuler des objets à distance avec n'importe quel langage. Corba est toutefois beaucoup plus compliqué à mettre en oeuvre, c'est la raison pour laquelle de nombreux développeurs se tournent généralement vers RMI.
Notamment RMI se charge de la sérialisation des paramètres transmis entre client et serveur.
Par la suite, on se fonde sur un exemple.
On crée une interface qui possède une méthode qui réalise l'addition de deux réels fournis en paramètre. Cette interface devra être disponible sur le client et le serveur.
On réalise l'implémentation de l'interface, cette classe sera située sur le serveur.