Inclusive Gateway (OR)
Fork: Activates all outgoing paths whose condition evaluates to true.
Join: Waits for the number of branches actually activated at the corresponding fork.
<inclusiveGateway id="routeOrder" />
<sequenceFlow sourceRef="routeOrder" targetRef="sendEmail">
<conditionExpression>${notifyByEmail} == true</conditionExpression>
</sequenceFlow>
<sequenceFlow sourceRef="routeOrder" targetRef="sendSms">
<conditionExpression>${notifyBySms} == true</conditionExpression>
</sequenceFlow>
<sequenceFlow sourceRef="routeOrder" targetRef="skipNotification" />Fork behavior
- For each outgoing flow with a condition: advance if condition is
true - For each outgoing flow without a condition: always advance
- If no flows matched: take the default flow (if configured)
- The engine records
activatedCountfor each downstream inclusive join it can reach via a 2-hop trace (fork → task → join), so the join knows how many tokens to wait for
Join behavior
The inclusive join waits for arrivals >= activatedCount (the count stored at fork time), then advances and clears both counters.
Key difference from parallel join: A parallel join always waits for a fixed number of branches (the number of incoming arcs). An inclusive join adapts to how many branches were actually activated.
Last updated on