all AbstractActionPipelineProcessors must be "reentrant" in the way that
multiple message on the same service go through the same instance of
However, if you have an AbstractActionPipelineProcessors used in two
different services, that will be two different instances.
That's why it's ok to store the ConfigTree as a member variable, but not
any information related to a specific message being processed.
There are two 'types' of instantiation for the processors, depending on how they are written.
The original pipeline code in the ESB created a new instance of each action per message and invoked the process methods via reflection. In order to speed this up, while supporting existing pipelines, we added new interfaces (ActionLifecycle and its sub-interfaces) which are only instantiated once per pipeline.
The actions implementing the new interfaces need to be thread safe, as they will be invoked concurrently.