The Current Object

Up to now, we have tacitly ignored the trailing parameter of type Ice::Current that is passed to each skeleton operation on the server side. The Current structure is defined as follows:

Slice
module Ice {
    local dictionary<string, string> Context;

    enum OperationMode { Normal, \Idempotent };

    local struct Current {
        ObjectAdapter   adapter;
        Connection      con;
        Identity        id;
        string          facet;
        string          operation;
        OperationMode   mode;
        Context         ctx;
        int             requestId;
        EncodingVersion encoding;
    };
};

Note that the Current value provides access to information about the currently executing request to the implementation of an operation in the server:

  • adapter
    The adapter member provides access to the object adapter via which the request is being dispatched. In turn, the adapter provides access to its communicator (via the getCommunicator operation).
  • con
    The con member provides information about the connection over which this request was received. If the invocation is dispatched with the collocation optimization, the con member is set to null.
  • facet
    The facet member provides access to the facet for the request.
  • operation
    The operation member contains the name of the operation that is being invoked. Note that the operation name may indicate one of the operations on Ice::Object, such as ice_ping or ice_isA. (ice_isA is invoked if a client performs a checkedCast.)
  • mode
    The mode member contains the invocation mode for the operation (Normal or Idempotent), which influences the retry behavior of the Ice run time.
  • ctx
    The ctx member contains the current request context for the invocation.
  • requestId
    The Ice protocol uses request IDs to associate replies with their corresponding requests. The requestId member provides this ID. For oneway requests (which do not have replies), the request ID is 0.
  • encoding
    The encoding version used to encode the input and output parameters.

If you implement your server such that it uses a separate servant for each Ice object, the contents of Current are not particularly interesting. (You would most likely access Current to read the adapter member, for example, to activate or deactivate a servant.) However, as we will see in our discussion of default servants and servant locators, the Current object is essential for more sophisticated (and more scalable) servant implementations.

See Also