T2@java-ja#toyama

2,186 views

Published on

T2でつなごう~つなぐつながるWebフレームワークPHPからJavaへ行こうする向け機能も~

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,186
On SlideShare
0
From Embeds
0
Number of Embeds
107
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

T2@java-ja#toyama

  1. 1. T2でつなごう! ~つなぐつながるWebフレームワーク PHPからJavaへ移行する人向け機能も~ 富山勉強会 2009/04/04
  2. 2. 自己紹介 名前 米林 正明 ID id:yone098 所属 株式会社Abby 代表取締役社長
  3. 3. 自己紹介 出身
  4. 4. 自己紹介 出身 富山
  5. 5. 自己紹介 好きです 富山
  6. 6. 自己紹介 カターレ富山 初勝利おめでと う!!!!!
  7. 7. 一句 富山県 雷鳥 立山 ますのすし❤
  8. 8. Agenda T2の概要 T2の仕組み T2のスタイル T2の目指す所 機能紹介 DIコンテナ非依存 今後の展開 デモ
  9. 9. T2 - The WEB Connector - T2の概要
  10. 10. Webを取り巻く環境の進化 クライアント HTML Flex3 Ajax Param XML AMF3 フレームワーク Struts Struts2 BlazeDS サーバ Action Action POJO Support
  11. 11. Webを取り巻く環境 無理なが 無理なが
  12. 12. T2とは T2とは シンプルなWebフレームワーク フィルタ指向 アノテーションベース テーマ「つなぐ・つながる」 ユーザと開発者を 実案件と楽しさを あらゆるクライアントとサーバアプリを クライアントとユーザーコードの仲介役
  13. 13. T2とは T2とは クライアント側は自由に選択可能 フォームのサブミット Ajaxリクエスト/REST Flex/AIR/Silverlightなどのリッチクライアント Webサービス 統一したプログラミングモデルの提供 クライアントがどうであっても常に同じように作れ る。作り方が変わらない 一貫したスキルセットで開発可能
  14. 14. T2とは つなぐ つながる
  15. 15. T2でつなごう! クライアント T2! サーバ
  16. 16. T2の仕組み T2の仕組み
  17. 17. T2の基本的な仕組み フィルタベースのWebフレームワーク URLとJavaオブジェクト(POJO)をマッチング アノテーションでマッチング マッチしたPOJOから適切なメソッドを選択 メソッドを実行 行き先と遷移方法を指定するNavigationインタ フェースの実装を返す T2がそれに従って遷移する テンプレートエンジンやレンダリングは任意で指定 JSP、ZPT、Mayaaなんでも可能
  18. 18. T2の基本的な仕組み リクエストURLと と リクエスト リクエスト がマッチ? POJOがマッチ? マッチした マッチしたPOJOのメソッド した の マッチ? とマッチ? 対象メソッドの 対象メソッドの実行 メソッド Navigationによる次の遷 による次 による レスポンス 移先と方法の 移先と方法の決定 ブラウザ
  19. 19. T2 - The WEB Connector - T2のスタイル
  20. 20. T2のスタイル アノテーションドリブン エントリーポイントのPOJOにアノテーション付与 エントリーポイントの分かりやすさ重視 規約とアノテーションを適切に利用 @GET サーバ @ActionPath(“/hoge”) @POST
  21. 21. T2のスタイル 基本はステートレス
  22. 22. T2のスタイル 基本はステートレス 特定のコンテナへ依存しない コンテナなくて コンテナなくて もOK
  23. 23. T2のスタイル ユーザーに介入してほしい コアはシンプルに。 エクステンションで便利機能を提供 プロジェクトごとに必要な機能を作るのも簡単 ユーザが制御可能だと自信をもって言え 制御可能だと自信をもって言 制御可能だと自信をもって る事がとても重要。 そのための徹底的なシンプルさ。
  24. 24. T2とは つなぐ つながる
  25. 25. T2 - The WEB Connector - T2の目指す所
  26. 26. T2の目指す所 マルチビューをさばける 過渡期でも使える 依存が少ない ユーザーが支配出来る・やりすぎない Webクライアントの自由度を妨げない Formサブミット リッチクライアント Ajax Webサービス
  27. 27. T2 - The WEB Connector - 機能紹介
  28. 28. T2 - The WEB Connector - リクエストとPOJOの マッピング
  29. 29. T2の基本的な仕組み リクエストURLと と リクエスト リクエスト がマッチ? POJOがマッチ? マッチした マッチしたPOJOのメソッド した の マッチ? とマッチ? 対象メソッドの 対象メソッドの実行 メソッド Navigationによる次の遷 による次 による レスポンス 移先と方法の 移先と方法の決定 ブラウザ
  30. 30. URLとPageのマッピング STEP1:@Pageでクラス特定 でクラス特定 http://yoursite.com/t2app/hello/world @Page(“/hello”) public class MyHello { …
  31. 31. T2 - The WEB Connector - リクエスト内容と アクションメソッドの マッピング
  32. 32. T2の基本的な仕組み リクエストURLと と リクエスト リクエスト がマッチ? POJOがマッチ? マッチした マッチしたPOJOのメソッド した の マッチ? とマッチ? 対象メソッドの 対象メソッドの実行 メソッド Navigationによる次の遷 による次 による レスポンス 移先と方法の 移先と方法の決定 ブラウザ
  33. 33. 基本機能 STEP2:メソッドアノテーションでメソッド特定 2 メソッドアノテーションでメソッド特定 メソッドアノテーション http://yoursite.com/t2app/hello/world @Page(“/hello”) public class MyHello { @GET @ActionPath(“/world”) public Navigation helloworld(){ …
  34. 34. メソッド特定方法 のリクエストで @GET GETのリクエストで かつ のパスの @ActionPath(“/world”) /worldのパスの場合 public Navigation helloworld(){ … 全マッチの場合、呼び出される。 マッチの場合、 される。
  35. 35. メソッドアノテーション @GET,@POST @ActionPath @ActionParam リクエストパラメータのkey key-value指定も可能 @Ajax @Amf (0.6から) @Default
  36. 36. アノテーションマッチ 複数のメソッドがマッチした場合 たくさんアノテーションがマッチした方を優先 同じ数のアノテーションがマッチした場合 先に見つかったほうを使用 マッチするのがなかった場合 @Defaultがついたメソッドを呼ぶ @Defaultつきがない場合、エラー
  37. 37. メソッド引数特定方法 引数のアノテーションを見て、適切なコン ポーネントをインジェクト @RequestParam @RequestHeader @SessionAttr @Upload @Form @Index @Var
  38. 38. メソッド引数特定方法 引数の型を見て、インジェクト HttpServletRequest, HttpServletResponse HttpSession ServletContext Cookie/Cookie[] WebContext Request, Response UploadFile ErrorInfo
  39. 39. メソッド引数特定方法 @ActionPath(“/world/{id}”) public Navigation helloworld( HttpSession session, @Var(“id”) String id, @RequestParam(“name”) String name){ …
  40. 40. T2とは つなぐ つながる
  41. 41. phpとつながる PHPでの開発 5年やってます
  42. 42. phpとつながる PHPといえば
  43. 43. phpとつながる $_GET $_POST $_SESSION $_FILES
  44. 44. phpとつながる $_GET[“arg1”] $_POST[“arg2”] $_SESSION[“name”] $_FILES[“sample”]
  45. 45. phpとつながる わかりやすい
  46. 46. phpとつながる PHPを知ってる人にJavaを教えると 「Javaはクラス名長い><」 「Javaはメソッド名長くない?><」 「HttpServletRequestとか何?><」 「$_POST[‘arg’]で取れないの><」
  47. 47. phpとつながる PHPを知ってる人にJavaを教えたら 「Javaはクラス名長い><」 「Javaはメソッド名長くない?><」 「HttpServletRequestとか何?><」 「$_POST[‘arg’]で取れないの><」 ごもっとも
  48. 48. 一句 無いのなら 作ってしまおう $_POST
  49. 49. PHPとつながる public class $_POST { public static <T> T get(String key) { T ret = null; String[] params = WebContextUtil.getRequest().getParameters(key); if (params != null && params.length == 1) { ret = (T) params[0]; } else { ret = (T) params; } return ret; } }
  50. 50. PHPとつながる 使い方 PHP : $_POST[‘arg1’] Java : $_POST.get(‘arg1’) @POST public Navigation execute() { String value = $_POST.get(“arg1quot;); …. }
  51. 51. PHPとつながる 対応クラス $_POST $_GET $_SESSION $_FILES
  52. 52. PHPとつながる 使い方 $_FILES ファイルアップロードも熱い @POST @ActionParam public Navigation upload() { UploadFile file = $_FILES.get(‘sample’); logger.debug(quot;file name: {}, size:{}quot;, file.getName(), file.getSize()); …. }
  53. 53. PHPとつながる 使い方 sampleのlikephpを参照 手軽に試す方法 t2-samplesをチェックアウト htmlを作成 対応するPageクラスで$_POST, $_FILES, $_SESSION, $_GETを実際に使ってみる
  54. 54. PHPとつながる 今後 $_ENVやvar_dump関数を提供もしくは作って ください 狙い PHPに記述が似ててすぐ動いて嬉しい $_POSTってどうなってるの? そのままソースを追う事によりJavaに興味を持 ちつつHttpServletRequestの理解 最後は自分で勉強することが大事 $_ENVを作ることにより理解も深まる
  55. 55. T2とは つなぐ つながる
  56. 56. T2 - The WEB Connector - レスポンス
  57. 57. T2の基本的な仕組み リクエストURLと と リクエスト リクエスト がマッチ? POJOがマッチ? マッチした マッチしたPOJOのメソッド した の マッチ? とマッチ? 対象メソッドの 対象メソッドの実行 メソッド Navigationによる次の遷 による次 による レスポンス 移先と方法の 移先と方法の決定 ブラウザ
  58. 58. レスポンス 戻り値として、Navigationインターフェースを 実装したクラスのインスタンスを返す Forward(フォワードする) Redirect(リダイレクトする) SimpleText(テキストデータを返す) Direct(ファイルなどを直接書き込む) Json(JSONにして返す) NoOperation(何もしない) PassThrough(次のServlet/Filterに委譲)
  59. 59. レスポンス に //JSPにForward @ActionPath(“/world/{id}”) public Navigation helloworld(){ return Forward.to(“/jsp/hoge.jsp”); } //画像ファイルを返す 画像ファイルを 画像ファイル @ActionPath(“/worldImage”) public Navigation helloworldImage(){ File image = new File(“world.png”); return Direct.from(image); }
  60. 60. レスポンス マルチビューデモ Applet->T2 JavaFX->T2
  61. 61. T2 - The WEB Connector - DIコンテナ非依存
  62. 62. DIコンテナ非依存 T2は特定のDIコンテナなどのフレーム ワークに依存しない 単体でも動作可能 主要DIコンテナとも連携可能 アダプタ機能を配布
  63. 63. DIコンテナ非依存 T2が動作するDIコンテナ Guice Spring Lucy
  64. 64. DIコンテナ非依存 今日は 今日は ひがさん きとるにか
  65. 65. DIコンテナ非依存 君 Seasar君 どこ行ってしもたんや… どこ行ってしもたんや
  66. 66. DIコンテナ非依存 T2が動作するDIコンテナ Seasar2 あるよ! あるよ! Guice Spring Lucy
  67. 67. DIコンテナ非依存 今日は 今日は ひがさん Slim3 メインやないか メインやないか
  68. 68. DIコンテナ非依存 Slim3 どこ行ってしもたんや… どこ行ってしもたんや
  69. 69. DIコンテナ非依存 T2が動作するDIコンテナ Seasar2 未検証>< 未検証>< ? Slim3? Guice Spring Lucy
  70. 70. DIコンテナ非依存 環境構築~Seasar2編~ 参照 t2-employee 構成 S2.4 + S2Dao
  71. 71. DIコンテナ非依存 作成設定ファイル~Seasar2編~ aop.dicon app.dicon dao.dicon jdbc.dicon
  72. 72. DIコンテナ非依存 web.xml~Seasar2編~ <filter> <filter-name>t2</filter-name> <filter-class>org.t2framework.filter.T2Filter </filter-class> <init-param> <param-name>t2.rootpackage</param-name> <param-value>examples.employee.page</param-value> </init-param> <init-param> <param-name>t2.container.adapter</param-name> <param-value>org.t2framework.plugins.container.Seasar2Adapter</param-value> </init-param> <init-param> <param-name>t2.eagerload</param-name> <param-value>true</param-value> </init-param> </filter>
  73. 73. DIコンテナ非依存 Pageクラス~Seasar2編~ @RequestScope @Page(quot;loginquot;) public class LoginPage
  74. 74. DIコンテナ非依存 PageクラスDI~Seasar2編~ protected FooService fooService; @Binding(bindingType = BindingType.MUST) public void setFooService(FooService fooService) { this.fooService = fooService; }
  75. 75. DIコンテナ非依存 環境構築~Guice編~ 参照 t2-guice 構成 Guice + JPA
  76. 76. DIコンテナ非依存 作成設定ファイル~Guice編~ persistence.xml ※Guice用のモジュール(Java で)
  77. 77. DIコンテナ非依存 web.xml~Guice編~ <filter> <filter-name>t2</filter-name> <filter-class>org.t2framework.t2.filter.T2Filter</filter-class> <init-param> <param-name>t2.rootpackage</param-name> <param-value>org.t2framework.samples.guice.page</param-value> </init-param> <init-param> <param-name>t2.container.adapter</param-name> <param-value>org.t2framework.t2.adapter.GuiceAdapter</param-value> </init-param> <init-param> <param-name>t2.exclude-resources</param-name> <param-value>css, js</param-value> </init-param> </filter>
  78. 78. DIコンテナ非依存 Pageクラス~Guice編~ @RequestScoped @Page(quot;addquot;) public class AddPage
  79. 79. DIコンテナ非依存 PageクラスDI~Guice編~ @Inject private CalcService calcService; @Inject @RequestParameters Map<String, String[]> params;
  80. 80. DIコンテナ非依存 環境構築~Spring編~ 参照 t2-spring 構成 Spring2.5 + iBatis
  81. 81. DIコンテナ非依存 作成設定ファイル~Spring編~ applicationContext.xml dao-ibatis.xml sql-map-config.xml XxxSqlMap.xml
  82. 82. DIコンテナ非依存 web.xml~Spring編~ <filter> <filter-name>t2</filter-name> <filter-class>org.t2framework.t2.filter.T2Filter</filter-class> <init-param> <param-name>t2.rootpackage</param-name> <param-value>org.t2framework.samples.spring.page</param-value> </init-param> <init-param> <param-name>t2.config</param-name> <param-value>applicationContext.xml</param-value> </init-param> <init-param> <param-name>t2.container.adapter</param-name> <param-value>org.t2framework.t2.adapter.SpringAdapter</param-value> </init-param> <init-param> <param-name>t2.eagerload</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>t2.exclude-resources</param-name> <param-value>css, js</param-value> </init-param> </filter>
  83. 83. DIコンテナ非依存 Pageクラス~Spring編~ @Component @Page(quot;addquot;) public class AddPage
  84. 84. DIコンテナ非依存 PageクラスDI~Spring編~ private CalcService calcService; @Autowired(required=true) public void setCalcService( CalcService calcService) { this.calcService = calcService; }
  85. 85. DIコンテナ非依存 動作確認アプリケーションサーバ Tomcat5x/6x JBoss4x/5x Jetty6x WebLogic10x その他いろいろ… Yonexで確認
  86. 86. T2 - The WEB Connector - T2の拡張性
  87. 87. 拡張性の高さ ユーザが制御可能=拡張性が高い メインフローの順序・実装 ActionFilter 例外ハンドリング部分 ExceptionHandler プラグイン機能による機能追加 Pluginによって処理を差し込める
  88. 88. T2 - The WEB Connector - 今後の展望
  89. 89. 今後の展望 バージョン0.6 Flex3対応 どのフレームワークよりも簡単に Flex/AIRと通信できる AMF3の実装 バージョン0.7 Atom、RSS、Webサービス対応
  90. 90. T2プロジェクトについて T2プロジェクトとは Apacheライセンスのプロジェクト Javaだけに限っていない 本当に現場で使えるものを作る 自分達が実際に使い、コミュニティに還元し、 洗練させていく ユーザを大事にし、継続してお互い成長する 楽しく開発・コミュニケーション!
  91. 91. 色々なプロダクト Commons 共通ユーティリティフレームワーク Commons-ext JTAトランザクション実装、DataSet API Lucy ライトウェイトDIコンテナ AOP機能 Daisy(開発中) 2waySQLフレームワーク 薄いJDBCラッパー
  92. 92. その他プロダクト Yonex(仮) Hyper Integration Test Suite レポーティング とかも 提供したい!
  93. 93. プロジェクトリソース サイト http://code.google.com/p/t-2/ リリースアーカイブ、ドキュメント、ソース コード メーリングリスト T2-users http://groups.google.com/group/t2-users 開発の話、仕様の話、なんでもOK。
  94. 94. T2 - The WEB Connector - まとめ
  95. 95. まとめ T2はマルチビュー対応なシンプルWebフ レームワーク あらゆるクライアントをつなぎます! が まだまだ発展途上。ご意見ください!
  96. 96. T2 - The WEB Connector - エンドロール
  97. 97. T2 - The WEB Connector - 出演
  98. 98. T2 - The WEB Connector - テツ
  99. 99. T2 - The WEB Connector - テツ
  100. 100. T2 - The WEB Connector - テツ
  101. 101. T2 - The WEB Connector - イーダ
  102. 102. T2 - The WEB Connector -
  103. 103. T2 - The WEB Connector - イーダ
  104. 104. T2 - The WEB Connector - イーダ
  105. 105. T2 - The WEB Connector -
  106. 106. T2 - The WEB Connector - イーダ
  107. 107. T2 - The WEB Connector - イーダ
  108. 108. T2 - The WEB Connector - イーダ
  109. 109. T2 - The WEB Connector -
  110. 110. T2 - The WEB Connector - イーダ
  111. 111. T2 - The WEB Connector - designed by カネウチカズコ
  112. 112. T2 - The WEB Connector - コミッタ
  113. 113. T2 - The WEB Connector - 片山 暁雄
  114. 114. T2 - The WEB Connector -
  115. 115. T2 - The WEB Connector - 米林 正明
  116. 116. T2 - The WEB Connector -
  117. 117. T2 - The WEB Connector - 横田 健彦
  118. 118. T2 - The WEB Connector -
  119. 119. T2 - The WEB Connector - 大谷 晋平
  120. 120. T2 - The WEB Connector -
  121. 121. 一句 おらっちゃ 富山人 富山、北陸 盛り上げよう (※字余り)
  122. 122. T2 - The WEB Connector - 御静聴ありがとうございました

×