Remote Method Invocation : invocation de méthodes à distance.
Standardiser la communication entre objets distants depuis Java.
RMI est l'API de manipulation d'objets distribués (distants) en Java. Elle fournit une relative illusion de localité.
A partir de l'interface d'un objet distant à accéder sont générés :
Les souches et skelettes pour accéder un tel objet sont générés par un outil.
L'objet serveur s'enregistre dans un annuaire afin d'être retrouvable par ses clients.
Les clients retrouvent l'objet distant et appellent ses méthodes via la souche installée de leur côté.
Tout objet Java publiant son interface pour des clients distants implémente java.rmi.Remote
.
Les souches et skelettes sont générés par un compilateur RMI (rmic
pour RMI Compiler) fournit
dans le J2SDK.
L'objet serveur s'enregistre dans la RMI registry.
La seule différence dans les appels d'objets est que toute méthode est susceptible de lever une java.rmi.RemoteException
.
RMI peut utiliser différents protocoles de transport entre des objets distants :
RMI | Version | 1 | Commentaire | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Release | 1 | 2 | 3 | 4 | 5 | |||||||
Domaine | Technologie | Fixpack | 6 | 7 | 8 | 2 | ||||||
Activation à distance | Non | Oui | Permet de ne pas mobiliser inutilement des objets en mémoire. | |||||||||
Fabrique de sockets personnalisables | Non | Oui | Permet le changement de protocole (IIOP au lieu de JRMP, sécurisation via SSL par exemple) | |||||||||
Pile d'exécution dans les RemoteExceptions | Non | Oui | ||||||||||
Envoi de chaines supérieures à 64 Ko | Non | Oui | ||||||||||
Outils | rmic | Oui | ||||||||||
-idl | Non | |||||||||||
-iiop | Non | |||||||||||
rmiregistry | Oui | |||||||||||
rmid | Non | Oui | ||||||||||
java.rmi.activation.port | Non | Oui | ||||||||||
Propriétés système | Standard | java.rmi.dgc.leaseValue | Oui | |||||||||
java.rmi.server.codebase | Oui | |||||||||||
java.rmi.server.hostname | Oui | |||||||||||
java.rmi.server.logCalls | Oui | |||||||||||
java.rmi.server. randomIDs | Non | Oui | ||||||||||
java.rmi.server. useCodebaseOnly | Oui | |||||||||||
java.rmi.server. useLocalHostName | Non | Oui | ||||||||||
java.rmi.server. disableHttp | Oui | |||||||||||
Propriétaires | sun.rmi.server. suppressStackTraces | Non | Oui | |||||||||
sun.rmi.activation. execTimeout | Non | Oui | ||||||||||
sun.rmi.activation. snapshotInterval | Non | Oui | ||||||||||
sun.rmi.log.debug | Non | Oui | ||||||||||
sun.rmi.rmid. maxstartgroup | Non | Oui | ||||||||||
sun.rmi.server.activation. debugExec | Non | Oui | ||||||||||
sun.rmi.dgc. checkInterval | Oui | |||||||||||
sun.rmi.dgc.logLevel | Oui | |||||||||||
sun.rmi.dgc.server. gcInterval | Non | Oui | ||||||||||
sun.rmi.loader.logLevel | Non | Oui | ||||||||||
sun.rmi.server. exceptionTrace | Non | Oui | ||||||||||
sun.rmi.transport. logLevel | Oui | |||||||||||
sun.rmi.transport.tcp. localHostNameTimeOut | Non | O | O | O | O | O | ||||||
sun.rmi.transport.tcp. readTimeout | Non | Oui | ||||||||||
sun.rmi.dgc.cleanInterval | Oui | |||||||||||
sun.rmi.dgc.client. gcInterval | Non | Oui | ||||||||||
sun.rmi.loader.logLevel | Non | Oui | ||||||||||
sun.rmi.server.logLevel | Oui | |||||||||||
sun.rmi.transport. connectionTimeout | Non | Oui | ||||||||||
sun.rmi.transport. logLevel | Oui | |||||||||||
sun.rmi.transport.proxy. connectTimeout | Oui | |||||||||||
sun.rmi.transport.proxy. logLevel | Oui | |||||||||||
sun.rmi.transport.tcp. logLevel | Oui | |||||||||||
sun.rmi.dgc.ackTimeout | Non | Oui | ||||||||||
sun.rmi.transport.tcp. handshakeTimeout | Non | Oui | ||||||||||
Traces | java.rmi.server.logCalls | server-side remote calls and exceptions. Logger client sun.rmi.server.call | ||||||||||
sun.rmi.server.logLevel | server-side remote reference activity. Logger client sun.rmi.server.ref | |||||||||||
sun.rmi.client.logCalls | Non | Oui | client-side remote calls and exceptions. Logger client sun.rmi.client.call | |||||||||
sun.rmi.client.logLevel | client-side remote reference activity. Logger client sun.rmi.client.ref | |||||||||||
sun.rmi.dgc.logLevel | distributed garbage collection activity. Logger client sun.rmi.dgc | |||||||||||
sun.rmi.loader.logLevel | activity of default RMIClassLoader provider. Logger client sun.rmi.loader | |||||||||||
sun.rmi.transport. logLevel | transport-layer activity. Logger client sun.rmi.transport | |||||||||||
sun.rmi.transport.tcp. logLevel | TCP binding and connection activity. Logger client sun.rmi.transport.tcp | |||||||||||
sun.rmi.transport.proxy. logLevel | HTTP tunelling activity. Logger client sun.rmi.transport.proxy |