Download pdf - JAX-RS on WebLogic

Transcript
Page 1: JAX-RS on WebLogic

JAX-RS on WebLogicMarch 21, 2013

HASUNUMA KenjiVice president, GlassFish Users Group Japan

[email protected]: @btnrouge (#wlstudy)

Page 2: JAX-RS on WebLogic

JAX-RSJersey

Since 2008

Page 3: JAX-RS on WebLogic

Introduction

Page 4: JAX-RS on WebLogic

HTTP (GET)

《黎明期のWorld Wide Web》ハイパーリンクによるHTML文書検索システム

Page 5: JAX-RS on WebLogic

HTTP (POST)

《クライアントからのデータ送信》動的HTML = Webアプリケーションの誕生

Page 6: JAX-RS on WebLogic

HTTP (REST)

《Webアプリケーション技術の整理・汎用化》REST (Representational State Transfer)

Page 7: JAX-RS on WebLogic

HTTP Status•処理の正常/異常を示す唯一の指標

• 3桁の数字

1xx 情報2xx 成功3xx 転送(リダイレクト指示など)4xx エラー(原因はクライアント)5xx エラー(原因はサーバー)

Page 8: JAX-RS on WebLogic

What’s REST?

Page 9: JAX-RS on WebLogic

RESTful Webサービスとは?

RESTの3要素に基づく

•リソース (対象)

•メソッド

•URIStatelessである…Web本来の姿

Page 10: JAX-RS on WebLogic

RESTの3要素 - リソース

•ネットワーク上に存在する情報URIで識別され、状態を持つ

•性質: リクエストを受け付け、その時の状態に応じてレスポンスを返す

•静的リソース: HTMLファイルなど

•動的リソース: Webアプリケーション

Page 11: JAX-RS on WebLogic

RESTの3要素 - メソッド

メソッド 説明GET リソースの状態を取得する

POST リソースの状態を変更するPUT リソースを追加する

DELETE リソースを削除するHEAD リソースのヘッダーを返す

OPTIONS 有効なメソッドを返す

Page 12: JAX-RS on WebLogic

RESTの3要素 - URI

•リソースを一意に識別する (Unified Resource Identifier)

• Unixのファイルシステムに似たパス構

造を持つ = ツリー構造

•現在はURLと同義

Page 13: JAX-RS on WebLogic

Core Features

Page 14: JAX-RS on WebLogic

JAX-RSの処理フロー

1回のリクエスト・レスポンスで処理が完結する

Page 15: JAX-RS on WebLogic

RESTの3要素とJAX-RS

•リソース →リソースクラス (POJO)

•メソッド →リソースクラスのメソッド + 対応するアノテーション@GET, @POST, @PUT, @DELETE

• URI →リソースクラス(とメソッド)に付加された@Pathアノテーション

Page 16: JAX-RS on WebLogic

リソースクラス

•リソースの振る舞いを定義するPOJO

• @Pathアノテーション付きのクラス

•リクエスト→内容を判断し適切なメソッドに振り分け

• EJB(Stateless or Singleton)で定義可→EJB連携…CDIを使用するには必須

Page 17: JAX-RS on WebLogic

@Path(”/hello”)

public class HelloResource {

@GET

@Consumes(”application/x-www-urlencoded”)

@Produces(”text/plain”)

public String sayHello(@QueryParam(”q”) String name) {

return “Hello, ” + name;

}

}

簡単なリソースクラスの例

Page 18: JAX-RS on WebLogic

@Path(”/hello”)

public class HelloResource {

@GET

@Consumes(”application/x-www-urlencoded”)

@Produces(”text/plain”)

public String sayHello(@QueryParam(”q”) String name) {

return “Hello, ” + name;

}

}

GET /hello?q=everybody

Response Request

Page 19: JAX-RS on WebLogic

リソースクラスのメソッド引数アノテーション 設定される値@QueryParam クエリー・パラメーターの値@FormParam フォーム・パラメーターの値@PathParam URIの一部

@MatrixParam Matrix URIの属性部分@HeaderParam リクエストヘッダーの値@CookieParam クッキーの値

(なし) リクエストボディー

Page 20: JAX-RS on WebLogic

@Path(”/hello/{q}”)

public class HelloResource {

@GET

@Consumes(”application/x-www-urlencoded”)

@Produces(”text/plain”)

public String sayHello(@PathParam(”q”) String name) {

return “Hello, ” + name;

}

}

GET /hello/everybody

Response Request

参考: @PathParam

Page 21: JAX-RS on WebLogic

@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")); }}

GET /position;latitude=35.75;longitude=139.72参考: @MatrixParam

Page 22: JAX-RS on WebLogic

JavaクラスとMIMEタイプの対応Javaクラス MIMEタイプ

byte[ ]任意のMIMEタイプ

(*/*)String 任意のMIMEタイプ

(*/*)InputStream任意のMIMEタイプ

(*/*)Reader

任意のMIMEタイプ(*/*)

JavaBean(JAXB)

text/xmlJavaBean

(JAXB) application/xmlJavaBean(JAXB)

application/jsonMultivaluedMap application/x-www-urlencoded

Boolean text/plain※プリミティブ型はauto-boxing

Charactertext/plain

※プリミティブ型はauto-boxingNumber

text/plain※プリミティブ型はauto-boxing

Page 23: JAX-RS on WebLogic

特殊なMIMEタイプ

•最も汎用的な方法:MessageBodyReaderまたはMessageBodyWriterを拡張する

• JAXBの使用が前提なら、JAXBのカスタマイズを行う方が容易

• byte[ ]やInputStreamで受けて、独自にデコードする方法もあり(結構大変)

Page 24: JAX-RS on WebLogic

JAX-RSのHTTPステータス

デフォルトで以下のいずれかを返す

•200 (OK)処理が正常に終了した場合

•500 (Internal Server Error)処理中に例外がスローされた場合

Page 25: JAX-RS on WebLogic

JAX-RSのHTTPステータス

エラー時に500以外を返したい場合(例: パラメーター不正の場合に400)

•WebApplicationException任意のステータスを設定できるランタイム例外

Page 26: JAX-RS on WebLogic

JAX-RSのHTTPステータス

•JAX-RSはRESTfulである→正常/異常はHTTPステータスのみ→HTTPステータスの理解が重要

•HTTPステータスは頻度にばらつき→頻出のものを確実に押さえる

Page 27: JAX-RS on WebLogic

How to deploy

Page 28: JAX-RS on WebLogic

JAX-RSのデプロイ方法

•Webアプリケーションとしてデプロイ

•設定方法:

1.Applicationのサブクラスを作成(web.xml不要、WLS 12c)

2.実装固有のサーブレットを登録(web.xml必須、WLS 11g (10.3.4-))

Page 29: JAX-RS on WebLogic

// WebLogic 12c@ApplicationPath(“/app”)public MyApplication extends Application { // 通常は空の実装でよい}

下記のURLでアクセス可能:http://hostname/context-root/app/hello

Applicationのサブクラスを作成

Page 30: JAX-RS on WebLogic

実装固有のサーブレットを登録

<!-- 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>

Page 31: JAX-RS on WebLogic

OEPEで開発する際の注意点

•動的Webプロジェクトで作成(Servlet/JSPと同様)

•ビルド・パスにWebLogicの共有ライブラリー(後述)を追加

•weblogic.xmlの修正も忘れずに

Page 32: JAX-RS on WebLogic

共有ライブラリ(JAX-RS)名称 説明 要否

jsr311-apiJAX-RS API & 実装 必須

jersey-bundleJAX-RS API & 実装 必須

jackson-core-asl

JAXB拡張(JSON対応)

任意(推奨)

jackson-mapper-asl JAXB拡張(JSON対応)

任意(推奨)jackson-jaxrs

JAXB拡張(JSON対応)

任意(推奨)

jettison

JAXB拡張(JSON対応)

任意(推奨)

rome Atom用 任意

Page 33: JAX-RS on WebLogic

共有ライブラリ(JAX-RS)

Page 34: JAX-RS on WebLogic

Demonstrations

Page 35: JAX-RS on WebLogic

Programming JAX-RS

Page 36: JAX-RS on WebLogic

演習問題 (JAX-RSを使ってみよう)

•ネットワーク上に存在するPCの情報を管理するためのWebサービスを作成してください。

• 要求定義は下記補足資料を参照のこと:「WebLogicでJAX-RS」演習問題

Page 37: JAX-RS on WebLogic

解法のポイント1.リソースを明確にする• リソースは何か?• リソースのデータ構造は?

2.URIを決める• 一意になるように• 階層構造も考慮に入れる

3.メソッドを定義する• 要求に対して過不足のないように

Page 38: JAX-RS on WebLogic

参考資料 (Web)

JAX-RS 公式サイト

• http://jsr311.java.net (JSR 311)

• http://jersey.java.net (Jersey)

講演者ブログ (本セッションのサポート)

• http://www.coppermine.jp/docs/programming/

Page 39: JAX-RS on WebLogic

参考資料 (書籍)• RESTful Webサービス

Leonard Richardson, Sam Ruby 共著オライリー・ジャパン ISBN978-4873113531

• JavaによるRESTfulシステム構築Bill Burke 著オライリー・ジャパン ISBN978-4873114675

• Beginning Java EE 6Antonio Goncalves 著翔泳社 ISBN978-4798124605

Page 40: JAX-RS on WebLogic

JAX-RS on WebLogicMarch 21, 2013

HASUNUMA [email protected]


Recommended