Summary: In coordination with the proposed resolution to the ORB Portability RTF
Issue #752, add the following operations to PortableServer::ServantBase
in section 20.34.1:
class ServantBase
{
...
public:
...
virtual InterfaceDef_ptr _get_interface() throw(SystemException);
virtual Boolean _is_a(const char * logical_type_id)
throw(SystemException);
virtual Boolean _non_existent() throw(SystemException);
...
}
;
and change the last paragraph of section 20.34.1 to:
The default implementation of the _default_POA() function provided by
ServantBase returns an object reference to the root POA of the default
ORB in this process — the same as the return value of an invocation of
ORB::resolve_initial_references("RootPOA") on the default ORB. Classes
derived from ServantBase can override this definition to return the POA
of their choice, if desired.
and add the following text at the end of section 20.34.1:
ServantBase provides default implementations of the _get_interface(),
_is_a(), and _non_existent() standard object reference operations that
can be overridden by the object implementation if the default behavior
is not adequate. These functions are called just like normal skeleton
operations by the POA, so the programmer can use _this() and and the
PortableServer::Current interface in the function bodies.
The default implementation of the _get_interface() and _is_a() functions
provided by ServantBase uses the interface associated with the skeleton
class if it is static to determine its return value. If the skeleton is
dynamic (see 20.36) it uses the _primary_interface() function to
determine its return value.
The default implementation of the _non_existent() function simply
returns false.