Last year with the help of Syncope team I proposed an early reformulation of provisioning phase. Provisioning refers to methods used to provide users and roles functionality: the main goal of my proposal was to re-organize this phase, allowing custom provisioning behaviours through a definition of a provisioning manager (see here  more details).
The current strategy adopted in Syncope makes difficult the definition of custom provisioning behaviour. The solution enclosed with this issue aim to decompose the provisioning phase. Previously the user/role controller deals directly with provisioning, while now with this proposal both the controller delegates this task to provisioning manager.
A first task was to move all provisioning functionality into the provisioning manager. If you now inspect the user/role controller code, you will not find anymore workflow and propagation dependencies.
During the development, we thought to make the provisioning pluggable, in order to allow the choice of provisioning engine. The default provisioning engine can be choosed editing the provisioning.properties file. For this reason we hardcoded previous strategies as default provisioning manager, in order to keep the standard Syncope behaviour. As we proposed initially, we wanted also to experiment a provisionig manager based on a Apache Camel. Camel is a powerful integration framework implementing enterprise integration pattern. Our current solution embeds the provisioning logics into camel routes.
Moreover the current solution extends also Syncope Console: we added new a new functionality - related to Camel case - that allows to read and edit routes definitions. You can find this new service under the Console->Configuration->Routes section. In this case, routes are expressed through Spring DSL.
To finish, I thought to create a github pull request ,in order to give to Syncope Team members to examine this work and possibly integrate it.