Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

8.850 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie

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日金曜日

×