|










| |
Pattern 12 [Multiple Instances Without Synchronization]
FLASH Animation of pattern
Description Within the context of a single
case (i.e., workflow instance) multiple instances of an activity can be created,
i.e., there is a facility to spawn off new threads of control. Each of these
threads of control is independent of other threads. Moreover, there is no need
to synchronize these threads.
Synonyms Multi threading without synchronization, Spawn off
facility
Examples
-
- A customer ordering a book from an electronic bookstore such as Amazon may
order multiple books at the same time. Many of the activities (e.g., billing,
updating customer records, etc.) occur at the level of the order. However,
within the order multiple instances need to be created to handle the
activities related to one individual book (e.g., update stock levels, shipment,
etc.). If the activities at the book level do not need to be synchronized,
this pattern can be used.
Implementation
-
- The most straightforward implementation of this pattern is through the use
of the loop and the parallel split construct as long as the workflow engine
supports the use of parallel splits without corresponding joins and allows
triggering of activities that are already active. This is possible in
languages such as Forté and Verve.
-
- Some workflow languages support an extra construct that enables the
designer to create a subprocess or a subflow that will "spawn-off" from the
main process and will be executed concurrently. For example, Visual WorkFlo
supports the Release construct while I-Flow supports the Chained Process Node.
COSA has a similar facility, one workflow may contain multiple concurrent
flows that are created through an API and share information.
-
- In most workflow management systems the possibility exists to create new
instances of a workflow process through some API. This allows for the creation
of new instances by calling the proper method from activities inside the main
flow. Note that this mechanism works. However, the system maintains no
relation between the main flow and the instances that are spawned off.
| |
|