Apache Sling、Felix和Jackrabbit项目的建立目的是什么?

28

我在这里提出一个非常基本的问题。

问题是:

我的教练告诉我在我的项目中使用了Apache Sling,Apache Jackrabbit和Apache Felix。我正在尝试理解为什么这些软件由Apache开发。我在互联网上尝试了很多次,但没有找到任何博客、Wordpress博客或有用的YouTube视频来解释所有这些项目。您能给我讲解一下这些项目吗?

Why these projects developed?

What they do ?

and more questions like this

之前我在Apache Hadoop中也遇到过相同的疑问,但是网络上所有的材料都足够让我了解这个项目的基本情况。这次我在使用Sling、Felix、Jackrabbit时遇到了困难。

非常感谢您的帮助,期待您的回复。


你成功将这三个系统整合在一起了吗? - Shurmajee
4
这些项目目前主要由Adobe维护,用于其CMS产品Adobe Experience Manager(AEM)。Jackrabbit是JCR的参考实现,已在Adobe以外得到一定程度的采用(例如Modeshape)。Felix是一个OSGi容器,也是一个开放标准。Sling是为AEM前身专门创建的JCR Web框架,除了AEM几乎没有人使用。如果您不使用AEM,我不知道为什么会选择这个技术栈,有更好的选择。 - jiggy
3个回答

47

Apache Jackrabbit、Apache Sling和Apache Felix的组合可以使您构建Web应用程序。

Apache JackrabbitJCR API的参考实现。JCR API用于管理内容库,例如网络内容。内容库是文件系统和数据库之间的混合体。

JCR API专门用于处理Web内容。为什么要使用JCR API,而不是使用关系型数据库API?URL是分层的,就像文件系统一样。关系型数据库不容易支持分层访问。为什么不使用文件系统API?因为JCR支持事务、版本控制以及许多其他文件系统API不支持的功能。

Apache Sling是一个基于JCR API的Web框架,利用JCR API提供的功能(15分钟介绍)。

Apache Felix是一个OSGi容器。它允许在Web服务器运行时无缝启动、停止和替换Web应用程序的组件(类似于jar文件)。这意味着您可以在不必重新启动服务器的情况下更改应用程序。


2
我对JackRabbit和Felix有一些了解。但是关于Sling的陈述完全让我摸不着头脑。你能再向我解释一下Sling吗? - devsda
抱歉,我个人对Sling并不是很了解。我所知道的也只有你在网站上能找到的信息。 - Thomas Mueller
顺便提一下,官方名称是Jackrabbit(小写r)。抱歉我有点挑剔 :-) - Thomas Mueller
谢谢你纠正我 :) 但是我想说一件事。至少他们应该制作一些好的教程,以便帮助新学生从基础学习这些项目。 - devsda
@devsda:针对Apache Sling,请查看他们酷炫的“15分钟内发现Sling”的教程:https://sling.apache.org/documentation/getting-started/discover-sling-in-15-minutes.html - Sorin Postelnicu

24

Sling 简单来说就是一个 JCR的REST API。您可以使用http请求来管理存储库中的内容。

此外,Sling提供了一种机制,以不同的方式呈现内容以供Web使用。您可以使用脚本(例如JSP)和Felix容器中的Java代码(servlets、pojos等)来处理请求并交付请求。

当针对特定节点发出请求时,Sling会查找名为 sling:resourceType 的属性,这是渲染脚本的查找键。然后使用该节点作为输入执行相应的脚本。

您可以编写不同种类的渲染器,然后使用它们以不同的方式显示您的内容。

例如,您可以编写两个脚本 full.json.jsp 和 short.json.jsp,然后使用它们以两种不同的方式呈现同一节点:

/content/app/node.full.json 

或者

/content/app/node.short.json.

Sling基本上是将请求URL中的标记与选择适当脚本匹配。

他们有一份非常好的速查表,解释了请求分辨率和呈现工作原理

虽然这有点复杂,因为所有内容都组织成资源和组件。您可以查看他们的网站获取更多信息。


想要快速了解Sling的功能,我推荐他们的快速教程:“15分钟探索Sling” https://sling.apache.org/documentation/getting-started/discover-sling-in-15-minutes.html - Sorin Postelnicu

1

我也有同样的疑问。我能找到的最好的答案在官方Sling页面上(https://sling.apache.org/)。


Apache Sling是一个Web框架,使用Java内容存储库(如Apache Jackrabbit)来存储和管理内容。

Sling应用程序使用脚本或Java servlet,在基于简单命名约定的选择下以RESTful方式处理HTTP请求。

嵌入式Apache Felix OSGi框架和控制台提供了一个动态运行时环境,其中可以在运行时加载、卸载和重新配置代码和内容包。


因此,总结一下:

  • Sling是一个基于JCR API的Web框架,使用jackrabbit作为支持。
  • 你可以将Apache Felix视为其管理器的容器。

请注意,Sling最初是Day Software的内部项目。这就是为什么一些bundles/libraries的名称像com.day一样,但最终它们都是同一个名字。

另外,如果您想了解Jackrabbit和JCR API的清晰性,可以访问Jackrabbit的官方页面http://jackrabbit.apache.org/jcr/jackrabbit-architecture.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接