Java, per la realizzazione di applicazioni distribuite, oltre a supportare i socket e CORBA, supporta un metodo chiamato RMI (Remote Method Invocation).
RMI è simile a CORBA ma, poiché si basa sul modello a oggetti di Java, può essere usato solo in applicazioni Java; per queste applicazioni risulta comunque più semplice da usare e più efficiente degli altri metodi.
Per richiamare i metodi di un oggetto remoto, RMI usa gli stub come CORBA, ma non usa IDL e ORB; client stub e server stub sono vere e proprie classi generate automaticamente compilando l’oggetto server con il compilatore rmic (presente nel JDK). Le classi stub comunicano tra loro attraverso il livello di trasporto usando per default i socket TCP.
Per passare un parametro nella chiamata di un metodo remoto da parte del client, è necessario che il tipo del parametro sia serializzabile (cioè che l’oggetto che costituisce il parametro possa essere salvato su disco); l’oggetto locale viene copiato dalla JVM locale a quella remota al momento della chiamata e viceversa al ritorno.
Gli oggetti remoti a cui è possibile accedere devono essere registrati nel registro remoto, un programma in esecuzione sul computer server (che si avvia con rmiregistry presente nel JDK); inoltre gli oggetti devono essere attivati da un processo noto come Activation System Daemon (che va eseguito sul sistema remoto con rmid presente nel JDK).