36
JSFJAX-RSで作る Thin Server Architecture GlassFish Users Group Japan 勉強会 2013 #1 2013/06/14 Toshiaki Maki (@making) 13614日金曜日

JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

Embed Size (px)

Citation preview

Page 1: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JSFとJAX-RSで作るThin Server Architecture

GlassFish Users Group Japan 勉強会 2013 #1

2013/06/14 Toshiaki Maki (@making)

13年6月14日金曜日

Page 2: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

自己紹介• Toshiaki Maki (@making)

• http://blog.ik.am

• SIer

• 金魚本一部翻訳

• 趣味でJavaEE

13年6月14日金曜日

Page 3: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

自己紹介• Toshiaki Maki (@making)

• http://blog.ik.am

• SIer

• 金魚本一部翻訳

• 趣味でJavaEE

13年6月14日金曜日

Page 4: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

自己紹介• Toshiaki Maki (@making)

• http://blog.ik.am

• SIer

• 金魚本一部翻訳

• 趣味でJavaEELT希望

者は何かコメントすれば蓮沼さんが拾ってくれます!

13年6月14日金曜日

Page 5: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

INDEX

• Thin Server Architectureとは?

• Java EEで実現するには?

• まとめ

13年6月14日金曜日

Page 6: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

Thin Server Architectureとは?

13年6月14日金曜日

Page 7: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

従来のServer Architecture

ServerWeb

Browser

Form

HTML

Controller

View

Model

13年6月14日金曜日

Page 8: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

Thin Server Architecture• 従来のサーバーサイドのアーキテクチャからビュー処理を除き、クライアントサイド(ブラウザ)でビュー処理• HTTP(or WebSocket etc)というシンプルなプロトコル• JavaOne2012 Project Avatarの文脈で登場したが、前からある概念

ServerClient JSON/REST

View処理 業務処理

13年6月14日金曜日

Page 9: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

Java EEで実現するには?

13年6月14日金曜日

Page 10: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JavaEEによるTSA実装• JAX-RS + JavaScript MVCフレームワーク

(Backbone.jsなど)

• Example: http://bit.ly/11Cyxpu

JAX-RSServer

JSON

Web Browser(Backbone.js)

13年6月14日金曜日

Page 11: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JavaEEによるTSA実装• JAX-RS + JavaScript MVCフレームワーク

(Backbone.jsなど)

• Example: http://bit.ly/11Cyxpu

JAX-RSServer

JSON

Web Browser(Backbone.js)

Router

View

Model/Collection

Template

13年6月14日金曜日

Page 12: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JavaEEによるTSA実装• JAX-RS + JavaScript MVCフレームワーク

(Backbone.jsなど)

• Example: http://bit.ly/11Cyxpu

JAX-RSServer

JSON

Web Browser(Backbone.js)

Router

View

Model/Collection

Template

JavaScript書きたくない…

13年6月14日金曜日

Page 13: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JavaScriptを書きたくない

13年6月14日金曜日

Page 14: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JSF!

13年6月14日金曜日

Page 15: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JSFとJAX-RSでどうやって実現するか?

• JSF2.0のAjaxサポート≠ RESTサポート

• JAX-RSでRESTfullなサーバー処理を実装してもJSFからアクセスできない!

13年6月14日金曜日

Page 16: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JSFとJAX-RSでどうやって実現するか?

• JSF2.0のAjaxサポート≠ RESTサポート

• JAX-RSでRESTfullなサーバー処理を実装してもJSFからアクセスできない!

JSFのタグはRESTアクセスをサポートしていない

13年6月14日金曜日

Page 17: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JSFとJAX-RSでどうやって実現するか?

• JSF2.0のAjaxサポート≠ RESTサポート

• JAX-RSでRESTfullなサーバー処理を実装してもJSFからアクセスできない!

JSFのタグはRESTアクセスをサポートしていない

だがJSFのリッチなコンポーネントを使ってクライアントを実装したい!

13年6月14日金曜日

Page 18: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JAX-RS 2.0

JSF

Facelets

ManagedBean

Ajax

JAX-RSServer

EJB

13年6月14日金曜日

Page 19: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JAX-RS 2.0

• クライアントAPIサポート

JSF

Facelets

ManagedBean

Ajax

JAX-RSServer

EJB

13年6月14日金曜日

Page 20: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

JAX-RS 2.0

• クライアントAPIサポート

JSF

Facelets

ManagedBean

Ajax JAX-RSClient

JAX-RSServer

JSON EJB

13年6月14日金曜日

Page 21: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

EJB

JSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行う

JSF

Facelets

ManagedBean

Ajax JAX-RSClient

JAX-RSServer

JSON

13年6月14日金曜日

Page 22: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

EJB

JSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行う

JSF

Facelets

ManagedBean

Ajax JAX-RSClient

JAX-RSServer

JSON

13年6月14日金曜日

Page 23: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

EJB

JSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行う

JSF

Facelets

ManagedBean

Ajax JAX-RSClient

JAX-RSServer

JSONClient

13年6月14日金曜日

Page 24: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

EJB

JSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行う

JSF

Facelets

ManagedBean

Ajax JAX-RSClient

JAX-RSServer

JSONClient Server

13年6月14日金曜日

Page 25: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

Demohttp://bit.ly/jsfjaxrs

13年6月14日金曜日

Page 26: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

コード例(REST client)

• 詳細は http://bit.ly/jsfjaxrs

@Rest @Singleton public class TodoRestRepository implements TodoRepository { private static final String TODO_RESOURCE_PATH = "http://localhost:8080/todo-tsa/todo"; private final Client client; public TodoRestRepository() { this.client = ClientBuilder.newClient(); } @Override public Collection<Todo> findAll() { return this.client.target(TODO_RESOURCE_PATHTH).request(MediaType.APPLICATION_JSON_TYPE) .get(new GenericType<Collection<Todo>>); } @Override public Todo create(Todo todo) { return this.client.target(TODO_RESOURCE_PATH).request() .post(Entity.entity(todo, MediaType.APPLICATION_JSON_TYPE)).readEntity(Todo.class); } ...

13年6月14日金曜日

Page 27: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

コード例(ManagedBean)

• 詳細は http://bit.ly/jsfjaxrs

@ManagedBean(name = "todoManagedBean") @ViewScopedpublic class TodoManagedBean { protected Collection<Todo> todos; protected Todo todo = new Todo(); @Inject @Rest protected TodoRepository todoRepository; public void findAll() { this.todos = todoRepository.findAll(); } public void create() { todoRepository.create(this.todo); findAll(); this.todo = new Todo(); } ...

https://github.com/making/todo-tsa

13年6月14日金曜日

Page 28: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

TSAのメリットJSF

Facelets

ManagedBean

Ajax JAX-RSClient

JAX-RSServer

JSON

13年6月14日金曜日

Page 29: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

TSAのメリットJSF JAX-RS

ClientJAX-RSServer

JSON

13年6月14日金曜日

Page 30: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

TSAのメリットJSF JAX-RS

ClientJAX-RSServer

JSON

13年6月14日金曜日

Page 31: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

TSAのメリットJSF JAX-RS

ClientJAX-RSServer

JSON

Java-FX JAX-RSClient

JSON

13年6月14日金曜日

Page 32: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

TSAのメリットJSF JAX-RS

ClientJAX-RSServer

JSON

Java-FX

Smart Devices JSON

JAX-RSClient

JSON

Web Browser JSON

.NET JSON

13年6月14日金曜日

Page 33: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

TSAのメリットJSF JAX-RS

ClientJAX-RSServer

JSON

Java-FX

Smart Devices JSON

JAX-RSClient

JSON

クライアントが変わってもサーバーサイドはそのまま利用できる

Web Browser JSON

.NET JSON

13年6月14日金曜日

Page 34: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

デメリット

• グルーコード

• HTTPオーバーヘッド

• 安易にコンポーネント詰め過ぎてDOM死

13年6月14日金曜日

Page 35: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

今後の展望• 認証はOAuth2でアクセストークンを発行。

• RESTリソースを自前で管理しているならResource Owner Password Credentials(grant_type=password)でOK?

• Project Avatar?

• WebSocket

• Server-Sent Events

13年6月14日金曜日

Page 36: JSFとJAX-RSで作る Thin Server Architecture #glassfishjp

まとめ• JSFとJAX-RSでTSA

• サーバー: JAX-RS Server

• クライアント: JSF+ JAX-RS Client

• TSAはマルチクライアント(Java-FX, Smart

Devices,…)時代に注目のアーキテクチャ

13年6月14日金曜日