InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

比较各JAX-RS实现

作者 Mark Little 译者 徐涵 发布于 2008年10月6日

领域
架构 & 设计,
企业架构
主题
SOA ,
REST
标签
JSR 311 ,
XFire
正如某人在别处说的,关于公交车,有一个奇怪的现象:你等了很久一辆不来,最后却一下来了三辆!JAX-RS实现貌似也碰到了类似的问题。目前我们有:
  • CXF——XFireCeltix的合并(一个由IONA赞助的开源ESB,最初寄存在ObjectWeb上)。
  • Jersey——Sun公司的JAX-RS参考实现。
  • RESTEasy——JBoss的JAX-RS项目。
  • Restlet——也许是最早的REST框架了,它JAX-RS之前就有了。
尽管围绕着REST存在各种各样的争论,但JAX-RS提供了Java语言所需的REST支持这一点是无可争议的。如果你是REST新手,你会选择哪种实现呢?嗯,Solomon Duskis试图解答这一问题。他还在dzone上指出:
我想就以下几个“纯”JAX-RS以外的方面对各JAX-RS实现进行比较。
这些方面包括:
  • 产品成熟度
  • 服务端集成策略
  • Java客户端API
  • 可配置能力
  • 安全性
  • 性能
Solomon Duskis说“Jersey的用途是作为一个参考实现。RESTEasy是新思想的游乐场。CXF是在IONA支持下的‘企业版’。Restlet项目诞生的目的是增加一种RESTful API选择。”

然而,Bill Burke在博客评论中反击道:
RESTEasy不仅仅是新思想的游乐场。其实,我们将很快在JBoss里支持它(一拿到TCK就可以),而且我们很多大客户都在催促我们提供RESTEasy支持。
在易用性方面,Solomon Duskis说:
你所面临的问题是选择一种实现。我觉得Jersey的确很容易上手,不过Bill Burke会说RESTEasy同样很简单。它们都可以与EJB一起使用。

不过,使用Jersey的话,搭建与运行测试服务很容易,如果你下载NetBeans的话更是如此。我第一次用Jersey和NetBeans时,不到半个小时就测试并运行起来了,包括下载、安装及代码浏览等。

Sun公司的人很想把Jersey与人们关于“参考实现”的传统看法区分开:
你在谈到“产品用途”时,应当将Jersey看作一种立马可投入使用的产品(事实上下个月它就要随GlassFish v3 Prelude版捆绑发布了)。Jersey团队花费了相当多的时间来测试并改善代码,以免去其作为“参考实现”的印象!:)
Solomon Duskis打算对这几个方面进行研究,然后将结果发布在博客里。一篇名为《JAX-RS Spring集成》的文章已经发布出来了。
现在的四种JAX-RS实现均提供Spring集成,连JBoss的RESTEasy都是。
接着,他对集成作了相当简短的介绍。不过正如Paul所指出的,Solomon Duskis在讲述Jersey时引用的是过时的资料。这比较遗憾,因为我们需要的是一个深入彻底的比较。Solomon Duskis最后说:
四种实现均具有相当出色的Spring/JAX-RS能力,但我认为CXF是“JAX-RS产品里Spring集成做得最好的”。
不过显然这只是他的个人看法,其他人肯定会有不同意见。比如Bill Burke就问道:
我没看出CXF在Spring集成方面比其他产品优越在哪里。我不明白为什么所有额外的CXF专用XML都被放在一个Spring XML文档里。RESTEasy和Jersey提供的Spring集成要比CXF的侵入性更小。如果我没搞错的话。
对此,Solomon Duskis回复说:
如果各个类有一个简单的配置,能够满足超过90%的需要,那么标注驱动的方法是可行的。剩下那不到10%的部分,需要在不同场合下对同一资源作不同配置。 我知道,根据我所更新的功能的需求与当前部署,我将会需要这种方案。为了通过同样的Spring XML文档来部署具有不同配置(如不同的JDBC数据源、不同的服务实现等等)的同一个资源,CXF提供了额外的功能。基本上,大多数情况下,标注的办法是 很好的,但有时,你必须采用外部配置的办法来实现解耦(decoupling)。XML方案并不如标注一样受欢迎,但它们可以用于更复杂的配置情况。
或许更深入的比较能够揭示出更多的东西来?

查看英文原文:A Comparison of JAX-RS Implementations
Jersey 发表人 朱 志欧 发表于
Re: Jersey 发表人 Zhang Gavin 发表于
Re: Jersey 发表人 Zhang Gavin 发表于
Re: Jersey 发表人 sheng liu 发表于
nana 发表人 Han Jie 发表于
  1. 返回顶部

    Jersey

    发表人 朱 志欧

    我在项目中使用了jersey。我曾尝试用Restlet的,但是比前一个复杂多了。

  2. 返回顶部

    Re: Jersey

    发表人 Zhang Gavin

    应该是JAX-WS而不是jax-rs吧???

    sun的实现确实比较好用

  3. 返回顶部

    Re: Jersey

    发表人 Zhang Gavin

    搞错了,是有这么一个JSR

  4. 返回顶部

    Re: Jersey

    发表人 sheng liu

    应该是JAX-WS而不是jax-rs吧???

    JAX-WS是针对WebService。而JAX-RS是针对RESTful HTTP Service。
    可以说这是两种风格的SOA架构风格:
    前者以动词为中心(类似函数使编程,大力支持的厂商如BEA,IBM,MS基本都是开发工具厂商,没有开发工具来做WebService简直不是人干的活,呵呵);后者以名词为中心(类似面向对象编程,大力支持的厂商如Google,Yahoo,亚马孙等都是服务运营厂商,实在是REST简洁好用,又能满足绝大部分需求)。
    我个人是比较倾向REST的。

  5. 返回顶部

    nana

    发表人 Han Jie

    百花齐放?
    言之有理

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。