blob: 17ee5724d75daf413135d5c65e7bf4dc1a28892f [file] [log] [blame]
<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>