javax.jcr.nodetype.ConstraintViolationException:在AEM中迁移用户和组时出现OakConstraint0027错误
打包用户和组时,请确保避免打包现成的用户包括管理员和匿名用户。 您必须使用合并包过滤器模式。
描述 description
环境
Adobe Experience Manager 6.x (AEM 6.x)
Adobe公报5.x (Adobe CQ5.x)
问题
通过包管理器将用户和组从一个AEM实例迁移到另一个实例时,您会收到类似于以下内容的错误:
26.01.2017 16:03:20.024 *ERROR* [ qtp2078058939-7783] org.apache.jackrabbit.vault.fs.io.Importer Error while committing : javax.jcr.nodetype.ConstraintViolationException: OakConstraint0027: The admin user cannot be removed.
javax.jcr.nodetype.ConstraintViolationException: OakConstraint0027: The admin user cannot be removed.
Caused by: org.apache.jackrabbit.oak.api.CommitFailedException: OakConstraint0027: The admin user cannot be removed
解决方法 resolution
打包用户和组时,您应确保避免打包现成的用户包括管理员和匿名用户。
您必须使用合并包过滤器模式。
按照以下步骤解决此问题:
-
前往 CRXDE lite 应用程序
/crx/de/index.jsp并以管理员用户身份登录(在旧系统上)。 -
转到 工具
>查询。 -
在底部的 查询 框中,输入此查询以查找管理员用户:
code language-none /jcr:root/home/users//element(*,rep:User)[ @rep:principalName="admin"] -
单击 执行,并将结果中管理员用户节点的路径复制到文本文件中。
-
对匿名用户的查询重复 步骤3 :
code language-none /jcr:root/home/users//element(*,rep:User)[ @rep:principalName="anonymous"] -
单击 执行,并将结果中的匿名用户节点的路径复制到一个文本文件中(所以现在您应该有两个路径,一个用于“管理员”,一个用于“匿名”)。
例如:
/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv— 正在创建包的系统上的管理员用户/home/users/K/Kj1406Qo9IDODc_nk5Ib— 您正在创建包的系统上的匿名用户 -
转到AEM包管理器
http://host:port/crx/packmgr/index.jsp,并以 管理员 身份登录。 -
创建名为 用户 的包。
-
使用这些排除规则(在
/home/users过滤器中)将过滤器添加到/home/users的包配置中:code language-none exclude /home/users/.*/.tokens exclude /home/users/Q/QY5FIMXeQIbGpwZtQ3Dv exclude /home/users/K/Kj1406Qo9IDODc_nk5Ib exclude /home/users/a/admin exclude /home/users/a/anonymous exclude /home/users/system exclude /home/users/geometrixx exclude /home/users/media exclude /home/users/projects exclude /home/users/mac -
构建包。
-
下载包。
-
在您的计算机上解压缩
package.zip文件。 -
在文本编辑器中打开
META-INF/vault/filter.xml文件。 -
将
mode="merge"添加到标记。例如:
code language-none <?xml version="1.0" encoding="UTF-8"?> <workspaceFilter version="1.0"> <filter root="/home/users" mode="merge"> <exclude pattern="/home/users/.*/.tokens"/> <exclude pattern="/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv"/> <exclude pattern="/home/users/K/Kj1406Qo9IDODc_nk5Ib"/> <exclude pattern="/home/users/a/admin"/> <exclude pattern="/home/users/a/anonymous"/> <exclude pattern="/home/users/system"/> <exclude pattern="/home/users/geometrixx"/> <exclude pattern="/home/users/media"/> <exclude pattern="/home/users/projects"/> <exclude pattern="/home/users/mac"/> </filter> </workspaceFilter> -
重新压缩修改后的包内容,使其包含更改。
-
创建包含筛选规则
/home/groups的 组 包。 -
对 组 程序包重复执行 步骤10-15。
-
(仅升级):如果执行迁移到较新的AEM版本,请安装新的本地AEM实例(带有
nosamplecontent),并在该处安装用户包和组包。 然后,对该实例执行就地升级。 升级后,再次重新打包用户,然后再次打包组,并下载较新版本的包。 -
在新系统上安装用户包。
-
在新系统上安装组包。