No mundo da programação distribuída nós precisamos nos comunicar com outros sistemas que ficam fora da nossa fronteira de aplicação então nós precisamos nos preocupar com rede, acesso e vários outros problemas decorrentes dessa prática. Quanto utilizamos o socket nós temos o problema do trabalho diretamente com o stream de bytes, o que pode se tornar um problema pois errar é humano. Poderiamos trabalhar com RPC já que as chamadas são transparentes ao desenvolvedor, contudo no mundo java nós precisamos trabalhar diretamente com objetos.
Para implementar um objeto remoto nós precisamos criar uma interface que extende a interface java.rmi.Remote, também é preciso que os métodos remotos lancem excessões do tipo java.rmi.RemoteException.