贡献AEM

开发方法

AEM是按照在大型开放源项目中经常采用的行之有效的方法开发的。 事实上,AEM技术堆栈中的许多核心元素都作为主动的开放源项目进行维护,如Sling和Jackrabbit,这些项目为Apache Software Foundation做出了贡献。 AEM中体现的这一精神的一个重要方面是鼓励您利用现有的邮寄列表和在线论坛与开发团队直接互动。

如果您向AEM的组件提供信息,您应像向开放源项目提供信息一样熟悉AEM,并像向此类项目提供信息一样与现有核心团队进行沟通。

所需体验

超文本传输协议(HTTP)是我们所做的一切的核心。 因此,在向AEM提供服务之前,您应该对HTTP有深入的了解,最好能够编写具有线程池的多线程HTTP服务器的Java实现。 您还应了解HTTP/1.1保持活动的行为,并应深入了解服务器/客户端与JavaScript的交互,特别是AJAX表示的异步交互风格。

由于页面动态性和交互式内容是WM体验的关键,因此您必须对文档对象模型及其在响应事件时进行程序化操作的潜力有相当深入的了解。 您应当了解一些知识,例如,在多个浏览器文档(例如,使用iframe)上实时进行DOM操作和拖放行为。

那么,在最高层面,您应该对以下问题有深入的了解:

  • HTTP/1.1协议
  • HTML(最好HTML5
  • 层叠样式表
  • 可扩展标记语言(XML)
  • 异步JavaScript和XML(AJAX)设计模式
  • JavaScript对象表示法(JSON)
  • 文档对象模型
  • 状态与无状态交互
  • 统一资源标识符
  • 浏览器cookie
  • 和其他现代Web开发概念

Adobe Experience Manager的技术栈基于Apache Felix OSGI容器和Apache Sling网络框架,并嵌入基于Apache Jackrabbit的Java内容库(JCR)。 您应熟悉这些单个项目,以及您要贡献的区域中使用的任何其他开放源代码组件(如Apache Lucene)。

部落知识

某些概念和指导原则深深地植根于前日文化中。 本节列表了您应该注意的一些“深层嵌入DNA”的问题。

所有内容

内容不仅包括Web应用程序持续存在的所有数据。 项目代码、库、脚本、模板、HTML、CSS、图像以及各种、任何内容和一切的伪像会保留在内容存储库中,并通过包管理器和包共享以包的形式导入/导出。

David's Model

在Java内容存储库中建立内容模型的方式需要一种完全不同于软件行业在关系世界中建立数据模型的惯例的思维方式。 内容管理JCR方式对任何新来者而言,基本阅读内容是David的模型:内容建模指南

RESTnive

REST方针深深地植根于我们的工作。 这意味着,除其他外,避免有状态的交互,并记住URI是内容和服务的确定地址。

REST(REpresentational State Transfer)是指World Wide Web所基于的软件体系结构风格。 它描述了使Web工作的关键元素,因此为如何设计基于Web的软件提供了一套原则。 因此,在设计要在Web上使用的API时,遵循这些“最佳实践”是有意义的。

由于REST提供了我们所做的许多工作的指导理念,您应认为精通RESTful设计的原则至关重要。 罗伊·菲尔丁的论文是开始的好地方。

Sling请求解决方案

要了解AEM的一个关键方面是传入请求如何与内容和应用程序行为相关、内容在内容存储库中的结构如何以及AEM在何处查找应用程序逻辑以处理请求。 了解Apache Sling URL分解及其实施REST架构样式及其无状态、可缓存和分层系统约束的方式。

要了解Apache Sling请求解析的关键方面是请求如何主要映射到内容存储库中的特定资源、请求的附加属性以及这些内容对象的属性如何确定将调用哪些应用程序代码来呈现内容,以及/apps中的代码如何覆盖/libs中的代码。

快速启动

没有第三步:要安装和运行,只需下载并多次单击快速启动JAR文件。 没有第三步。 任何其他可选功能只需从“包共享”中安装相应的包即可。

较小的快速启动大小:保持Quickstart JAR文件的最小大小。 智能、优化地使用库,移动可选功能来打包共享。

更快的启动时间:当您做出可能影响启动时间的更改时,请确保它会缩短,而不是延长。

精简和平均

我们喜欢轻量、小巧、快速且优雅的代码和项目。 “够好”还不够好。

代码重用:我们基于OSGi的产品体系结构和“一切都是内容”的理念意味着我们有异常好的机会重复使用代码和产品。 我们会尽可能利用这一事实来保持功能的精简性。

松耦合:我们更青睐松散耦合的互动,而非紧密依赖和“不需要的亲密关系”。 松散的耦合还支持更多代码重用。

不要中断演示

熟悉演示脚本和产品功能,它们最常在演示中显示。 了解至少,您不应该破坏“演示脚本”功能。 核心产品应始终为演示做好准备,甚至在开发过程中也是如此。

可靠性设计

我们努力以失效软的方式设计和编码功能,这样(例如)单个DOM元素的问题不会导致整个页面无法呈现。 换言之:制造应该致命的东西。 让其他一切都活下去。 让产品“原谅”。

“异常”是“新正常”

不要依赖关闭挂钩,确保启动时清除。 异常终止是正常终止。

shutdown == kill -9 == power outage

准备迎接弹性群集

始终准备进行弹性聚类,始终假设存在聚类。 通常,遵守内容存储库中的所有内容意味着内置群集支持。

向后兼容性设计

您做的任何事情都不应破坏客户的旧代码。 请仅考虑/libs以包含可在升级过程中更新的产品代码。 存储库的/apps部分是项目代码,而/etc部分包含需要保留的自定义配置。 通常,不要覆盖/apps/content/home中的任何内容。 升级后,旧项目代码、配置和内容应继续像升级前一样正常工作。

设计为向后兼容还可确保升级体验与初始安装的简单性相匹配。 只需停止AEM、替换快速启动JAR文件并再次启动AEM即可。 随着安装基础的快速增长,升级效率将成为一个日益重要的优势。

虽然现有API在更新版本时可以也应该标记为已弃用,但更好的功能将替换它们,但在之前5.x版本中公开的所有API都需要保持正常工作,因为它们可能在自定义应用程序代码中使用。 不应删除此类API。

在内容结构和用户体验的总体一致性方面,还应牢记向后兼容性。

核心概念

作者实例 -通常,出于安全性、管理和其他原因,生产站点会将AEM实例分为作者实例和发布实例。有关部署架构(包括作者/发布实例)的详细信息,请参阅AEM实例相关文档。

缓存、煎炸和烘焙 -传统上,烘焙和煎炸的概念是不同Web内容管理系统之间的重要区别。在CMS术语中,“烘焙”是指在发布时将数据提交到静态文件的概念,而“煎炸”是指在请求时处理数据以进行最终演示的概念(即,刚好及时)。

群集和负载平衡 -为了提高生产环境的可用性并改善其性能,通常将多个作者实例和/或发布实例(发布到群集中)合并,方法是使这些实例对不同用户组可用,或在调度程序配置后对它们进行负载平衡。

还可以合并内容存储库的多个实例以创建​高可用性 JCR解决方案,然后该解决方案可以与AEM解决方案集成以最大限度地保护硬件和软件故障。 有关详细信息,请参阅推荐的部署

组件 -在AEM中,组件是一种对象类型,其实例通常可以通过从Sidekick中拖放来创建。例如,随AEM一起提供的现成组件包括文本、标题、标记云、传送、图像和列表组件,这些组件在运行时都可从Sidekick获得。

内容查找 器——在创作模式下,内容查找器是页面左侧的一个特殊面板(框架),它根据您在顶部选择的选项卡显示一列表图像、文档、Flash资产、页面、段落或存储库资源,您可以将这些资源从内容查找器拖放到您正在处理的页面(在右侧)。

数字资产 -在AEM中,数字资产(通常)是图像和富媒体文件。有关详细信息,请参阅在DAM中使用数字资产。

Dispatcher - Dispatcher既是缓存工具,又是负载平衡工具,同时提供了某些安全保护。

ExtJS构件 - AEM中的大多数用户界面元素都使用ExtJS,ExtJS是使用JavaScript编写的第三方构件库。ExtJS具备高性能、可自定义的UI构件和设计良好的可扩展组件模型。

JCR,Java内容存储库 - Java内容存储库规范(JSR-283)提供抽象数据模型和应用程序编程接口,用于实现一个大规模可扩展的NoSQL数据存储库,该存储库结合了文件系统和对象数据库的功能。虽然您不需要详尽地了解JSR-283,但您应该花些时间熟悉JCR的基本功能以及它背后的数据模型,因为JCR使AEM的“一切都是内容”哲学成为可能。

本质上,JCR是节点和属性的系统,其中节点可以继承其他节点,所有内容都作为属性​​存储。 请注意,除了普通继承外,JCR还允许“mixin”节点的概念,这允许对多个继承进行建模。

JCR具有许多预定义的节点类型和属性类型,但通常键入系统相当灵活,并且(事实上)JCR的强项之一是它允许结构化和非结构化内容被同等轻松地存储/管理。 即,JCR可以容纳高度结构化的数据,但也可以容纳任意动态模式结构,而不受数据约束。

JCR的Java API的JavaDoc为此处

在尝试读取JavaDoc或JCR规范本身之前,您可能希望查看由Adobe Experience Services实现的JCR的这一高级说明

多站点管理器(MSM) - AEM的MSM功能可帮助客户处理多语言和跨国内容,使客户能够在集中品牌和本地化内容之间取得平衡。

OSGi - OSGi是基于服务的运行时技术,为AEM中的模块化Java开发提供基础。它是一个框架,它不仅为代码资源(称为捆绑包)提供高度动态(和安全)的类加载和执行环境,还全面控制捆绑包所公开的各种服务的可见性和生命周期。 服务注册表为捆绑包提供了一个合作模型,该模型考虑了生命周期动态(和版本要求)。 OSGi解决了应用程序服务器想要解决的许多问题,但以轻量、高动态的方式解决了这些问题,例如,使热部署服务(使新代码可立即使用,而无需重新启动服务器)成为可能。

Parsys, Paragraph System —— 段落系统(parsys)是一个复合组件,它允许作者向页面添加不同类型的组件并包含其他段落组件。每个段落类型表示为一个组件。段落系统本身也是一个组件,其中包含其他段落组件。

Microkernel —— 存储库中的每个工作区都可以单独配置为通过特定的Microkernel(管理数据读写的类)存储其数据。同样,存储库范围的版本存储也可以独立配置为使用特定的微内核。 有许多不同的微内核可用,能够以各种文件格式或关系数据库存储数据。 (例如,存在MongoDB、DB2或Oracle的持久性管理器)AEM的默认微内核是TarMK(请参阅下面的更多内容)。

发布实例 -出于安全性、管理和其他原因,生产站点通常将AEM实例分为作者实例和发布实例。有关部署架构(包括作者/发布实例)的详细信息,请参阅AEM实例相关文档。

快速启动 -与许多其他项目不同,您使用单个“快速启动”自解压JAR文件来安装AEM。首次多次单击JAR文件时,将自动安装所需的所有内容。 快速启动JAR包括CRX存储库(包括管理设施)、虚拟存储库服务、索引和搜索服务、工作流服务、安全性和Web服务器所需的所有文件,以及CQ Servlet引擎(CQSE)和所有AEM服务。 没有其他文件可供安装:快速启动是自包含的。

第一次开始快速入门时,它会在后台创建一个符合JCR的整个存储库,这可能需要几分钟时间。 在初次启动后,随后的启动更快,因为存储库基础架构已经建立。

许多启动选项(如活动端口号以及所涉及的AEM实例是发布实例还是作者实例;更多)可通过适当重命名快速启动文件来控制。 要查看这方面的列表选项,请在命令行上使用“-help”运行JAR:

java -jar <quickstartfilename>.jar -help

复制代理 -复制代理对AEM来说是中心,它是用于将内容从作者发布(激活)到发布环境的机制;从调度程序缓存刷新内容;将用户生成的内容(例如,表单输入)从“发布”环境返回到“作者”环境。

Scaffolding —— 使用Scaffolding,您可以创建一个表单(即基架),其中包含反映您所需页面结构的字段,然后使用此表单轻松创建基于此结构的页面。

细分 -网站访客在访问网站时的兴趣和目标各不相同。了解访客的目标并满足其期望是在线营销的重要成功先决条件。 分段通过分析和表征访客的详细信息来帮助实现此目的。

Sidekick - Sidekick是一个类似调色板的浮动窗口,显示在可编辑页面上,从中可以拖动新组件并执行应用于页面的操作。

Site Catalyst -SiteCatalyst为营销人员提供了一个位置,用于衡量、分析和优化跨多个营销渠道的所有在线计划的集成数据。您可以使用Adobe SiteCatalyst来分析AEM网站的数据。

Tar存储(TarMK) - TarMK是AEM中的默认持久性系统。尽管AEM可以配置为使用不同的持久性系统(如MongoDB),但TarMK具有某些优势,即它针对典型的JCR用例进行了性能优化(因此速度非常快),使用行业标准数据格式,并且可以快速轻松地备份。

模板 -在AEM中,模板可指定特定类型的页面。它定义页面结构(同时通常还指定缩略图图像和各种属性)。 例如,对于产品页面、Sitemap 和联系人信息,您可能有不同的模板。

工作流 -AEM Workflow系统允许创建涉及页面或资产的自动化流程。

在此页面上