Clockwork and Projector are two sophisticated component that work together to compute the changes to objects that midPoint manages and to control the execution of these changes. These two components form a "brain" of the midPoint.

TODO: picture

Projector

Projector is responsible for computing the changes. It is triggered by user changes in GUI, received by service or detected by synchronization. Projector recomputes all the synchronization policies, applies all mappings and expressions, processes RBAC role assignments and so on. However, projector is just computing the values. It is not yet executing them. The result of projector computations are stored in model context.

Projector distinguished objects into two categories: Focus and Projections

Clockwork

Clockwork is a controller. Clockwork invokes projector to recompute everything that needs to be recomputed. Clockwork invokes hooks to further process the request (e.g. to route it through a workflow). This happens several times. Clockwork then proceeds to execute the changes. This may also happen several times if dependencies are used. Clockwork handles execution errors. And at the end of execution it once again invokes hooks (e.g. to handle notifications).

Clockwork States

The clockwork process goes through several stages:

TODO

TODO: more details

See Also