为什么要为 JCR 使用 Apache Sling?

Why use Apache Sling for JCR?

AEM 的文档如下:

AEM is built using Apache Sling, a web application framework based on REST principles 
that  provides  easy  development  of  content-oriented  applications.

为什么 AEM 使用 Apache Sling(使用 HTTP)而不是 Jackrabbit 或 CRX(不使用 HTTP)创建?

如果内容存储库在另一台机器上,我可以理解它的用途,例如您使用 运行 模式作者和资源在另一台机器上的情况,但我不明白为什么会这样用于AEM的实现。

由于以下原因多:

  • 它抽象掉了 JCR API,这非常麻烦
  • JCR 实现基本上只是 Felix 中的一个 OSGI 组件 运行(可能还有其他 OSGI 运行时),Sling 只是从中获取数据。 JackRabbit 本身或 OAK 都可以被不同的持久层所取代。 Sling 提供 APIs 来访问其他数据存储以及使用它自己的 APIs.
  • Sling 让您可以非常轻松地从其内部结构中抽象出内容的表示形式。
  • 它提供了一个一致的组件api,可用于在 JCR 之上实现实际应用程序,同时提高工作效率。它基本上遵循#2
  • HTTP(由 Sling 使用)是一种提供各种方式来传送内容的接口,并且更容易嵌入到复杂的网络基础设施中,因为网络在其上运行。

您不需要 Sling,但当您构建 Web 应用程序时,它显然可以提高您的工作效率,因为它是一个灵活的顶层表示层。