Previous | Table of Contents | Next |
A request must be capable of conveying the Object Id of the target object as well as the identification of the POA that created
the target object reference. When a client issues a request, the ORB first locates an appropriate server (perhaps starting
one if needed) and then it locates the appropriate POA within that server.
If the POA does not exist in the server process, the application has the opportunity to re-create the required POA by using
an adapter activator. An adapter activator is a user-implemented object that can be associated with a POA. It is invoked by
the ORB when a request is received for a non-existent child POA. The adapter activator has the opportunity to create the required
POA. If it does not, the client receives the OBJECT_NOT_EXIST exception with standard minor code 2.
Once the ORB has located the appropriate POA, it delivers the request to that POA. The further processing of that request
depends both upon the policies associated with that POA as well as the object's current state of activation.
If the POA has the RETAIN policy, the POA looks in the Active Object Map to find out if there is a servant associated with
the Object Id value from the request. If such a servant exists, the POA invokes the appropriate method on the servant.
If the POA has the NON_RETAIN policy or has the RETAIN policy but didn't find a servant in the Active Object Map, the POA
takes the following actions:
• If the POA has the USE_DEFAULT_SERVANT policy, a default servant has been associated with the POA so the POA will invoke the appropriate method on that servant. If no servant has been associated with the POA, the POA raises the OBJ_ADAPTER system exception with standard minor code 3.
• If the USE_OBJECT_MAP_ONLY policy is in effect, the POA raises the OBJECT_NOT_EXIST system exception with standard minor code 2.
• If the POA has the USE_SERVANT_MANAGER policy, a servant manager has been associated with the POA so the POA will invoke incarnate or preinvoke on it to find a servant that may handle the request. (The choice of method depends on the
NON_RETAIN or RETAIN policy of the POA.) If no servant manager has been associated with the POA, the POA raises the OBJ_ADAPTER system exception with standard minor code 4.
If a servant manager is located and invoked, but the servant manager is not directly capable of incarnating the object, it
(the servant manager) may deal with the circumstance in a variety of ways, all of which are the application’s responsibility.
Any system exception raised by the servant manager will be returned to the client in the reply. In addition to standard system
exceptions, a servant manager is capable of raising a ForwardRequest exception. This exception includes an object reference.
The ORB will process this exception as specified in section 11.3.5.1.