Qu'est-ce que rmi ?

Le Remote Method Invocation (RMI) est une API Java permettant à un programme Java exécuté sur un ordinateur d'appeler des méthodes d'un objet situé sur un autre ordinateur. C'est un mécanisme de communication inter-processus distribué, spécifiquement conçu pour les environnements Java.

Voici quelques aspects importants de RMI :

  • Architecture : RMI utilise une architecture client/serveur. Le serveur expose des objets distants, et le client appelle les méthodes de ces objets comme s'ils étaient locaux.

  • Stubs et Skeletons :

    • Le stub est un proxy côté client. Il implémente la même interface que l'objet distant et masque la complexité de la communication réseau. (Lien : https://fr.wikiwhat.page/kavramlar/Stubs%20et%20Skeletons)
    • Le skeleton (obsolète depuis Java 1.5) était un objet côté serveur qui recevait les appels du client, les désérialisait et les transmettait à l'objet distant réel. Depuis Java 1.5, les skeletons sont remplacés par une technique basée sur la réflexion.
  • Registry : Le RMI Registry est un service de noms qui permet aux clients de localiser les objets distants. Le serveur enregistre ses objets auprès du Registry, et le client interroge le Registry pour obtenir une référence à l'objet distant. (Lien : https://fr.wikiwhat.page/kavramlar/RMI%20Registry)

  • Sérialisation : RMI utilise la sérialisation Java pour transmettre les arguments et les valeurs de retour des méthodes entre le client et le serveur. (Lien : https://fr.wikiwhat.page/kavramlar/Sérialisation%20Java)

  • Avantages :

    • Simplicité pour les applications Java-centriques.
    • Intégration native avec l'écosystème Java.
  • Inconvénients :

    • Couplage fort à Java (client et serveur doivent être en Java).
    • Moins flexible que d'autres technologies de communication (ex: REST).
    • La sérialisation Java peut présenter des vulnérabilités de sécurité.
  • Alternatives : Des alternatives plus modernes incluent les services Web (REST, SOAP), les frameworks de messagerie (ex: Apache Kafka, RabbitMQ) et les frameworks RPC (ex: gRPC).