Discussions on our dev list and with my colleagues around
SLING-5355 (the ACL definition language) show that we need to initialize a number of things when starting on a new or existing content repository:
- Create the "base tree", paths like /libs, /apps, /var that many modules use and sometimes compete to create.
- Create service users
- Set ACLs on the base tree for those service users
- And maybe setup some JCR-specific things like node types and custom privileges, that other content repositories would ignore.
I'll create a more general module than what I created for
SLING-5355 (which hasn't been released) to cover those things, and put it under commons/repoinit as it shouldn't have any dependencies on Sling. We might donate it to Jackrabbit once it matures but for now my goal is to implement the whole cycle inside Sling as it's the primary customer of that.
The JCR-specific APIs should only use a JCR Session as a handle to the content repository, to keep this independent of Sling and allow it to be used in other contexts like tests.
Edit: changed the path from commons/jcrinit to commons/repoinit, even if some parts are specific to JCR the repoinit language will be mostly generic