[omniORB] ServantLocator/ServantActivator bug with system exceptions

Chris Newbold cnewbold@laurelnetworks.com
Fri, 10 Nov 2000 15:10:24 -0500


We're currently running omniORB 3.0.2 and I've found what appears
to be a problem with the way the POA handles exceptions raised
by ServantLocators and ServantActivators.

According to the OMG POA specification, section 11.3.4.1 all
ServantManagers are allowed to raise any appropriate system
exception and that any such exception is to be passed directly
back to the client.

However, in the omniORB POA, both ServantLocator and
ServantActivator code unilaterally stomp on any system exception.
>From poa.cc:

  try {
    servant = sl->preinvoke(oid, this, giop_s.operation(), cookie);
  }
  catch(PortableServer::ForwardRequest& fr) {
    exitAdapter();
    throw omniORB::LOCATION_FORWARD(
       CORBA::Object::_duplicate(fr.forward_reference));
  }
  catch(...) {
    exitAdapter();
    OMNIORB_THROW(OBJ_ADAPTER,0, CORBA::COMPLETED_NO);
  }

I'm hitting this problem most often when my ServantLocator raises
OBJECT_NOT_EXIST; clients end up getting an OBJ_ADAPTER instead,
which they don't know how to handle.

-Chris Newbold
Laurel Networks, Inc.