This is a development item for v5.
This effort is intended to use best practices from the provisioning framework in the data providers.
- Have an overall class (similar to GrouperProvisioner)
Have some base classes for responsibilities and allow the data providers to override them
private GrouperProvisioningConfiguration grouperProvisioningConfiguration = null; /** * return the class of the DAO for this provisioner */ protected abstract Class<? extends GrouperProvisioningConfiguration> grouperProvisioningConfigurationClass(); /** * returns the subclass of Data Access Object for this provisioner * @return the DAO */ public GrouperProvisioningConfiguration retrieveGrouperProvisioningConfiguration() { if (this.grouperProvisioningConfiguration == null) { Class<? extends GrouperProvisioningConfiguration> grouperProvisioningConfigurationClass = this.grouperProvisioningConfigurationClass(); this.grouperProvisioningConfiguration = GrouperUtil.newInstance(grouperProvisioningConfigurationClass); this.grouperProvisioningConfiguration.setGrouperProvisioner(this); } return this.grouperProvisioningConfiguration; }
- Make configuration class for sql and ldap and a generic configuration class (superclass)
- Note, we do not need capabilities and behaviors at this time since there will be a lot fewer data providers than provisioners
- Have a logic class (subclassable) that has a full and incremental method (similar to provisioning), and each will list methods in the workflow (e.g. retrieve from source, target, compare, make changes, etc). If there are opportunities for re-use do that
- Have fields for gcGrouperSync, job, heartbeat, etc (if not already there)
- Have a bean similar to GrouperProvisioningData which keeps all the data. That could be indexed or there could be something similar to GrouperProvisioningDataIndex
- Have something similar to a DAO which runs operations to the target (CRUD)
- Have something similar to GrouperProvisioningObjectLog(Type) which can optionally print out a report of a run
- Integrate with grouper messaging (similar to provisioning incremental) so that certain records can be refreshed
- Integrate with other types of messaging optionally?
- Integrate with SQL change log (for any type of target?)
- Assume everything is a "recalc" (could be recalc for user or recalc for user with a field/row)
- Filter messages or change log for events that happened before the start of the last successful full sync
- Convert from incremental to full for certain thresholds
- Is incremental at the attribute level so not all queries need to run?
- Batch incremental queries
- Add in failsafes like provisioning
- Attribute changes should go to the temp/real change log (so it can be used by abac, etc).