| <body> |
| Defines the API for the monitoring and steering system. As data flows |
| through a workflow it passes through a succession of bounds of control. |
| Each of these boundaries corresponds to a workflow, a nested process or |
| some other contained entity where a new owning process identifier is |
| pushed onto the process identifier stack for that data item. This |
| modification to the owning process identifier implicitly creates a tree |
| structure where the parent of a particular identifier can be obtained by |
| popping the last component off its identifier stack (in general this |
| means splitting into a list by the ':' character and removing the last |
| item). |
| <p>Any entity issuing a new identifier to data in this way must |
| implement the Monitorable interface and should register itself with the |
| Monitor before or at the point of assigning this new identifier. Some |
| cases may register child items rather than delegating to the children |
| themselves, for example a workflow definition may register all its |
| processors as children and deregister on workflow completion rather than |
| the process happening for each processor but however it is accomplished |
| the result is the creation within the Monitor of a tree where nodes |
| contain references to Monitorable objects within the workflow |
| definition. |
| <p>The Monitorable interface defines a simple contract - once |
| registered the implementing class can return a list of |
| MonitorableProperty instances defining the exposed dynamic state at this |
| node in the context of a given process identifier. Any of these |
| properties may be mutable in which case they will extend |
| SteerableProperty, a sub-interface of MonitorableProperty which allows |
| for the mutation of the property. |
| <p>By design the Monitor is rather powerful - it has the ability to |
| modify steerable properties in any running workflow. It is obviously |
| desirable to restrict this, passing any given monitoring or steering |
| agent a restricted subset of the monitor tree rooted at a specific |
| process identifier and preventing direct access to the Monitor class. |
| The Monitor interface defines methods to expose subsets of the |
| monitorable state for this reason. |
| </body> |