What are the RMI Failure modes?
I was surprised today when I pulled the network. My client was working with my server. Between calls I disconnected the connection. Made a call which failed. Then reconnected. The next call performed full speed. I expected a 'reconnection' delay.
Why was the first call slow, but all subsequent calls quick, as well as calls after I reconnected the network were quick? It leads me to believe that exporting an object the first time takes some time. But subsequent calls to the object that was already exported went quicker. Or perhaps my client downloaded some classes?
So the question is, when does the connection die in such a way that the client needs to re-download classes it has downloaded? Is this only after the client JVM exits? Also, where are the downloaded classes kept?
Second question is, how long are my client held remote objects valid? If the connection dies, how long will they remain valid for use, and how can I detect when they are no longer valid? How can I know the difference between an invalid reference and a broken connection? Is there a difference?

