如何选择Jersey、Apache Wink和JBoss RESTEasy之间的区别?(涉及IT技术)

75

我刚听说过Apache Wink,想知道它与JerseyJBoss RESTEasy有何不同之处。这三个工具中有什么无法用另外两个工具实现的功能呢?

我们在一些内部项目中使用Jersey主要是因为它简单易用,但我确实搞不清楚这两个工具相比之下有何优势,让我考虑转换使用。是否有人有使用案例,了解这三个工具各自填补了哪些空白领域?


请参见:https://dev59.com/G3VD5IYBdhLWcg3wHn2d - Jens Piegsa
4个回答

114

JAX-RS实现

Jersey

  • 参考实现
  • 通常是最前沿的
  • 支持真正的异步连接(例如WebSockets等)通过Atmosphere或2.0版本。
  • 支持Spring和标准注入容器(即@Inject)。
  • Glassfish捆绑了它。
  • 它比其他JAX-RS项目更模块化。
  • 它有一个很棒的URI Builder
  • 不一定需要servlet容器。
  • Grizzly支持
  • Netty支持(非常早期)。
  • Swagger支持
  • 缺少OAuth 2.0。您将不得不使用其他库。
  • 通过Viewables提供一些MVC支持
  • 托管在java.net上(该网站有时速度非常慢,这是一个负面因素)。
  • 许可基于CCDL 1.1和GPL-v2。在将其用于商业用途之前,请务必检查Jersey的许可证。

https://jersey.github.io/license.html

RestEasy

Apache Wink (从未使用过)

  • 我不知道为什么会有这个项目。
  • 据说它专注于高性能。
  • 它有一个基于 HttpUrlConnection 的客户端(这是一个缺点... 它应该像 Spring RestTemplate 一样可插拔)。
  • 基本上 Wink 是在某些企业公司内部开发的,然后交给了 Apache。
  • 需要一个 Servlet 容器。

Restlet

  • 非常强大但非常复杂
  • 提供一些低级别的 REST 支持
  • 不需要 Servlet 容器

Apache CXF

  • 一些有趣的 WADL 支持。
  • 重用和/或结合 JAX-RS 和 JAX-WS
  • 安全支持
  • 与 Spring 集成,尽管有点困难
  • 据说可以自动生成客户端存根

其他类似 RPC 的系统

消息队列

  • RabbitMQ(一种开源的消息代理,用于快速可靠地处理和传递消息)
  • ActiveMQ(一种基于JMS的开源消息代理,提供了高级消息队列特性)

异步RPC

  • Finagle(来自Twitter的一个库,用于构建高度并发、分布式系统的协议栈)
  • msgpack-rpc(一种轻量级的跨语言RPC框架)

我的谦虚意见

我知道OP要求使用REST,但如果这是用于内部通信,请认真考虑使用消息队列或其他异步RPC(例如Finagle),而不是传统的REST,如果您的需求符合这些系统的话。

如果必须使用经典的HTTP REST(外部),我会选择在RestEasyJersey之间进行选择,因为这两个项目都得到了大量的关注。

另请参阅:Java的REST客户端?


1
我一点也不推荐Jersey(我只尝试过v 2.5.1)。它在第一次配置和设置时非常难以处理。 - Muhammad Gelbana
你能否从你的角度解释一下为什么Restlet很复杂。请查看第一步示例:http://restlet.org/learn/guide/2.2/introduction/first-steps/first-server - Jerome Louvel
也许“复杂”这个词并不恰当,restlet 也有了进化。我猜当我看 restlet 的时候,它似乎比 jaxrs 多了很多东西。这可能是最全面的 REST 服务器库,因此被称为“复杂”。 - Adam Gent
2
它确实具有更广泛的REST/HTTP功能范围,6个版本,44个版本,自2005年以来一直存在,但其核心org.restlet.jar非常紧凑(零依赖项),统一的客户端和服务器。请查看我们的第一步示例,了解如何在5分钟内开始使用,无需配置任何Servlet容器或XML配置。但仍然可以远程增长/扩展:http://restlet.com/discover/firststeps - Jerome Louvel

16

在选择要使用的实现时,请记住:如果您尝试将Jersey Web服务部署到JBOSS 7.1,则无法正常工作。会出现以下错误:

Only one JAX-RS Application Class allowed

这是因为REST Easy与JBOSS捆绑在一起作为默认的JAX-RS实现。因此,JBOSS将决定这是您想使用的实现,并不会加载另一个JAX-RS实现(如Jersey)。要修复此问题,您需要将以下行添加到您的web.xml文件中:

  <context-param>
   <param-name>resteasy.scan</param-name>
   <param-value>false</param-value>
  </context-param>
  <context-param> 
   <param-name>resteasy.scan.providers</param-name>
   <param-value>false</param-value>
  </context-param>
  <context-param>
   <param-name>resteasy.scan.resources</param-name>
   <param-value>false</param-value>
  </context-param>

链接: https://community.jboss.org/message/744530


6
这是非常有用的信息(尽管它回答了一个不同的问题)。 - Rick-777
我的猜测是(很久以前我曾经使用过JBOSS)你可以在JBOSS中排除提供的JAX-RS。或者你可以在你的pom文件中排除它。底线是:这是一个你可以解决的问题。 - Johanneke

5

2
你已经多次提到了那个评论。我会说相反的观点。结果可能因人而异。 - Rick-777

1
如果您要使用JBoss 7.x,必须使用RestEasy,因为它已经集成在JBoss中。要在JBoss 7.x中使用Jersey,您必须禁用RestEasy,这很复杂!

1
请查看Tihomir Meščić的答案。 - Rick-777

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