java.rmi.RemoteException
Requiring all remote methods be declared to throw RemoteException was a philosophical choice by the designers of RMI.
RMI makes remote invocations look syntactically like local invocation. In practice, though, it cannot defend from problems unique to distributed computing—unexpected failure of the network or remote machine.
Forcing the programmer to handle remote exceptions helps to encourage thinking about how these partial failures should be dealt with.
See the influential essay: “A Note on Distributed Computing” by Waldo et al, republished in The Jini Specification:
http://java.sun.com/docs/books/jini