转到 OSGi 控制台 http://host:port/system/console/configMgr
AEM Communities 用户同步停止工作,并且用户不再在发布实例之间进行同步。
原因
用户同步失败的原因可能有多种。最常见的原因包括:
- 配置错误
- 用户在发布实例中进行保存时出现错误
- 由于错误或权限问题,系统无法保存用户包(创作或发布实例)
- 由于缺少用户包,Sling 作业停滞
解决方案
I. 遵循故障诊断指南文档
II. 更新 VaultDistributionPackageBuilderFactory(仅适用于 AEM 6.2)
** 此解决方案仅适用于 AEM 6.2。
更新 socialpubsync-vlt Vault Package Builder Factory 以解决下列各项:
- 将用户同步包存储在非群集实例的文件系统中,以提高稳定性和性能。
- 包含 rep:policy 节点,避免 .token 和 rep:cache 节点与用户同步
- 避免出现错误“无法检索包”[1]
-
-
找到名称字段为 socialpubsync-vlt 的 Apache Sling Distribution Package - Vault Package Builder Factory。
-
选择类型下拉列表,然后选择文件包而非 jcr 包。请仅对非群集实例执行此步骤。
-
在“包过滤器”字段中,添加以下值:
- /home/users|-.*/rep:cache
- /home/users|-.*/.tokens
- /home/users|-.*/rep:policy
注意:在此处添加 rep:cache 可避免出现以下错误:
[... POST /libs/sling/distribution/services/importers/socialpubsync HTTP/1.1] org.apache.jackrabbit.vault.packaging.impl.ZipVaultPackage Error during install.
javax.jcr.nodetype.ConstraintViolationException: OakConstraint0034: Attempt to create or change the system maintained cache.
-
选择 The digest algorithm to calculate the package checksum 下拉列表,然后选择 md5。
-
单击“保存”。
如果您运行的是 AEM 6.2,请为所有创作和发布实例安装累积修复包 3,或联系 AEM 客户关怀团队以请求获取 NPR-13034 的修补程序。如果未安装这些程序,则上述配置将不会起作用。
III. 确保已分发 sling:Folder 节点(仅适用于 AEM 6.2)
** 此解决方案仅适用于 AEM 6.2。
用户同步中的默认配置存在问题,该配置不分发 sling:Folder 节点,例如 social/relationships/following。
-
转到 http://aem-host:port/system/console/configMgr/com.adobe.cq.social.sync.impl.UserSyncListenerImpl,然后以管理员身份登录。
-
将 sling:Folder 添加到节点类型。
IV. 清除用户包
根据您拥有的 Sling Distribution 和 AEM Social Communities 的版本,可能会在 /etc/packages/sling(较旧的版本 - 无修补程序的 AEM6.1)或 /var/sling/distribution/packages(较新的版本 - 带有 AEM Social Communities FP4 或更高版本的 AEM6.1)下创建用户包。
-
转到 http://host:port/crx/explorer/index.jsp
-
以管理员身份登录。
-
浏览到 /etc/packages,然后删除 sling 子文件夹。
-
浏览到 /var/sling/distribution,然后删除 packages 子文件夹。
-
单击“保存”。
如果您已在 Vault Package Builder Factory 配置中将类型字段设置为文件包,则必须清除 temp 文件夹中的包:
-
登录到您的 AEM 服务器。
-
转到 AEM java 进程使用的 temp 目录(这可能由 JVM 参数 -Djava.io.tmpdir 定义)。
-
删除该文件夹中的所有包。以下是可用于 Linux 的命令示例:for i in dstrpck*; do rm $i; done
-
对所有 AEM 实例(发布实例和创作实例)重复此操作。
V. 取消阻止分发队列:
由于您已清除包,因此,请删除所有引用这些包的 Sling 停滞作业。如果 /var/eventing/jobs/unassigned 下的旧作业由于某些错误而未处理,则这些作业可能导致用户同步失败。删除每个 AEM 节点上的旧作业,以取消阻止同步队列:
-
转到 http://host:port/crx/explorer/index.jsp
-
以管理员身份登录。
-
打开内容资源管理器。
-
浏览到 /var/eventing/jobs
-
右键单击 /var/eventing/jobs/unassigned 的第一个子文件夹
-
找到以 org.apache.sling.distribution 开头的子节点
-
右键单击该节点并以递归方式删除。
-
取消选中“初步扫描”复选框。
-
进行删除。
VI. 进一步分析
如果以上步骤均未修复用户同步问题,请为这些 java 包启用调试级别日志记录(创作和发布实例):
-
转到 http://aem-host:port/system/console/slinglog
-
单击“添加新记录器”。
-
设置以下值:
- Log Level -> Debug
- Log File -> logs/usersync.log
- Loggers
- org.apache.sling.distribution
- org.apache.sling.event
- com.adobe.cq.social.sync
-
单击“保存”。
-
联系 AEM 客户关怀团队以获取相关帮助,联系时需提供问题描述并附加日志文件。
[1] 应用 6.2 累积修复包 5 或更高版本后,用户同步出现错误
22.08.2017 12:38:16.044 *ERROR* [sling-default-655-scheduledEventTriggerorg.apache.sling.distribution.agent.impl.TriggerAgentRequestHandler@3b05483d] org.apache.sling.distribution.agent.impl.SimpleDistributionAgent [agent][socialpubsync] cannot retrieve packages org.apache.sling.distribution.common.DistributionException: java.lang.NullPointerException at org.apache.sling.distribution.packaging.impl.FileDistributionPackageBuilder.readPackageInternal(FileDistributionPackageBuilder.java:127) at org.apache.sling.distribution.packaging.impl.AbstractDistributionPackageBuilder.readPackage(AbstractDistributionPackageBuilder.java:111) at org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory.readPackage(VaultDistributionPackageBuilderFactory.java:243) at org.apache.sling.distribution.transport.impl.SimpleHttpDistributionTransport.retrievePackage(SimpleHttpDistributionTransport.java:156) at org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporter.exportPackages(RemoteDistributionPackageExporter.java:82) at org.apache.sling.distribution.agent.impl.SimpleDistributionAgent.exportPackages(SimpleDistributionAgent.java:214) at org.apache.sling.distribution.agent.impl.SimpleDistributionAgent.execute(SimpleDistributionAgent.java:182) at org.apache.sling.distribution.agent.impl.TriggerAgentRequestHandler.handle(TriggerAgentRequestHandler.java:71) at org.apache.sling.distribution.trigger.impl.ScheduledDistributionTrigger$ScheduledDistribution.run(ScheduledDistributionTrigger.java:134) at org.apache.sling.commons.scheduler.impl.QuartzJobExecutor.execute(QuartzJobExecutor.java:118) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NullPointerException: null