Show Menu
主题×

为AEM贡献

开发方法

AEM是按照在大型开放源项目中通常采用的成熟方法开发的。 事实上,AEM技术堆栈中的许多核心元素都作为活动开放源项目进行维护,如Sling和Jackrabbit,这些项目是Apache Software Foundation的贡献者。 AEM中体现的这一精神的一个重要方面是鼓励您利用可用的邮寄列表和在线论坛与开发团队直接交互。
如果您要向AEM的组件提供内容,则应像向开放源项目提供内容时那样熟悉AEM,并像要向此类项目提供内容时那样与现有核心团队进行通信。

所需体验

超文本传输协议(HTTP)是我们所做的一切工作的核心。 因此,在为AEM做出贡献之前,您应该对HTTP有深入的了解,理想情况是,在能够编写具有线程池的多线程HTTP服务器的Java实现的程度上。 您还应该了解HTTP/1.1的“保持活动”行为,并应该深入了解与JavaScript的服务器/客户端交互,特别是AJAX表示的异步交互风格。
由于页面动态性和交互式内容是WM体验的关键,因此您必须对文档对象模型及其在响应事件时进行程序化操作的潜力有相当深入的了解。 您应该有一些知识,例如,对多个浏览器文档(例如,使用iframe)进行实时DOM操作和拖放操作。
那么,在最高层面,您应该对以下问题有深入的了解:
  • HTML(最好 是HTML5 )
  • 层叠样式表
  • 可扩展标记语言(XML)
  • 异步JavaScript和XML(AJAX)设计模式
  • JavaScript对象表示法(JSON)
  • 文档对象模型
  • 状态与无状态交互
  • 浏览器cookie
  • 和其他现代Web开发概念
Adobe Experience manager的技术栈基于 Apache Felix OSGI容器和 Apache Sling web框架,并嵌入一个基于Apache Jackrabbit apache的Java内容存储库( index.htmljcr-api.htmlJCR)。 您应该熟悉这些单独的项目以及您要贡献的区域中使用的任何其他开放源代码组件(例如Apache Lucene)。

部落知识

某些概念和指导原则在前日文化中根深蒂固。 本节列出了您应该注意的“深度嵌入DNA”的问题。

一切都是内容

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

David's Model

在Java内容存储库中建立内容模型的方式需要完全不同于在关系世界中建立数据建模的软件行业中的常见做法。 JCR方式对于任何内容管理新来者而言都是 David's Model:内容建模指南

休息

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中的代码。

快速入门

没有第三步:要安装和运行,只需下载并双击Quickstart 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可以容纳高度结构化的数据,但也可以容纳任意动态数据结构,而不受模式约束。
此处是JavaDoc for JCR的Java API jcr-api.html
在尝试阅读JavaDoc或JCR规范本身之前,您可能希望查看由Adobe Experience services实 施的JCR的这一高级说明
多站点管理器(MSM) - AEM的MSM功能可帮助客户处理多语言和跨国内容,使他们能够在集中品牌和本地化内容之间取得平衡。
OSGi - OSGi是基于服务的运行时技术,为AEM中的模块化Java开发提供基础。 它是一个框架,它不仅为代码资源(称为绑定)提供高度动态(并且安全)的类加载和执行环境,而且对由绑定公开的各种服务的可见性和生命周期提供完全控制。 服务注册表为捆绑套件提供了一个合作模型,该模型考虑了生命周期动态(和版本要求)。 OSGi解决了应用程序服务器本来想解决的许多问题,但以轻量级、高度动态的方式解决了这些问题,例如,使得热部署服务(使新代码立即可用而无需重新启动服务器)成为可能。
Parsys,段落系统 -段落系统(parsys)是一个复合组件,它允许作者向页面添加不同类型的组件并包含其他段落组件。 每个段落类型表示为一个组件。段落系统本身也是一个组件,其中包含其他段落组件。
Microkernel —— 存储库中的每个工作区都可以单独配置,以通过特定的微内核(管理数据读写的类)存储其数据。 同样,存储库范围的版本存储也可以独立配置为使用特定的微内核。 有许多不同的微内核可用,能够以各种文件格式或关系数据库存储数据。 (例如,存在MongoDB、DB2或Oracle的持久性管理器)AEM的默认微内核是TarMK(请参阅下面的更多内容)。
发布实例 -出于安全性、管理和其他原因,生产站点通常将AEM实例分为作者实例和发布实例。 有关部署架构(包括作者/发布实例)的详细信息,请参阅有关AEM实例的文档。
快速启动 -与许多其他程序不同,您可以使用单个“快速启动”自解压JAR文件来安装AEM。 首次双击JAR文件时,将自动安装所需的所有内容。 快速启动JAR包括CRX存储库(包括管理设施)、虚拟存储库服务、索引和搜索服务、工作流服务、安全性和Web服务器所需的所有文件,以及CQ Servlet Engine(CQSE)和所有AEM服务。 没有其他文件可供安装:快速入门是自包含的。
第一次启动快速启动时,它会在后台创建一个符合JCR规范的整个存储库,这可能需要几分钟时间。 在初次启动后,随后的初创公司要快得多,因为存储库基础架构已经建立。
许多启动选项(如活动端口号以及相关的AEM实例应是Publish实例还是作者实例;等等)可通过相应地重命名快速启动文件来控制。 要查看相关选项列表,请在命令行中使用“-help”运行JAR:
java -jar <quickstartfilename>.jar -help

复制代理 -复制代理是AEM的中心,作为用于将内容从作者发布(激活)到发布环境的机制;刷新Dispatcher缓存中的内容;将用户生成的内容(例如,表单输入)从发布环境返回到创作环境。
基架 -使用基架,您可以创建一个表单(基架),其中的字段反映您需要的页面结构,然后使用此表单轻松创建基于此结构的页面。
细分 -网站访客在访问网站时的兴趣和目标各不相同。 了解访客的目标并满足其期望是在线营销的重要成功前提。 细分通过分析访客的详细信息并描述其特征来帮助实现这一点。
Sidekick - Sidekick是一个类似调色板的浮动窗口,它显示在可编辑页面上,从中可以拖动新组件并执行应用于页面的操作。
Site Catalyst - SiteCatalyst为营销人员提供了一个位置,用于测量、分析和优化跨多个营销渠道的所有在线计划的集成数据。 您可以使用Adobe SiteCatalyst分析AEM网站中的数据。
Tar Storage(TarMK) - TarMK是AEM中的默认持久系统。 虽然可以将AEM配置为使用不同的持久系统(如MongoDB),但TarMK具有某些优势,即它针对典型JCR用例进行了性能优化(因此速度非常快),使用行业标准数据格式,并且可以快速、轻松地备份。
模板 -在AEM中,模板可指定特定类型的页面。 它定义页面的结构(同时通常也指定缩略图图像和各种属性)。 例如,对于产品页面、Sitemap 和联系人信息,您可能有不同的模板。
工作流 - AEM workflow系统允许创建涉及页面或资产的自动化流程。