Upgrade CFP or SP installation fails with ConstraintViolationException
When upgrading AEM, installing a Service Pack (SP) or a Cumulative Fix Pack (CFP), there is a ConstraintViolationException logged in the error.log.
In the example below, the error was regarding /content/communities node during installation of AEM6.3 SP1 CFP2. That node is normally a sling: Folder but on the environment with the error, the node was nt: folder.
03.04.2018 16:28:09.921 *ERROR* [http-10.158.146.131:25104-2] org.apache.jackrabbit.vault.packaging.impl.ZipVaultPackage Error during install. javax.jcr.nodetype.ConstraintViolationException: OakConstraint0001: /content/communities[[nt:folder]]: No matching definition found for child node enablement with effective type [nt:unstructured, rep:AccessControllable]
In the example below, a similar error broke the upgrade from AEM 6.0 to 6.3. A package installation failed because the nodetype of /libs/settings/granite/operations/maintenance/granite_weekly was nt: folder instead of sling: Folder.
21.09.2017 12:03:18.132 *ERROR* [OsgiInstallerImpl] com.adobe.granite.installer.factory.packages.impl.PackageTransformer Error while processing install task of day/cq60/product:cq-platform-content:1.3.234. org.apache.jackrabbit.vault.packaging.PackageException: javax.jcr.nodetype.ConstraintViolationException: OakConstraint0001: /libs/settings/granite/operations/maintenance/granite_weekly[[nt:folder]]: No matching definition found for child node granite_AuditLogMaintenanceTask with effective type [nt:unstructured]
The cause is from legacy versions of AEM having a different node type for certain folders. When the nodetype changes in future versions, this error is encountered and breaks upgrades and/or patch installations.
Follow the steps below before applying the upgrade or fix pack. Make sure that no users are on the system.
- Go to http://aem-host:port/crx/de/index.jsp and log in as admin user.
- Browse to the node causing the error. For example, in the error above, this is /content/communities.
- Rename that node, for example, /content/communities to /content/communities-old.
- Create a node with the correct nodetype. For example, /content/communities with nodetype sling: Folder instead of nt: folder.
- Click Save All.
- Move all subnodes of the old node to the newer one that has the correct nodetype. For example, move all subnodes of /content/communities-old to /content/communities.
- Click Save All.