検索
特集

JAX-RSを活用して、JavaクラスをWebサービス化しよう特集:JAX-RS入門(4/4 ページ)

JAX-RSを使用すると、通常のJavaクラスをいとも簡単にWebサービス化できる。本稿では、ごく簡単なJavaプログラムを例に、その方法とJAX-RSの動作について解説する。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

JAX-RSの動作

 JAX-RSより前のWebフレームワークと比べると、JAX-RSはアノテーションを利用することでアプリケーションの実装クラスそのものは圧倒的にシンプルなものになる。

 このシンプルさの裏側で何が行われているのかは知っておいた方がよいだろう。

 ここで例にしたAddクラスがどうやってWebサービスとして機能しているかを以下に示す。

  • Tomcatは起動時に各コンテクストのweb.xmlファイルを読み込んで必要なサーブレットを初期化する
  • calcコンテクストではJerseyが初期化時に@Pathでアノテーションが付加されたクラスを探索し、該当パスがクライアントからアクセスされたら実行できるように準備する
  • Webブラウザーは、Tomcatの「/calc/add」パスに対してクエリーストリング「x=100000000&y=80000000000」付きのGETメソッドでアクセスする
  • TomcatはURLに含まれる「/calc」からcalcコンテクストへ制御を移す。次にweb.xmlファイルの「<servlet-name>javax.ws.rs.core.Application</servlet-name>」と「<url-pattern>/*</url-pattern>」という指定からjavax.ws.rs.core.Applicationサーブレットの具象クラス(Jerseyが提供するサーブレット実装)に処理を委譲する
  • Jerseyは「add」というパス名からAddクラスのオブジェクトを生成し、WebブラウザーからのGETメソッドに対応したaddメソッドを選択する。次に引数のアノテーションに従い、クエリーストリングの「x」の値「100000000」を「ax」パラメーターに、「y」の値「80000000000」を「ay」パラメーターに設定してaddメソッドを呼び出す。
  • addメソッドは計算を実行し結果の文字列を返す
  • Jerseyはアノテーションに従って結果の文字列をプレーンテキストとしてTomcatへ与える
  • Tomcatは上でJerseyから受け取った応答データをWebブラウザーに返送する

 以下に上記の概要をまとめた図を示す。

JAX-RSを利用したJavaクラスのWebサービス化
JAX-RSを利用したJavaクラスのWebサービス化
JAX-RSを利用したJavaクラスのWebサービス化
上はJAX-RSの動作の概念を表したもの。
下はURLと実際に処理を行うJavaプログラムとの対応を示したもの。

 JAX-RSアノテーションをどのように利用しているかを理解すると、クライアントに与えたいアクセス方法に対してどのようなアノテーションを行うべきかが分かる。

まとめ

 この記事では、JAX-RSについて解説した。

 JAX-RSはJavaの普通のクラスにアノテーションを付けることでWebサービス化するためのフレームワークだということを、ごく単純なクラスを利用して示した。

 大きなストーリーとしては、冒頭に書いた通り、JAX-RSはREST(RESTについては最後に紹介する参考文献を参照のこと)なアーキテクチャで分散システムを構築するためのフレームワークだ。しかし、必ずしもREST原則に従って利用する必要はない。

 例えば単純な既存のユーティリティクラスをWebサービス化することを考えてみよう。その場合は、RESTではなく、RPC(リモート関数)としてサービスを公開する方が適切だ。

 実際問題として、クライアントサイドのJavaScriptを駆使したシステムで、しかし10桁を超えるような金額を正確に計算する必要があるとしたら、JavaScriptで頑張るよりも、JavaでBigDecimalを利用した演算サービスを実装してそれを呼び出した方がよい。このような用途に対してRESTなアーキテクチャは意味を持たない。かといってEJBを持ち出すのは今となっては大げさ過ぎる。

 JAX-RSによる計算サービスこそが適切な解だ。

 以上を強調した上で(つまり、非RESTな利用方法も全く問題ないということ)、以下に参考文献を挙げる*8

*8 なぜ、非RESTでも問題ないかを強調するかというと、RESTは実に魅力的であり、合理的であり、示唆に富んだアーキテクチャパターンだからだ。そのために免疫なしにRESTを知ると、システムの適合性を無視して隅から隅までRESTなアーキテクチャでシステムを構築しようとして破綻する危険がある。


  • JavaによるRESTfulシステム構築
    − オライリー・ジャパン、ISBN978-4-87311-467-5
    − JAX-RSを利用してRESTでシステムを設計しJavaで実装するための方法を詳説した書籍であり、JAX-RSを活用するための必読書だ。余談ではあるが本稿の筆者が監訳をしている
  • Webを支える技術
    − 技術評論社、ISBN978-4-7741-4204-3
    − Webをプラットフォームとしてシステムを構築するために必要な情報を網羅した書籍。本書で解説されている内容は基礎知識であり、自分のものにしておく必要がある
「特集:JAX-RS入門」のインデックス

特集:JAX-RS入門

Copyright© Digital Advantage Corp. All Rights Reserved.

前のページへ |       
ページトップに戻る