| <body> |
| Definition and support classes for the Dispatch Stack. Each processor in |
| a workflow contains a stack of dispatch layers with each layer being |
| responsible for a particular aspect of the invocation. At a high level |
| the stack consumes a queue of events from the iteration system along |
| with an initial set of service proxy objects and is repsonsible for |
| taking jobs from the queue and matching them to appropriate invocation |
| targets. |
| <p>Taverna 1 has in effect a single hardcoded dispatch stack for |
| each processor with little control over it aside from a few basic |
| properties. To replicate the same behaviour within Taverna 2 there are |
| dispatch layers for parallelism, retry, failover and invocation. As the |
| dispatch layer is an extension point we or others can provide other |
| aspects such as recursive invocation and dynamic (runtime) binding from |
| abstract service proxies to concrete instances. The last is possible |
| because the service list is passed through the stack along with the |
| queue or individual job events and can be rewritten or filtered by |
| dispatch layer implementations. |
| </body> |