Pokud chceme na WSO2 provádět paralelní zpracování, lze k tomu, v závislosti na naší potřebě, využít jednoho z dvou mediátorů: clone a iterate. Oba mediátory obsahují element target, který má v obou případech shodnou implementaci třídou org.apache.synapse.mediators.eip.Target. Z tohoto důvodu také oba mediátory umožňují použít shodné elementy sequential (pomiňme nyní, že v dokumentaci mediatoru clone není uveden) a continueParent.
Atribut sequential uvádí, zda mají být jednotlivé targety zpracovávány sekvenčně. Pokud však použijete sequential="false" (defaultní hodnota) jsou mediatory v targetu spouštěny nečekaně pod carbon.super tenantem. To může způsobit nemožnost volání endpointů, protože k nim carbon.super tenant nemusí být subscribnutý (subscribnout carbon.super v multitenantním prostředí není dobrý nápad) nebo nevlastní patřičný autentizační token.
Atribut continueParent určuje, zda má být zachován původní payload. Další, pro nás klíčovou, vlastností použití tohoto atributu je i zpracování mediatoru bez čekání na jeho výsledek. Více uvedeno v Example 2.
Předpokládejme, že jsme chtěli paralelně volat dvě sekvence (obsahujících např. volání endpointů):
<clone sequential="false">
<target>
<sequence key="firstSequence"/>
</target>
<target>
<sequence key="secondSequence"/>
</target>
</clone>
Z důvodu uvedeného výše to však v multitenantním prostředí není možné. Požadovanou funkci ale bude mít následující řešení:
<clone sequential="true" continueParent="true">
<target>
<sequence key="firstSequence"/>
</target>
</clone>
<sequence key="secondSequence"/>
Pokud budeme chtít takto paralelně volat více sekvencí, je tedy třeba každou umístit do vlastního clone.
Pokud má být sekvence v clone volána způsobem fire-and-forget, pak je třeba na konec clone umístit mediator <drop/> - jinak by následující flow bylo voláno vícenásobně (z každého clone znovu).