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-RSのAPIにのみ依存しており、JerseyやRESTeasyのクラスには依存しない。
つまり上記クラスはそのまま変更を加えることなく、適当なMainクラスに上記クラスをのせてHTTPサーバとして起動するなり、TomcatやJBoss等のコンテナにのせるなりすれば、動く。
Jerseyを使って動作させたい場合、以下の手順になる。必要最低現。なおリソースクラスは明示的に教えてあげなくても、自動検索してくれるらしい。
- Jerseyのライブラリにクラスパスを通す
- 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個。気軽に使いたいと思った時に少し腰が重い気がする。