如何选择Jersey,Apache Wink和JBoss RESTEasy?

时间:2010-08-11 15:05:24

标签: apache jersey jax-rs resteasy

我刚刚听说过Apache Wink,我想知道它与JerseyJBoss RESTEasy有什么不同。在其他两个不能做的事情中可以做些什么?

我们一直在使用Jersey进行一些内部项目,主要是因为它的简单性,但我无法弄清楚是什么让其他两个更好,我会考虑切换。有没有人有任何使用案例,其中每个填充利基?

4 个答案:

答案 0 :(得分:113)

JAX-RS实施

泽西

  • 参考实施
  • 通常最前沿
  • 通过Atmosphere或2.0版本支持真正的异步(即Web套接字等...)连接。
  • 支持Spring和标准注入容器(即@Inject)。
  • Glassfish捆绑它。
  • 它比其他JAX-RS项目更加模块化。
  • 它有一个屁股URI Builder
  • 不一定需要servlet容器。
  • Grizzly支持
  • Netty支持(非常早)。
  • Swagger support
  • 缺少OAuth 2.0的排序。你必须使用其他库。
  • 通过Viewables
  • 获得一些MVC支持
  • 托管在java.net上(由于网站有时非常慢,因此减去。)
  • 许可基于CCDL 1.1和GPL-v2。请确保在将泽西牌照用于商业用途之前检查它。

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

RestEasy的

Apache Wink (从未使用过)

  • 我不知道为什么这个项目存在。
  • 据称其高性能集中。
  • 它有一个构建在HttpUrlConnection之上的客户端(这是一个减号......它应该像Spring RestTemplate一样可插入。)
  • 基本上,Wink是在一些企业公司内部开发的,然后交给Apache。
  • 需要servlet容器。

的Restlet

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

Apache CXF

  • 一些有趣的WADL支持。
  • 重用和/或组合JAX-RS w / JAX-WS
  • 安全支持
  • 整合w / Spring虽然有点讨厌
  • 假设自动生成客户端存根

其他类似RPC的系统

消息队列

异步RPC

我的拙见

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

如果它必须是经典的HTTP REST(外部),我会在 RestEasy Jersey 之间进行选择,因为大部分心智份额都会被放入这两个项目中。< / p>

另见:Rest clients for Java?

答案 1 :(得分:15)

选择要使用的实现时请记住:如果您尝试将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

答案 2 :(得分:5)

我最喜欢的Jersey扩展程序之一是Viewables。 Viewables允许您轻松地将数据绑定到JSP页面,以实现真正的模型 - 视图 - 控制器(MVC)架构:

答案 3 :(得分:0)

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