如何在Jersey,Apache Wink和JBoss RESTEasy之间进行选择?[关闭]


75

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

我们一直在为一些内部项目使用Jersey,主要是因为它很简单,但是我真的无法弄清楚是什么使其他两个更好,因此我考虑转换。有没有人有任何用例适合这些填充?


Answers:


114

JAX-RS实现

泽西岛

  • 参考实施
  • 通常最前沿
  • 通过Atmosphere或2.0版本支持真正的异步(即Web套接字等)连接。
  • 支持Spring和标准注入容器(即@Inject)。
  • Glassfish将其捆绑。
  • 它比其他JAX-RS项目更具模块化。
  • 它有一个踢屁股URI Builder
  • 不一定需要servlet容器。
  • 灰熊支持
  • Netty支持(非常早)。
  • 昂首阔步的支持
  • 有点缺少OAuth 2.0。您将不得不使用其他库。
  • 通过Viewables提供的一些MVC支持
  • 托管在java.net上(该网站有时会非常缓慢,这是一个减号)。
  • 许可基于CCDL 1.1和GPL-v2。在将其用于商业用途之前,请确保您检查泽西岛许可

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

高枕无忧

Apache Wink (从未使用过)

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

Restlet

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

Apache CXF

  • 一些有趣的WADL支持。
  • 重复使用和/或组合带有JAX-WS的JAX-RS
  • 安全支援
  • 与Spring集成,尽管有点讨厌
  • 假定自动生成客户端存根

其他类似RPC的系统

消息队列

异步RPC

我的拙见

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

如果它必须是经典的HTTP REST(外部),那么我会在RestEasyJersey中进行选择,因为这两个项目的大部分精力都放在了这两个项目上。

另请参阅:Java的其余客户端?


1
我不建议使用Jersey(我只尝试过v 2.5.1)。首先,配置和设置非常困难。
Muhammad Gelbana

您能否从您的角度解释Restlet为何如此复杂。看一下第一步示例:restlet.org/learn/guide/2.2/introduction/first-steps/…–
Jerome Louvel

也许“复杂”不是正确的词,restlet也已经发展。我猜想我看着restlet似乎比jaxrs多得多。它可能是最复杂的Rest Server库,因此很“复杂”。
亚当·根特

2
自2005年以来,它确实具有更广泛的REST / HTTP功能范围(6个版本,44个版本),但是其核心org.restlet.jar非常紧凑(零依赖),统一的客户端和服务器。看一下我们的第一步示例,看看如何在5分钟内开始而无需配置任何Servlet容器或XML配置。但是,您仍然可以扩大/扩展:restlet.com/discover/firststeps
Jerome Louvel

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


6
这是非常有用的信息(尽管它回答了一个不同的问题)。
Rick-777

我的猜测是(自从我使用JBOSS以来很长时间了)您可以在JBOSS中排除提供的JAX-RS。或者您可以将其排除在pom中。底线:这是您可以解决的问题。
Johanneke


1

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


1
请参阅TihomirMeščić的回答。
Rick-777 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.