Keywords: doc

Next: Example Up: POA Previous: Architecture

## Policies

We have already mentioned the policies that control various aspects of POA behaviour. POA policies do not change over the POA's lifetime. When creating a new POA as a child of an existing POA, policies are not inherited from the parent, but instead each POA is assigned a set of default policies if not explicitely defined.

Thread Policy
  `ORB_CTRL_MODEL`
    (default)
    Invocations are performed as scheduled by the ORB. Potentially, many upcalls are perfomed simultaneously.
  `SINGLE_THREAD_MODEL`
    Invocations are serialized. At most a single upcall is performed at any time.

  Non-reentrant servants should only be activated in POAs with the `SINGLE_THREAD_MODEL` policy.

  As the current version of MICO is not multithreaded, this policy is not yet evaluated.

Lifespan Policy
  `TRANSIENT`
    (default)
    Objects activated in this POA cannot outlive the server process.
  `PERSISTENT`
    Objects can outlive the server process

Id Uniqueness Policy
  `UNIQUE_ID`
    (default)
    Servants can be activated at most once in this POA.
  `MULTIPLE_ID`
    Servants can be activated more than once in this POA and can therefore serve more than one object reference.

Id Assignment Policy
  `SYSTEM_ID`
    (default)
    Object Ids are assigned by the POA upon object activation.
  `USER_ID`
    Upon activation, each servant must be provided with a unique Id by the user.

Servant Retention Policy
  `RETAIN`
    (default)
    The POA maintains a map of active servants (the Active Object Map).
  `NON_RETAIN`
    The POA does not maintain an Active Object Map.

Request Processing Policy
  `USE_ACTIVE_OBJECT_MAP_ONLY`
    (default)
    To process an incoming request, the object reference is looked up in the Active Object Map only. If no active servant serving the reference is found, the request is rejected, and an `OBJECT_NOT_EXIST` exception is returned.
  `USE_DEFAULT_SERVANT`
    The object reference is looked up in the Active Object Map first. If no active servant is found to serve the reference, the request is delegated to a default servant.
  `USE_SERVANT_MANAGER`
    The object reference is looked up in the Active Object Map first. If no active servant is found to serve the reference, a servant manager is invoked to locate or incarnate an appropriate servant.

Implicit Activation Policy
  `IMPLICIT_ACTIVATION`
    If an inactive servant is used in a context that requires the servant to be active, the servant is implicitely activated.
  `NO_IMPLICIT_ACTIVATION`
    (default)
    It is an error to use an inactive servant in a context that requires an active servant.

The Root POA has the `ORB_CTRL_MODEL`, `TRANSIENT`, `UNIQUE_ID`, `SYSTEM_ID`, `RETAIN`, `USE_ACTIVE_OBJECT_MAP_ONLY` and `IMPLICIT_ACTIVATION` policies.

Next: Example Up: POA Previous: Architecture