You might want to try to make use of a cancel end event within an embedded transactional subprocess. I never used that feature personally, though. See:
http://www.activiti.org/userguide/#bpmnCancelEndEvent http://www.activiti.org/userguide/#bpmnBoundaryCancelEvent
What I have in mind is something like:
Outer StartEvent -> Transactional Subprocess Border -> Inner StartEvent -> ParallelGateway (fork) -> {FlowA, FlowB, FlowC} -> XorGateway (join) -> Inner Cancelling EndEvent -> Transactional Subprocess Border with Boundary Cancel Event attached -> Outer EndEvent (with sequence flow coming from Cancel Boundary Event)
The XOR join will cause the first token to arrive at the cancel end event and therefore to cancel the whole transaction. Obviously this is actually a bit of a "misuse" of the construct of "canceling", because the flow will here ALWAYS cancel the transaction, and not just as an "exception to the rule".
(A "terminate end event" instead of the cancelling end event would be a much better fit from a BPMN perspective. Such an end event actually just terminates the subprocess scope the end event is placed inside. In that case the flow could continue without a Boundary Cancel event attached. However, I am unsure whether Activiti at the moment supports this feature, at least I do not find it in the docs...!)