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

7,267 views
7,026 views

Published on

Published in: Technology

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

  1. 1. JSFとJAX-RSで作るThin Server ArchitectureGlassFish Users Group Japan 勉強会 2013 #12013/06/14 Toshiaki Maki (@making)13年6月14日金曜日
  2. 2. 自己紹介• Toshiaki Maki (@making)• http://blog.ik.am• SIer• 金魚本一部翻訳• 趣味でJavaEE13年6月14日金曜日
  3. 3. 自己紹介• Toshiaki Maki (@making)• http://blog.ik.am• SIer• 金魚本一部翻訳• 趣味でJavaEE13年6月14日金曜日
  4. 4. 自己紹介• Toshiaki Maki (@making)• http://blog.ik.am• SIer• 金魚本一部翻訳• 趣味でJavaEELT希望者は何かコメントすれば蓮沼さんが拾ってくれます!13年6月14日金曜日
  5. 5. INDEX• Thin Server Architectureとは?• Java EEで実現するには?• まとめ13年6月14日金曜日
  6. 6. Thin ServerArchitectureとは?13年6月14日金曜日
  7. 7. 従来のServer ArchitectureServerWebBrowserFormHTMLControllerViewModel13年6月14日金曜日
  8. 8. Thin Server Architecture• 従来のサーバーサイドのアーキテクチャからビュー処理を除き、クライアントサイド(ブラウザ)でビュー処理• HTTP(or WebSocket etc)というシンプルなプロトコル• JavaOne2012 Project Avatarの文脈で登場したが、前からある概念ServerClient JSON/RESTView処理 業務処理13年6月14日金曜日
  9. 9. Java EEで実現するには?13年6月14日金曜日
  10. 10. JavaEEによるTSA実装• JAX-RS + JavaScript MVCフレームワーク(Backbone.jsなど)• Example: http://bit.ly/11CyxpuJAX-RSServerJSONWeb Browser(Backbone.js)13年6月14日金曜日
  11. 11. JavaEEによるTSA実装• JAX-RS + JavaScript MVCフレームワーク(Backbone.jsなど)• Example: http://bit.ly/11CyxpuJAX-RSServerJSONWeb Browser(Backbone.js)RouterViewModel/CollectionTemplate13年6月14日金曜日
  12. 12. JavaEEによるTSA実装• JAX-RS + JavaScript MVCフレームワーク(Backbone.jsなど)• Example: http://bit.ly/11CyxpuJAX-RSServerJSONWeb Browser(Backbone.js)RouterViewModel/CollectionTemplateJavaScript書きたくない…13年6月14日金曜日
  13. 13. JavaScriptを書きたくない13年6月14日金曜日
  14. 14. JSF!13年6月14日金曜日
  15. 15. JSFとJAX-RSでどうやって実現するか?• JSF2.0のAjaxサポート≠ RESTサポート• JAX-RSでRESTfullなサーバー処理を実装してもJSFからアクセスできない!13年6月14日金曜日
  16. 16. JSFとJAX-RSでどうやって実現するか?• JSF2.0のAjaxサポート≠ RESTサポート• JAX-RSでRESTfullなサーバー処理を実装してもJSFからアクセスできない!JSFのタグはRESTアクセスをサポートしていない13年6月14日金曜日
  17. 17. JSFとJAX-RSでどうやって実現するか?• JSF2.0のAjaxサポート≠ RESTサポート• JAX-RSでRESTfullなサーバー処理を実装してもJSFからアクセスできない!JSFのタグはRESTアクセスをサポートしていないだがJSFのリッチなコンポーネントを使ってクライアントを実装したい!13年6月14日金曜日
  18. 18. JAX-RS 2.0JSFFaceletsManagedBeanAjaxJAX-RSServerEJB13年6月14日金曜日
  19. 19. JAX-RS 2.0• クライアントAPIサポートJSFFaceletsManagedBeanAjaxJAX-RSServerEJB13年6月14日金曜日
  20. 20. JAX-RS 2.0• クライアントAPIサポートJSFFaceletsManagedBeanAjaxJAX-RSClientJAX-RSServerJSON EJB13年6月14日金曜日
  21. 21. EJBJSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行うJSFFaceletsManagedBeanAjaxJAX-RSClientJAX-RSServerJSON13年6月14日金曜日
  22. 22. EJBJSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行うJSFFaceletsManagedBeanAjaxJAX-RSClientJAX-RSServerJSON13年6月14日金曜日
  23. 23. EJBJSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行うJSFFaceletsManagedBeanAjaxJAX-RSClientJAX-RSServerJSONClient13年6月14日金曜日
  24. 24. EJBJSFによる広義のTSA• JSFもクライアントとみなす• Client側のManagedBeanでは業務処理を行わない• 業務処理はServer側のEJB等で行うJSFFaceletsManagedBeanAjaxJAX-RSClientJAX-RSServerJSONClient Server13年6月14日金曜日
  25. 25. Demohttp://bit.ly/jsfjaxrs13年6月14日金曜日
  26. 26. コード例(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() {returnthis.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日金曜日
  27. 27. コード例(ManagedBean)• 詳細は http://bit.ly/jsfjaxrs@ManagedBean(name = "todoManagedBean") @ViewScopedpublic class TodoManagedBean {protected Collection<Todo> todos;protected Todo todo = new Todo();@Inject @Restprotected 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-tsa13年6月14日金曜日
  28. 28. TSAのメリットJSFFaceletsManagedBeanAjaxJAX-RSClientJAX-RSServerJSON13年6月14日金曜日
  29. 29. TSAのメリットJSF JAX-RSClientJAX-RSServerJSON13年6月14日金曜日
  30. 30. TSAのメリットJSF JAX-RSClientJAX-RSServerJSON13年6月14日金曜日
  31. 31. TSAのメリットJSF JAX-RSClientJAX-RSServerJSONJava-FX JAX-RSClientJSON13年6月14日金曜日
  32. 32. TSAのメリットJSF JAX-RSClientJAX-RSServerJSONJava-FXSmart Devices JSONJAX-RSClientJSONWeb Browser JSON.NET JSON13年6月14日金曜日
  33. 33. TSAのメリットJSF JAX-RSClientJAX-RSServerJSONJava-FXSmart Devices JSONJAX-RSClientJSONクライアントが変わってもサーバーサイドはそ の ま ま 利 用 で き るWeb Browser JSON.NET JSON13年6月14日金曜日
  34. 34. デメリット• グルーコード• HTTPオーバーヘッド• 安易にコンポーネント詰め過ぎてDOM死13年6月14日金曜日
  35. 35. 今後の展望• 認証はOAuth2でアクセストークンを発行。• RESTリソースを自前で管理しているならResource Owner PasswordCredentials(grant_type=password)でOK?• Project Avatar?• WebSocket• Server-Sent Events13年6月14日金曜日
  36. 36. まとめ• JSFとJAX-RSでTSA• サーバー: JAX-RS Server• クライアント: JSF+ JAX-RS Client• TSAはマルチクライアント(Java-FX, SmartDevices,…)時代に注目のアーキテクチャ13年6月14日金曜日

×