自AEM Communities6.1起,社区内容(通常称为用户生成内容(UGC))存储在由存储资源提供商(SRP)提供的单个公共存储中。
有几个SRP选项,所有选项都通过新的AEM Communities接口SocialResourceProvider API(SRP API)访问UGC,该接口包括所有创建、读取、更新和删除(CRUD)操作。
所有SCF组件都使用SRP API实现,允许在不了解基础拓扑或UGC位置的情况下开发代码。
SocialResourceProvider API仅对AEM Communities的许可客户可用。
自定义组件:对于AEM Communities的许可客户,SRP API可供自定义组件的开发人员使用,以便访问UGC而不考虑底层拓扑。请参阅SRP和UGC Essentials。
另请参阅:
要了解SRP,了解AEM存储库(OAK)在AEM社区站点中的角色将很有帮助。
Java内容存储库(JCR)此标
准为内容存储库定义了数据模型和应用程序编程接口(JCR API)。它将传统文件系统的特性与关系数据库的特性相结合,并添加了内容应用程序经常需要的许多附加功能。
JCR的一个实施是AEM存储库OAK。
Apache Jackrabbit Oak(OAK)
OAK是JCR 2.0的一个实现,该数据存储系统专门为以内容为中心的应用程序设计。它是为非结构化和半结构化数据设计的一种分层数据库。 存储库不仅存储面向用户的内容,还存储应用程序使用的所有代码、模板和内部数据。 访问内容的UI是CRXDE Lite。
JCR和OAK通常都用于引用AEM存储库。
在专用作者环境中开发站点内容后,必须将其复制到公共发布环境。 这通常通过名为replication的操作来完成。 这在作者/开发人员/管理员的控制下发生。
对于UGC,内容由注册站点访客(社区成员)在公共发布环境中输入。 这是随机发生的。
出于管理和报告目的,从私人作者环境访问UGC非常有用。 通过SRP,作者对UGC的访问更加一致,而且性能也不需要从发布到作者的反向复制。
将UGC保存到共享存储后,会有一个成员内容实例,在大多数部署中,该实例可以从作者和发布环境访问。 无论SRP选择如何(MSRP、ASRP、JSRP),都必须通过SRP API以编程方式访问。
有关示例代码和其他详细信息,请参阅SRP和UGC Essentials。
有关编码时的最佳实践,请参阅使用SRP访问UGC。
对于ASRP,UGC不存储在JCR中,它存储在由Adobe托管和管理的云服务中。 存储在ASRP中的UGC既不能通过CRXDE Lite查看,也不能使用JCR API访问。
开发人员无法直接访问UGC。
ASRP使用Adobe云为查询。
对于MSRP,UGC不存储在JCR中,它存储在MongoDB中。 存储在MSRP中的UGC不能通过CRXDE Lite查看,也不能使用JCR API访问。
MSRP与ASRP类似,因为所有AEM服务器实例都在访问同一UGC,因此可以使用通用工具直接访问存储在MongoDB中的UGC。
MSRP使用Solr查询。
JSRP是访问单个AEM实例上的所有UGC的默认提供程序。 它提供快速体验AEM Communities6.1的能力,无需设置管理系统更新项目或ASRP。
对于JSRP,虽然UGC存储在JCR中,并可通过CRXDE Lite和JCR API访问,但强烈建议不要使用JCR API进行访问,否则将来的更改可能会影响自定义代码。
此外,不共享创作和发布环境的存储库。 虽然发布实例群集导致共享发布存储库,但发布时输入的UGC在作者中不可见,因此无法从作者管理UGC。 UGC仅保留在输入UGC的实例的AEM存储库(JCR)中。
JSRP使用查询的Oak索引。
模仿UGC路径的阴影节点存在于本地存储库中,用于两个用途:
无论SRP实施如何,实际UGC *不会在与阴影节点相同的位置显示。
某些SRP实现(如ASRP和MSRP)将社区内容存储在不提供ACL验证的数据库中。 卷影节点在可应用ACL的本地存储库中提供一个位置。
使用SRP API,所有SRP选项在执行所有CRUD操作之前对阴影位置执行相同的检查。
ACL检查使用一种实用程序方法,该方法返回一条路径,用于检查应用于资源UGC的权限。
有关示例代码,请参见SRP和UGC Essentials。
某些社区组件可包含在脚本中,因此需要Sling可寻址节点来支持社区功能。 包 含的组件称为非现有资源(NER)。
卷影节点在存储库中提供Sling可寻址位置。
由于阴影节点具有多种用途,因此存在阴影节点表示组件是NER。**
以下是使用Community Components Guide中的Comments组件的卷影节点示例:
此组件存在于本地存储库中:
/content/community-components/cn/comments/jcr:content/content/includable/comments
相应的卷影节点存在于本地存储库中:
/content/usergenerated/content/community-components/cn/comments/jcr:content/content/includable/comments
在阴影节点下找不到UGC。
默认行为是在引用相关子树进行读或写时,在发布实例上设置卷影节点。
例如,假定部署为MSRP,并带有TarMK发布场。
当成员在pub1上发布UGC(存储在MongoDB中)时,在pub1上的JCR中创建阴影节点。
首次在pub2上读取UGC时,如果未设置任何内容,则默认行为是创建阴影节点。
如果不需要默认行为,则必须在作者实例上设置它并转发到所有发布实例,这通常是一个手动过程。