如何使用AEM 6.2中的代码将名称空间从作者同步到发布

时间:2017-02-01 15:32:38

标签: cq5 aem

在激活某些文档到发布服务器时,它会卡在复制队列中。通过检查日志发现发布服务器中缺少某些命名空间。通过crx / explorer添加命名空间后,通过。(必须在两个服务器上都有命名空间,否则复制将失败。)

如果某个随机文档(特别是PDF)缺少命名空间,那么复制就会卡住/失败。

在Oak之前(AEM 6.0),要将命名空间从作者同步到发布,可以从作者创建包并上传到发布服务器。但是,在6.0之后,不允许上传包名称空间。 有没有办法将作者的名称空间与AEM 6+的发布名称空间同步?

1 个答案:

答案 0 :(得分:1)

  

有没有办法将作者的命名空间与AEM 6+的发布命名空​​间同步?

TL; DR

是,Replication支持CQ 5.x和AEM 6.x的OOTB。确保为安装复制包的用户授予了存储库级jcr:namespaceManagement权限,该权限允许管理名称空间。

长版

是的,有两种方法。让复制自动创建所需的命名空间或预先安装命名空间。

复制自动创建所需的命名空间

命名空间隐含在Durbo复制包中。作为安装Durbo软件包的一部分,复制会在目标实例中自动创建缺少的名称空间。这是CQ 5.x和AEM 6.x的OOTB行为。

安装Durbo软件包的用户必须具有足够的权限才能创建缺少的名称空间。可以通过Replication > Transport > User中记录的配置来定义此用户。此用户需要被授予命名空间管理权限。

授予命名空间管理权限

您可以使用CRX / DE授予存储库级权限。

  1. 以管理员身份登录CRX / DE
  2. 单击“访问控制”选项卡
  3. 点击存储库
  4. 添加访问控制条目
  5. enter image description here

    1. 设置要授予权限的用户名称
    2. 检查jcr:namespaceManagement权限
    3. 点击OK
    4. enter image description here

      配置错误的症状

      阻止复制队列,并记录类似于以下内容的堆栈跟踪

      Caused by: javax.jcr.AccessDeniedException: Failed to register namespace mapping test1 -> http://localhost/test/1.0
          at org.apache.jackrabbit.oak.api.CommitFailedException.asRepositoryException(CommitFailedException.java:231)
          ...
          at com.day.cq.replication.impl.content.durbo.DurboImporter.createNode(DurboImporter.java:286)
          ... 108 common frames omitted
      Caused by: org.apache.jackrabbit.oak.api.CommitFailedException: OakAccess0000: Access denied
          at org.apache.jackrabbit.oak.security.authorization.permission.PermissionValidator.checkPermissions(PermissionValidator.java:242)
          ...
          at org.apache.jackrabbit.oak.plugins.name.ReadWriteNamespaceRegistry.registerNamespace(ReadWriteNamespaceRegistry.java:94)
          ... 113 common frames omitted
      

      这清楚地表明复制用户缺少jcr:namespaceManagement权限。

      手动同步名称空间

      这适用于CQ 5.x和AEM 6.x并利用包管理器。

      要传输新命名空间,您需要使用包管理器在源实例上创建新的内容包。该软件包需要包括:

      1. 具有引用新命名空间的属性的节点
      2. 包含命名空间定义的.cnd文件
      3. 然后,您需要下载内容包并将其安装在目标实例中,同时使用被授予存储库级别jcr:namespaceManagement权限的用户登录。