WebLogic ServerでJAX-RS

2,140 views

Published on

JAX-RSはRESTful Webサービスに適した柔軟なAPIです。JAX-RSはJava EE 6に含 まれる他、
WebLogic Server 11gでも先取りして取り入れられています。今回は RESTful Webサービスの
概要とJAX-RSの基本について、WebLogic Serverの視点か ら説明します。

GlassFishユーザー・グループ・ジャパン 副会長
蓮沼 賢志 氏

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,140
On SlideShare
0
From Embeds
0
Number of Embeds
52
Actions
Shares
0
Downloads
36
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

WebLogic ServerでJAX-RS

  1. 1. JAX-RS on WebLogicMarch 21, 2013 HASUNUMA Kenji Vice president, GlassFish Users Group Japan k.hasunuma@coppermine.jp Twitter: @btnrouge (#wlstudy)
  2. 2. Jersey JAX-RS Since 2008
  3. 3. Introduction
  4. 4. HTTP (GET) 《黎明期のWorld Wide Web》ハイパーリンクによるHTML文書検索システム
  5. 5. HTTP (POST) 《クライアントからのデータ送信》動的HTML = Webアプリケーションの誕生
  6. 6. HTTP (REST)《Webアプリケーション技術の整理・汎用化》 REST (Representational State Transfer)
  7. 7. HTTP Status• 処理の正常/異常を示す唯一の指標• 3桁の数字1xx 情報2xx 成功3xx 転送(リダイレクト指示など)4xx エラー(原因はクライアント)5xx エラー(原因はサーバー)
  8. 8. What’s REST?
  9. 9. RESTful Webサービスとは?RESTの3要素に基づく• リソース (対象)• メソッド• URIStatelessである…Web本来の姿
  10. 10. RESTの3要素 - リソース• ネットワーク上に存在する情報 URIで識別され、状態を持つ• 性質: リクエストを受け付け、その時の 状態に応じてレスポンスを返す • 静的リソース: HTMLファイルなど • 動的リソース: Webアプリケーション
  11. 11. RESTの3要素 - メソッドメソッド 説明 GET リソースの状態を取得する POST リソースの状態を変更する PUT リソースを追加する DELETE リソースを削除する HEAD リソースのヘッダーを返すOPTIONS 有効なメソッドを返す
  12. 12. RESTの3要素 - URI• リソースを一意に識別する (Unified Resource Identifier)• Unixのファイルシステムに似たパス構 造を持つ = ツリー構造• 現在はURLと同義
  13. 13. Core Features
  14. 14. JAX-RSの処理フロー1回のリクエスト・レスポンスで処理が完結する
  15. 15. RESTの3要素とJAX-RS• リソース →リソースクラス (POJO)• メソッド →リソースクラスのメソッド + 対応するアノテーション @GET, @POST, @PUT, @DELETE• URI →リソースクラス(とメソッド)に 付加された@Pathアノテーション
  16. 16. リソースクラス• リソースの振る舞いを定義するPOJO• @Pathアノテーション付きのクラス• リクエスト→内容を判断し適切なメソ ッドに振り分け• EJB(Stateless or Singleton)で定義可 →EJB連携…CDIを使用するには必須
  17. 17. 簡単なリソースクラスの例@Path(”/hello”)public class HelloResource { @GET @Consumes(”application/x-www-urlencoded”) @Produces(”text/plain”) public String sayHello(@QueryParam(”q”) String name) { return “Hello, ” + name; }}
  18. 18. GET /hello?q=everybody@Path(”/hello”)public class HelloResource { @GET @Consumes(”application/x-www-urlencoded”) @Produces(”text/plain”) Response Request public String sayHello(@QueryParam(”q”) String name) { return “Hello, ” + name; }}
  19. 19. リソースクラスのメソッド引数アノテーション 設定される値@QueryParam クエリー・パラメーターの値@FormParam フォーム・パラメーターの値@PathParam URIの一部@MatrixParam Matrix URIの属性部分@HeaderParam リクエストヘッダーの値@CookieParam クッキーの値 (なし) リクエストボディー
  20. 20. GET /hello/everybody 参考: @PathParam@Path(”/hello/{q}”)public class HelloResource { @GET @Consumes(”application/x-www-urlencoded”) @Produces(”text/plain”) Response Request public String sayHello(@PathParam(”q”) String name) { return “Hello, ” + name; }}
  21. 21. 参考: @MatrixParamGET /position;latitude=35.75;longitude=139.72@Path("/position")public class PositionResource { @GET public String getPosition( @MatrixParam("latitude") double latitude, @MatrixParam("longitude") double longitude) { return String.format("%3.2f%s %3.2f%s", Math.abs(latitude), latitude == 0.0 ? "" : (latitude > 0.0 ? "N" : "S"), Math.abs(longitude), longitude == 0.0 ? "" : (longitude > 0.0 ? "E" : "W")); }}
  22. 22. JavaクラスとMIMEタイプの対応 Javaクラス MIMEタイプ byte[ ] String 任意のMIMEタイプ InputStream (*/*) Reader text/xml JavaBean application/xml (JAXB) application/jsonMultivaluedMap application/x-www-urlencoded Boolean text/plain Character ※プリミティブ型はauto-boxing Number
  23. 23. 特殊なMIMEタイプ• 最も汎用的な方法: MessageBodyReaderまたは MessageBodyWriterを拡張する• JAXBの使用が前提なら、JAXBのカス タマイズを行う方が容易• byte[ ]やInputStreamで受けて、独自に デコードする方法もあり(結構大変)
  24. 24. JAX-RSのHTTPステータスデフォルトで以下のいずれかを返す• 200 (OK) 処理が正常に終了した場合• 500 (Internal Server Error) 処理中に例外がスローされた場合
  25. 25. JAX-RSのHTTPステータスエラー時に500以外を返したい場合(例: パラメーター不正の場合に400)• WebApplicationException 任意のステータスを設定できるラン タイム例外
  26. 26. JAX-RSのHTTPステータス• JAX-RSはRESTfulである →正常/異常はHTTPステータスのみ →HTTPステータスの理解が重要• HTTPステータスは頻度にばらつき →頻出のものを確実に押さえる
  27. 27. How to deploy
  28. 28. JAX-RSのデプロイ方法• Webアプリケーションとしてデプロイ• 設定方法: 1. Applicationのサブクラスを作成 (web.xml不要、WLS 12c) 2. 実装固有のサーブレットを登録 (web.xml必須、WLS 11g (10.3.4-))
  29. 29. Applicationのサブクラスを作成// WebLogic 12c@ApplicationPath(“/app”)public MyApplication extends Application { // 通常は空の実装でよい} 下記のURLでアクセス可能: http://hostname/context-root/app/hello
  30. 30. 実装固有のサーブレットを登録<!-- WebLogic 11g (10.3.4) or lator --><servlet> <servlet-name>Jersey</servlet-name> <servlet-class>com.sun.jersey.spi.container .servlet.ServletContainer</servlet-class></servlet><servlet-mapping> <servlet-name>Jersey</servlet-name> <url-pattern>/app/*</url-pattern></servlet-mapping>
  31. 31. OEPEで開発する際の注意点• 動的Webプロジェクトで作成 (Servlet/JSPと同様)• ビルド・パスにWebLogicの共有ラ イブラリー(後述)を追加• weblogic.xmlの修正も忘れずに
  32. 32. 共有ライブラリ(JAX-RS) 名称 説明 要否 jsr311-api JAX-RS API & 実装 必須 jersey-bundle jackson-core-asljackson-mapper-asl JAXB拡張 任意 jackson-jaxrs (JSON対応) (推奨) jettison rome Atom用 任意
  33. 33. 共有ライブラリ(JAX-RS)
  34. 34. Demonstrations
  35. 35. Programming JAX-RS
  36. 36. 演習問題 (JAX-RSを使ってみよう)• ネットワーク上に存在するPCの情報を 管理するためのWebサービスを作成し てください。• 要求定義は下記補足資料を参照のこと: 「WebLogicでJAX-RS」演習問題
  37. 37. 解法のポイント1.リソースを明確にする• リソースは何か?• リソースのデータ構造は?2.URIを決める• 一意になるように• 階層構造も考慮に入れる3.メソッドを定義する• 要求に対して過不足のないように
  38. 38. 参考資料 (Web)JAX-RS 公式サイト• http://jsr311.java.net (JSR 311)• http://jersey.java.net (Jersey)講演者ブログ (本セッションのサポート)• http://www.coppermine.jp/docs/programming/
  39. 39. 参考資料 (書籍)• RESTful Webサービス Leonard Richardson, Sam Ruby 共著 オライリー・ジャパン ISBN978-4873113531• JavaによるRESTfulシステム構築 Bill Burke 著 オライリー・ジャパン ISBN978-4873114675• Beginning Java EE 6 Antonio Goncalves 著 翔泳社 ISBN978-4798124605
  40. 40. JAX-RS on WebLogicMarch 21, 2013 HASUNUMA Kenji k.hasunuma@coppermine.jp

×