Re: Software Caused Connection Abort (10053) on Client

Bob Scheifler <[email protected]> Fri, 2 Dec 2005 17:12:20 -0500
Newsgroups gmane.comp.java.sun.rmi
Message-ID <[email protected]>
> When everything works well, things go something like this:
>       ...
> When things don't work well I get:
>       ...
> Does that seem a little more correct?

Yep.

> I would have expected to get a
> server side transport trace message saying something like "exception
> thrown marshalling exception: ...". But I guess if I did then
> "serviceCall" would have returned false and I wouldn't have had this
> problem?

The NoSuchObjectException was successfully marshalled on the
server side, and serviceCall returned true.  Then handleMessages
mistook argument data as transport op, and closed the connection.
All of that happened before the client got around to writing all
of the argument data, so when the client to to write more argument
data, the client gets the exception.

> So this is good, I should be able to just change my #shouldRetry
> predicate to include both NoSuchObjectException and MarshalException.

Yes, although for MarshalException for calls in general you may want
to consider if partial unmarshalling of arguments[*] on the server side
violates any "at most once" semantics you want to maintain.  Depending
on what other kinds of stub changes between server restarts you might
expect, you could also consider ConnectException, UnknownHostException,
and ConnectIOException as worth retrying.  (Activation retries for
those exceptions, but does not retry for MarshalException.)

[*] Probably very unlikely, but if your socket factory produces sockets
with output streams that write additional data that can be processed
nonatomically in between application data, then it could be worse than
partial unmarshalling, it could be that server-side execution (upcall)
will have taken place.

- Bob

===========================================================================
To unsubscribe, send email to [email protected] and include in the body
of the message "signoff RMI-USERS".  For general help, send email to
[email protected] and include in the body of the message "help".

For a list of frequently asked RMI questions please refer to:
http://java.sun.com/j2se/1.3/docs/guide/rmi/faq.html

To view past RMI-USERS postings, please see:
http://archives.java.sun.com/archives/rmi-users.html