Parallel and Asynchronous Provisioning
Parallel Provisioning
Main ideas:
-
Parallel provisioning is implemented using task and its subtasks. Each subtask for one thread of provisioning.
-
ModelContext is stored in the parent task only. Subtasks can only read this context. (Note: if using heavyweight, quartz-scheduled tasks, how will this context be accessed?)
-
After finishing a subtask, the parent will read its result.
-
In the future, there will be lightweight subtasks - not in repo, executing in threads not managed by quartz.
Asynchronous Provisioning
Main ideas:
-
New kind of task handler - "AsyncProvisioningHandler" - will be created.
-
It will be used to
-
wait for finishing operation in external system,
-
and then returning control to provisioning module (the module then finishes the operation, so that model can get the result - TODO how to design this?)
-
Notification mails:
-
"account creation is in progress"
-
"operation is in progress" - i.e. if something changes, join-handler sends notification (or, there will be notifications done via nightly-run reporting task)
Communication with external systems:
-
original idea: via specific driver,
-
but perhaps we will do that through activiti
Parallel provisioning should be ready in 2.2 (asynchronous provisioning later).