[omniORB] COMM_FAILURE - omniORB eg3 example

Duncan Grisby dgrisby@uk.research.att.com
Thu, 28 Jun 2001 17:07:18 +0100


On Thursday 28 June, "Kirkpatrick, James E" wrote:

> If you kill the background "eg3_impl" server process and THEN run the
> "eg3_clt" again, it looks up the reference (which still exists in the name
> service) to the now "dead" server object, and attempts to invoke the
> echostring() operation via that reference.  However, this time the orb
> throws a COMM_FAILURE exception.
> 
> It seems to me that the orb should be throwing an OBJECT_NOT_EXIST exception
> since the object has gone away forever (or possibly a TRANSIENT exception).
> In either case, I don't see why omniORB is throwing COMM_FAILURE in this
> situation.

The ORB should not throw OBJECT_NOT_EXIST, since that means that the
object definitely no longer exists, and will never be contactable in
future. If the server was using a persistent POA, it might turn out to
be available again later.

The reason for the COMM_FAILURE is that the ORB tries to open a
connection to the TCP port number for the object, and gets a
connection refused. It has thus failed to communicate with it, so
COMM_FAILURE seems quite reasonable. It was only quite recently that
the spec was changed to say that COMM_FAILURE should only mean that an
existing communication has failed.

As Sai-Lai said, omniORB 4 will throw TRANSIENT as now required by the
spec.

Cheers,

Duncan.

-- 
 -- Duncan Grisby  \  Research Engineer  --
  -- AT&T Laboratories Cambridge          --
   -- http://www.uk.research.att.com/~dpg1 --