Come afferma Daff, lo stesso RMI Java è rilevante solo per le comunicazioni Java-to_Java. In termini di facilità di sviluppo in questi giorni il grado di codifica dal punto di vista del fornitore di servizi è abbastanza simile.
Tuttavia, oltre a problemi di prestazioni, in cui il divario tra i WebServices e RMI è piuttosto variabile (per alcuni formati messaggio non ci può essere differenza trascurabile,) c'è un altro aspetto da considerare: la resilienza.
In genere, RMI è facile da configurare quando un client parla con un server e non si cura della disponibilità del client accoppiato a quello del singolo server. Server down, client down, tale è la vita.
Nel caso del Servizio Web è possibile distribuire il servizio in modo semplice a un cluster di server e, dato che si sta richiamando il servizio Web su HTTP, è possibile sfruttare facilmente tutte le normali tecniche di routing e irrorazione di rete utilizzate su più ampia scala siti web Nessuna codifica speciale necessaria nel server o nel client.
Ora è possibile ottenere lo stesso livello di resilienza con RMI, ma ciò richiede un'infrastruttura di provisioning di servizi leggermente migliore e questo è il punto in cui il modello di programmazione EJB di Java EE (o framework come Spring) entra in gioco. EJB utilizza RMI su IIOP, un protocollo che consente chiamate resilienti alle istanze del server, gestendo in modo trasparente le interruzioni del server. [Ne fa anche molto di più, come la sicurezza e le transazioni, ma anche i Servizi Web. Interessante ma non parte di questa discussione.]
Bottom line: per la fornitura di servizi di qualità di produzione, di solito inizio creando un oggetto di servizio. Mi capita di utilizzare Java EE EJB 3, altri usano Spring. È possibile esporre tale oggetto di servizio come un servizio Web o come RMI/IIOP con alcune configurazioni/annotazioni molto semplici. È davvero poco sforzo scegliere uno o entrambi. Il mio mondo è importante per l'interoperabilità, quindi tendo ad esporre i servizi Web. Se si ha solo Java da considerare potrebbe dare qualche miglioramento delle prestazioni nell'uso di RMI/IIOP ma questo non è garantito, è necessario misurare la perfromance per essere sicuri.
Forse cercavi RMI vs servizi web? RPC è una soluzione indipendente dal linguaggio. Mi interessa Java usando RPC (non RMI/REST/etc.) Ma potrebbe non essere quello che intendevi. –