WebサービスのためのJersey V.S. RESTeasy

お手軽Webサービスを実現するための手段という観点で、JerseyとRESTeasyを比べてみる。

JavaEEチュートリアル( http://download.oracle.com/javaee/6/tutorial/doc/gilik.html )とほぼ同じような、以下のリソースクラスをWebサービスとして公開したいケース。

import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.Path;

@Path("/helloworld")
public class HelloWorldResource {
    
    @GET
    @Produces("text/plain")
    public String getMessage() {
        return "Hello World";
    }
}

http://localhost:8888/helloworld でブラウザにアクセスすると、"Hello World"が表示されるイメージ。

上記はJAX-RSAPIにのみ依存しており、JerseyやRESTeasyのクラスには依存しない。
つまり上記クラスはそのまま変更を加えることなく、適当なMainクラスに上記クラスをのせてHTTPサーバとして起動するなり、TomcatJBoss等のコンテナにのせるなりすれば、動く。

Jerseyを使って動作させたい場合、以下の手順になる。必要最低現。なおリソースクラスは明示的に教えてあげなくても、自動検索してくれるらしい。

  1. Jerseyのライブラリにクラスパスを通す
  2. HttpServerFactory#create()を呼び出してHttpServerを作成し、HttpServer#start()

次にRESTeasyの場合。公式のドキュメントの「3.1. Standalone Resteasy」を見ると、JBoss AS上以外で動かそうとする場合(今回みたいにRESTeasyを単独で使いたい場合など)には、少し手を加える必要があるよう。
まだ調べ中ではあるけど、WAR形式にしてデプロイしないと無理…?
HttpServerFactoryに相当するものはないのかな。



あと両者の比較という意味では、JBossファミリーに共通して言えることだけど、JARファイルがたくさんあってごってりしてるところかな。
Jersey(1.10)のlib以下のJARファイルの数が12個なのに対して、RESTeasy(2.2.23GA)は54個。気軽に使いたいと思った時に少し腰が重い気がする。