The Pipeline Manager controls a series of processors, which make up a processor chain. Each processor in the processor chain is a component that performs a specific function and returns a status code. The status code can determine which processor to execute next. You can imagine a tree structure of processor chains as below:

The processors in the processor chain illustrated above would be executed from left to right. Notice that chains are allowed to split and merge together.

For a more concrete example, suppose you have a commerce site. It might include a processor chain that is invoked when users add an item to their shopping cart. This Add to Cart chain might contain the following elements in the given order: InventoryCheck, InventoryReserve, FraudDetection, and AddToOrder.

If there was already an existing transaction, when it reaches the Pipeline Manager, it will simply use that transaction for executing the pipeline. If a transaction had not been created, then the Pipeline Manager creates a new one. Next, it calls each processor in sequence from InventoryCheck to AddToOrder without altering the transaction in any way.

An element in a processor chain can specify that it should be executed in the context of its own transaction. For example, the InventoryReserve processor uses its own transaction to access the inventory. When the request reaches InventoryReserve, the Pipeline Manager suspends the current transaction, which would be the one that was passed to the pipeline manager, creates a new transaction, and executes the code for InventoryReserve.

When the InventoryReserve processor completes execution of its transaction, then the Pipeline Manager either commits or rolls back the InventoryReserve transaction, and then resumes the original transaction before it executes the FraudDetection processor.