Also, a server might want to provide different kinds of accesses for different clients depending on their mutual trust. These different remote access attributes can be encapsulated under the umbrella of remote access capabilities . It uses the principle of Open Implementation to let its applications control its critical remote access decisions without getting them involved in the details of the communication mechanism. Using this principle, it supports multiple, possibly custom, communication protocols, as well as automatic run-time protocol selection, with optional user control over the selection process. An extension of the same mechanism is used to implement the concept of capabilities.
Different clients can use different capabilities to access the same server object.
Capabilities can be passed around via remote method invocation arguments and return values. At run-time, a client can replace its set of capabilities with another available set, to get different kinds of access privileges for the same server object. The ORB can also dynamically switch between a set of capabilities to let the communicating components better utilize their run-time environment. The capabilities based model works in tandem with the load-balancing mechanisms. When a server object migrates to a new location, the capabilities based model ensures that the client always connects to the server object with the most suitable set of capabilities.