Composed attributes are generated when an entry is written. This includes entries that are created by add operations and LDIF imports; these may also be created, updated, or removed when processing modify and modify DN operations. The server may optionally permit or reject attempts to alter the generated values.

Composed values are based solely on a combination of static text and the contents of the entry in which the value is to be generated. It is not possible to construct values using content from other entries in the server, as the necessary content may not be available at the time the value is to be generated (for example, if the referenced entry does not yet exist), and it would also be difficult to ensure that the valuet is kept up to date whenever the referenced entry changes or is removed. Values are generated using the same logic that is available for constructed virtual attributes, as well as for constructed attribute mapping functionality in the Synchronization Server.

The composed attribute functionality is implemented using a plugin. The plugin is invoked during the pre-operation phases for add, modify, and modify DN operations, and it also operatse during LDIF import.

The server also provides an administrative task that can be used to iterate through all entries in a backend and generate values as necessary. This is useful when a new composed attribute plugin instance is created after the backend has already been populated and you do not wish to export the data to LDIF and re-import.

The server does not provide any first-class extensibility mechanisms for composed attributes. Unlike virtual attributes, which can be created through the Server SDK, composed attribute support is intentionally limited to what can be provided by the server. You can implement your own plugins to generate your own data if necessary.