Upload
toshiaki-maki
View
5.766
Download
0
Embed Size (px)
Citation preview
JSFとJAX-RSで作るThin Server Architecture
GlassFish Users Group Japan 勉強会 2013 #1
2013/06/14 Toshiaki Maki (@making)
13年6月14日金曜日
自己紹介• Toshiaki Maki (@making)
• http://blog.ik.am
• SIer
• 金魚本一部翻訳
• 趣味でJavaEE
13年6月14日金曜日
自己紹介• Toshiaki Maki (@making)
• http://blog.ik.am
• SIer
• 金魚本一部翻訳
• 趣味でJavaEE
13年6月14日金曜日
自己紹介• Toshiaki Maki (@making)
• http://blog.ik.am
• SIer
• 金魚本一部翻訳
• 趣味でJavaEELT希望
者は何かコメントすれば蓮沼さんが拾ってくれます!
13年6月14日金曜日
INDEX
• Thin Server Architectureとは?
• Java EEで実現するには?
• まとめ
13年6月14日金曜日
Thin Server Architectureとは?
13年6月14日金曜日
従来のServer Architecture
ServerWeb
Browser
Form
HTML
Controller
View
Model
13年6月14日金曜日
Thin Server Architecture• 従来のサーバーサイドのアーキテクチャからビュー処理を除き、クライアントサイド(ブラウザ)でビュー処理• HTTP(or WebSocket etc)というシンプルなプロトコル• JavaOne2012 Project Avatarの文脈で登場したが、前からある概念
ServerClient JSON/REST
View処理 業務処理
13年6月14日金曜日
Java EEで実現するには?
13年6月14日金曜日
JavaEEによるTSA実装• JAX-RS + JavaScript MVCフレームワーク
(Backbone.jsなど)
• Example: http://bit.ly/11Cyxpu
JAX-RSServer
JSON
Web Browser(Backbone.js)
13年6月14日金曜日
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日金曜日
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日金曜日
JavaScriptを書きたくない
13年6月14日金曜日
JSF!
13年6月14日金曜日
JSFとJAX-RSでどうやって実現するか?
• JSF2.0のAjaxサポート≠ RESTサポート
• JAX-RSでRESTfullなサーバー処理を実装してもJSFからアクセスできない!
13年6月14日金曜日
JSFとJAX-RSでどうやって実現するか?
• JSF2.0のAjaxサポート≠ RESTサポート
• JAX-RSでRESTfullなサーバー処理を実装してもJSFからアクセスできない!
JSFのタグはRESTアクセスをサポートしていない
13年6月14日金曜日
JSFとJAX-RSでどうやって実現するか?
• JSF2.0のAjaxサポート≠ RESTサポート
• JAX-RSでRESTfullなサーバー処理を実装してもJSFからアクセスできない!
JSFのタグはRESTアクセスをサポートしていない
だがJSFのリッチなコンポーネントを使ってクライアントを実装したい!
13年6月14日金曜日
JAX-RS 2.0
JSF
Facelets
ManagedBean
Ajax
JAX-RSServer
EJB
13年6月14日金曜日
JAX-RS 2.0
• クライアントAPIサポート
JSF
Facelets
ManagedBean
Ajax
JAX-RSServer
EJB
13年6月14日金曜日
JAX-RS 2.0
• クライアントAPIサポート
JSF
Facelets
ManagedBean
Ajax JAX-RSClient
JAX-RSServer
JSON EJB
13年6月14日金曜日
EJB
JSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行う
JSF
Facelets
ManagedBean
Ajax JAX-RSClient
JAX-RSServer
JSON
13年6月14日金曜日
EJB
JSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行う
JSF
Facelets
ManagedBean
Ajax JAX-RSClient
JAX-RSServer
JSON
13年6月14日金曜日
EJB
JSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行う
JSF
Facelets
ManagedBean
Ajax JAX-RSClient
JAX-RSServer
JSONClient
13年6月14日金曜日
EJB
JSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行う
JSF
Facelets
ManagedBean
Ajax JAX-RSClient
JAX-RSServer
JSONClient Server
13年6月14日金曜日
コード例(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日金曜日
コード例(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日金曜日
TSAのメリットJSF
Facelets
ManagedBean
Ajax JAX-RSClient
JAX-RSServer
JSON
13年6月14日金曜日
TSAのメリットJSF JAX-RS
ClientJAX-RSServer
JSON
13年6月14日金曜日
TSAのメリットJSF JAX-RS
ClientJAX-RSServer
JSON
13年6月14日金曜日
TSAのメリットJSF JAX-RS
ClientJAX-RSServer
JSON
Java-FX JAX-RSClient
JSON
13年6月14日金曜日
TSAのメリットJSF JAX-RS
ClientJAX-RSServer
JSON
Java-FX
Smart Devices JSON
JAX-RSClient
JSON
Web Browser JSON
.NET JSON
13年6月14日金曜日
TSAのメリットJSF JAX-RS
ClientJAX-RSServer
JSON
Java-FX
Smart Devices JSON
JAX-RSClient
JSON
クライアントが変わってもサーバーサイドはそのまま利用できる
Web Browser JSON
.NET JSON
13年6月14日金曜日
デメリット
• グルーコード
• HTTPオーバーヘッド
• 安易にコンポーネント詰め過ぎてDOM死
13年6月14日金曜日
今後の展望• 認証はOAuth2でアクセストークンを発行。
• RESTリソースを自前で管理しているならResource Owner Password Credentials(grant_type=password)でOK?
• Project Avatar?
• WebSocket
• Server-Sent Events
13年6月14日金曜日
まとめ• JSFとJAX-RSでTSA
• サーバー: JAX-RS Server
• クライアント: JSF+ JAX-RS Client
• TSAはマルチクライアント(Java-FX, Smart
Devices,…)時代に注目のアーキテクチャ
13年6月14日金曜日