基于Java的CMS,带有RESTful服务/ API来访问内容[已关闭]

对于那些可能因为“没有建设性 - 就目前而言,这个问题不适合我们的问答格式”而投票关闭这个问题的人 - 如果你建议我应该在哪里发布这个问题(https://softwareengineering.stackexchange.com/?或任何以CMS为重点的论坛?)那就太好了。

以前也问过类似的问题:

它们都已经存在了几年,所以我想知道是否有新的建议/讨论。

一些背景:我们是一家Java商店,我们为客户创建/维护网站,我们的技术堆栈是Java,Spring,SQL,JSP,HTML5,JQuery,Tomcat,JBoss,Maven等...通常的东西。到目前为止,就“内容”而言,我们要么将其放在JSP为副本读取的一些属性文件中(例如,产品X的描述)或提供动态内容的后端服务(例如,产品X的当前值是多少)中。

现在,我们正在重新思考管理内容的方法,因为我们正在为具有相同内容(例如网站,移动网站,移动应用程序等)的客户端管理越来越多的属性,因此我们绝对希望避免将相同内容的多个副本分散开来。

我特别寻找的几件事:

  1. 基于Java(因为我们是Java商店:1)处理基于Java的东西有更多的专业知识,2)避免将另一种技术引入堆栈)

  2. 可扩展性/自定义。需要能够自定义CMS(这就是为什么我们希望坚持我们的Java专业知识),以便可以扩展它以与其他Web服务连接以使用内容等。

  3. 专注于内容 - 我们需要在内容与UI呈现之间明确分离,回到我们正在寻找的内容,我们需要将内容交付到单独的属性中。

  4. 用于访问内容的RESTful服务/ API - 同上。我们需要内容可以作为JSON / JSON-P /直接访问。XML 源。

  5. 需要有一个体面的UI来使用,并且越直观越适合业务用户,因为我们的一些客户可能会被转移到平台,他们可能希望管理自己的内容

  6. 多语言支持

  7. 开源/低成本

到目前为止,我有几个选择:

Adobe CQ - 看起来是最理想的解决方案,但不幸的是,它的成本过高

Hippo CMS - 看起来符合我们正在寻找的东西,我不确定它的记录有多好,教程/操作方法似乎非常稀少,它们在欧洲的市场份额似乎比在北美更大。

Liferay - 更专注于“门户”,而不是CMS提供内容

露天 - 更专注于“文件”

dotCMS - 像河马CMS一样,似乎这个可能符合我们的需求。

Magnolia CMS - 与dotCMS和Hippo一样环顾四周。从我看到的评论来看,他们似乎更专注于单个网站,而不是内容与UI之间的明确分离。

我个人以前没有太多使用CMS的直接经验。

您对上述每个选项的想法/评论,或者如果您有此处未提及的其他解决方案,将不胜感激!我的一个挑战是,我们需要做出一个非常合理的决定,因为无论我们决定走哪条路,我们都可能会被困住,决定不是一件容易被抛弃并重新开始的事情。


答案 1

就我个人而言,我对Hippo有一些经验,对dotCMS有很多经验。我确实对Alfresco,Liferay和Magnolia有所了解,但我以前没有与他们合作过。我对Adobe CQ没有任何经验,因为我从未花时间进行调查。这是因为对于我们的许多客户来说,高昂的成本是行不通的。如果您正在寻找在线文档管理系统,Alfresco确实是一个更好的解决方案,我认为您不是。你说的对,Hippo、Magnolia 和 dotCMS 有些相似,这并不奇怪,因为它们试图解决同样的问题:成为一个基于 Java 的企业级 Web 内容管理系统。他们主要关注管理可以在也可以使用CMS管理的页面中使用的内容。

说实话:我对dotCMS有偏见,因为我经常使用这些系统,并且对它了解很多。我想我会解释为什么它对我们有用,这样你就可以考虑到这一点。我在一家Java商店工作,该公司使用JBoss和整个EE堆栈为其客户进行大量中间件开发。我们将旧系统(Cobol)和新系统连接在一起,并在面向管理员和消费者的中间件之上放置一个闪亮的新Web界面。为了能够创建这些接口,我们需要一个能够很好地完成一些工作的CMS:

  1. 基于Java(因为我们是一家Java商店,这使我们能够让相同的人在CMS和中间件上工作)
  2. 水平可扩展到数十台服务器,没有太多麻烦。在向外扩展到多个服务器的经典情况下,数据库和资产文件夹在节点之间共享。当您有许多节点时,这可能是一个问题,但实际上这不是一个大问题,因为大多数负载都会击中索引,而不是数据库或磁盘。在 2.5 及更高版本中,dotCMS 提供了一种“不共享”模式,其中每个节点都有自己的数据库和资产文件夹,但这确实需要您使用额外的(读取:许可的)创作服务器,将内容推送到每个节点。我自己没有玩过这个设置,但它听起来很有希望,特别是因为每个节点都可以是一个简单而便宜的盒子,只使用postgresql / mysql和tomcat,并且因为不再有单点故障。在经典情况下,如果共享资源文件夹或数据库会死亡,所有节点也会关闭,除非您对数据库和磁盘进行聚类,这是expensicv要做的。有了这个“不共享”设置,情况就不再如此了。正如我所说:我对此没有经验,但听起来它可能会起作用。
  3. 高级用户和非技术人员(客户端)都可以使用的管理界面。不是每个人都“擅长计算机”,但他们也需要能够管理内容(这些人经常在我们客户的营销部门工作)。dotCMS提供了创建管理界面的方法,这些界面仅显示dotCMS提供的一些功能。这可以防止他们不得不了解整个系统,从而加快培训和接受速度。
  4. 结构化内容。这很重要。我们希望能够使用一组固定的字段定义多种类型的内容,就像数据库表一样。所有这些都无需重建或重新启动系统。基于此结构定义内容的人员(dotCMS 用于这些类型的名称)无法输入无效数据,因为系统会对此进行保护。这使得构建网站更加面向未来和方便。特别是对于开发人员。
  5. 首先关注内容。在我们使用 dotCMS 的最初几个月,我们实际上只使用 dotCMS 来管理内容本身,并通过 JSON API 公开内容。我们没有使用CMS功能,如定义模板和创建页面。这工作正常,听起来像你正在寻找的东西。dotCMS 有一个 JSON/XML Webservice,它根据查询返回内容。我们在几乎所有项目中都经常使用它,有关更多信息,请参阅此处:http://dotcms.com/docs/latest/ContentAPI。将 dotCMS 本身用于整个前端也是一种可能性。特别是对于它支持的Spring控制器和CSS框架不可知的新模板设计器,它是构建不仅需要一些内容的系统的好方法。
  6. 多种语言。dotCMS提供了几种方法来做到这一点。您可以使用所需的所有语言创建内容,甚至是非文本内容(如图像)。由于“内容优先”的方法,许多事情都是 dotCMS中的内容,并且可以被视为这样,包括为您需要的每种语言创建一个版本。
  7. 开源。dotCMS提供了一个我们大部分时间都使用的社区版本。仅对于负载平衡,使用oracle进行数据库等专业功能,才需要付费版本。即使这样,成本也是可控的。有关此内容的更多详细信息,请参阅 http://dotcms.com/products/editions/
  8. 内部缓存机制。由于负载高,我们构建的一些网站需要缓存。DotCMS使用Google Guava进行缓存,效果很好。
  9. 可扩展性,也是一个大问题。出于显而易见的原因,我们需要能够扩展dotCMS的功能。DotCMS过去只提供一种老式的插件方式,这种方式有点丑陋,并且基于一个蚂蚁脚本,该脚本用您自己的方式覆盖了dotCMS类。它工作正常,但是在编写这样的插件后,我总是觉得很脏。但是,从版本2开始,他们提供了一个基于OSGi的插件框架,该框架非常可爱,并且对开发人员更加友好。它在2.5版本中退出了测试版。我们计划将所有插件移植到新框架中。
  10. 多主机。我们需要能够在同一 CMS 中托管多个站点。DotCMS本身提供了这一点。这也是在多个主机之间共享共同内容的好方法,我们经常使用。

当然也有缺点。以下是一些:

  1. 像 dotCMS 这样的 Web CMS 将其内容存储在数据库中,并将资产作为文件存储在磁盘上。这使得不同服务器之间的版本控制和同步变得痛苦。从 2.5 版本开始,dotCMS 提供同步工具,使您能够将内容从一个环境(例如 UAT)推送到另一个环境(例如 PROD),这很有帮助。但是,无法从GIT或SVN之类的东西中签出内容的单个版本是非常烦人的。特别是因为我们作为Java开发人员已经习惯了在持续集成环境中进行自动化测试之类的事情。当然,您可以将数据库存储为SQL语句和资产目录,但这很慢,而且不那么“好”。但是,在数据库中存储状态的所有系统都有这个缺陷。
  2. DotCMS需要一些时间来学习。它不是像Wordpress这样的小型CMS,您将在一个下午内理解。它具有许多功能并且非常强大,但是您很可能需要一天左右的时间才能理解dotCMS的方式,然后再花几天时间才能理解所有API。我鼓励你先阅读一些文档,并在建立一个真正的生产站点之前对其进行修补:有很多方式通向罗马,但其中一些是由流沙组成的。:)
  3. DotCMS是RAM饥饿。为了保持速度,它缓存了所有内容,因此,如果您有很多内容,它将占用您可用的RAM。您可以对此进行调整,但是更容易为它提供我们发现的足够RAM。
  4. 并非所有 WebDAV + 编辑客户端的配置都与 dotCMS 兼容。例如,在Mac上,我发现您最好使用Cyberduck作为WebDAV客户端,将Aptana用作文本编辑器。其他设置做了dotCMS不太喜欢的怪异事情。你必须玩一会儿,找出最适合你的设置。我确实发现,如果你在他们的github上提交了一个错误,他们会在下一个版本中修复它。他们告诉我,WebDAV很难正确,因为它不是一个固定的标准,我理解它,但它仍然可能是一个痛苦的屁股。

如果你想学习dotCMS,请阅读他们的 - 不是那么糟糕 - 文档:http://dotcms.com/docs/latest/TableOfContents,并看看他们的演示网站(http://dotcms.com/products/demo/)。在演示站点中,您将找到dotCMS提供的所有概念的示例。哦,看看我们自己的免费dotCMS插件。特别是JavaScript和CSS minifier非常方便:http://geekyplugins.com/

希望这有帮助一点。如果您想了解更多信息,请告诉我。


答案 2

免责声明:我为河马工作,所以我会尽量只用事实而不是意见来回答:-)

  1. Hippo完全基于Java,前端是独立的语言,但面向JSP或Freemarker,您可以选择使用REST接口并使用任何东西。

  2. 许多插件都是在河马锻造厂创建和收集的。

  3. 以内容为中心的设计一直是Hippo开发的主要内容,应该没有问题。

  4. 是的,默认情况下,所有 JCR 调用都可用。除此之外,您还可以定义自己的 REST 接口以满足您的需求,示例见此处演示。

  5. 我敢说是的,根据我的经验,大多数非技术用户发现界面很容易理解。

  6. 多语言很容易,是默认多渠道设置的一部分

  7. 社区版(完整,没有诱饵和切换)是开源的,专有许可证背后有一些企业功能。该许可证还开辟了支持途径,除了Google Group和Stack Overflow。

现在,关于你对文档不完整的评论,让我提出我的意见:你是对的,文档是一场持续的斗争。大多数东西都有记录,但很难找到。我们正在努力改进概述,介绍和教程,但我们显然还没有完成。如果你找不到任何东西,通常社区能够帮助你,并为你指出正确的方向。


推荐