Apache Tapestry-- Open-source framework for creating dynamic,      robust, highly scalable web applications --
自己紹介名前   片山 暁雄ID   id:c9katayama    c95029@gmail.com所属  株式会社キャピタルアセットプランニング   http://www.cap-net.co.jp  チームT2Framework   h...
AgendaTapestryとは基本的な仕組みPageとtmlComponent・ MixinIoC ・Moduleその他機能利点欠点まとめ
TapestryTapestryとは
TapestryとはApach傘下で開発中のWebフレームワーク トッププロジェクトServlet・JSPは使用しないイベントドリブンHTMLテンプレート・コンポーネントJSFに似てる(?)IoCコンテナ内臓
Tapestryとは2001年ごろに開発開始現在バージョン5 後方互換性なしJDK5以上Apache2.0 License
Tapestry基本的な仕組み
基本的な仕組み                     Tapestry                        USER                           Registry                  Servi...
パッケージ構成    USERクラスの登録      ルートパッケージをweb.xmlで指定      他の設定ファイルなし<context-param>    param-name>tapestry.app-package</param-na...
パッケージ構成ルートパッケージ以下 pages services components mixins base  特別なフォルダ  このフォルダからの  パッケージ階層も重要
TapestryPageとtml
PageとtmlPageクラス 画面の情報を保持したり、画面からのアクションを受け取ったりするクラス URLと1対1でひも付けtml(TapestryMarkupLanguage)ファイル HTMLテンプレートファイル Pageと1対1でひも付...
Pageとtml Pageクラスpublic class GameStart{  @Property   private int guess;  @Persist  private int target;  @InjectPage  priva...
Pageとtml      tml<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">  <head>     <title>Guess A Number</...
Pageとtml                      レンダリング時Page(hoge/Foo.java)   にPageから値を   .tml(hoge/Foo.tml)                          取得@Prop...
PageとtmlPageクラス POJO(クラスアノテーションもなし) ${app-package}.pagesパッケージに格納   自動登録  URLと1対1のマッピング例えば${rootpkg}/pages/hoge/Foo.javaの場合...
Pageとtmlフィールドアノテーション@Property  アクセサを自動生成  宣言しないで自分でアクセサをつけてもOK@Persist  他の画面に行っても持ち越す値に付与  セッションに値が入る@Retain  リクエスト間で値を保持し...
Pageとtml@Inject  コンテナからDIしてほしい場合に付与@InjectService  名前指定でサービスをDIしてほしい場合に付与@InjectPage  次の画面のインスタンスが欲しい場合に宣言  イベントハンドラーから返すと...
Pageとtmlメソッドアノテーション@OnEvent  「value=EventConstantsの定数」で、各イベント発 生時のハンドル可能  component=コンポーネントidで、指定のコンポーネ ントのアクションをハンドル可能  A...
Pageとtml@OnEventアノテーションは、 onアクション onアクションFromコンポーネントidでも代用可能  @OnEvent(          value=EventConstanst.ACTION,          com...
Pageとtmltml XHTML形式 ドキュメントルート以下、もしくは      ${pkgbase}.pagesパッケージに格納 独自タグ、もしくはHTMLの要素で、コンポーネントを記述  <a t:type="pagelink" t:pa...
Pageとtmlタグ部分はレンダリング時にHTMLに置き換わる${value}を使って、Pageクラスから値を取得リンク、フォームなどのクリックで発生するリクエストを、Pageに通知
TapestryComponent・Mixin
コンポーネントComponent Javaクラス、tmlファイル、リソース(js,image,CSS)をひとまとめにしたもの。 ${tapestry.app-package}.componentsパッケージに格納
コンポーネント作り方  Javaクラスを作成  必要ならtmlを作成  画像・JavaScript・CSSなどが必要な場合はJavaクラスに宣言実際のコード
コンポーネント 使い方  tml内でコンポーネントを宣言<t:hoge.foo.Component          id=“mycmp” bar=“XXX” />
コンポーネントコンポーネントツリー  Pageをルートとしたツリー  ツリーに従いレンダリングやイベント伝播を行う                     Page           layout           Pagepagelink...
コンポーネント組み込みComponent Form,Label,TextField PageLink,ActionLink,LinkSubmit If,Unless Grid BeanDisplay,BeanEditor
コンポーネントMixin 既存のComponentに対して、機能を追加するためのもの Componentの各処理に割り込む 作り方はComponentと一緒 ただしtmlは使用不可
コンポーネント 使い方   コンポーネント宣言に使用するmixinを宣言<t:TextField    t:mixins=“autocomplete" id=“mytxt” />
コンポーネント組み込みMixin Autocomplete RenderDisabled RenderInformals
TapestryIoC・ Module
IoC・ModuleIoC  Tapestry組み込みのIoCコンテナ  tapestry5-ioc.jarで提供      本体はtapestry5-core.jar                                  bind...
IoC・ModuleRegistry  Serviceの集合体  インターフェースとその実装クラス、及び設定  (contribute、decorate)の情報を保持  コアコンポーネント・ユーザーコンポーネント  すべてをこのRegistry...
IoC・ModuleModule Serviceと設定をRegistryに登録する役割 ${app.package}/services/アプリ名Module.class がTapestryFilter初期化時に自動的に呼ばれる すべてstati...
Tapestryその他機能
その他機能オートリロード機能 pages、components、mixins、baseパッケージ 内のクラスやリソースをリロードAjax対応 zone機能(指定の<div>の中身だけを書き換え)詳細なエラーページ
Tapestry利点・欠点
利点HTMLテンプレートが利用できるURLとクラス・テンプレートの位置関係が明確コンポーネント作成が容易・再利用が可能IoCコンテナ内臓 カスタマイズが柔軟オートリロード機能でAPサーバ再起動なしの開発が可能
欠点学習コストが高い 機能が多いので、すべて知るに時間がかかるソースが追いくい 匿名クラスやエンハンスされたクラスが多いライフサイクルがわかりにくいSeasar2,Guiceは使用不可 今出ているのはHiveMindとSpringのアダプタ だ...
Tapestryまとめ
まとめTapestryは、イベントドリブン・コンポーネント指向・HTMLテンプレートIoCコンテナ・リロード機能つき結構すごいが学習コストが高めとりあえず 抱かれてみよう Tapestry
まとめ参考文献 Apache Tapestry   http://tapestry.apache.org/ 有志の日本語訳   http://kuramo.ch/tapestry5/ja/
まとめご静聴ありがとうございました
Upcoming SlideShare
Loading in …5
×

Apache Tapestry

1,740 views
1,684 views

Published on

知っ得納得Webフレームワーク勉強会のスライド

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

  • Be the first to like this

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

No notes for slide

Apache Tapestry

  1. 1. Apache Tapestry-- Open-source framework for creating dynamic, robust, highly scalable web applications --
  2. 2. 自己紹介名前 片山 暁雄ID id:c9katayama c95029@gmail.com所属 株式会社キャピタルアセットプランニング http://www.cap-net.co.jp チームT2Framework http://code.google.com/p/t-2/
  3. 3. AgendaTapestryとは基本的な仕組みPageとtmlComponent・ MixinIoC ・Moduleその他機能利点欠点まとめ
  4. 4. TapestryTapestryとは
  5. 5. TapestryとはApach傘下で開発中のWebフレームワーク トッププロジェクトServlet・JSPは使用しないイベントドリブンHTMLテンプレート・コンポーネントJSFに似てる(?)IoCコンテナ内臓
  6. 6. Tapestryとは2001年ごろに開発開始現在バージョン5 後方互換性なしJDK5以上Apache2.0 License
  7. 7. Tapestry基本的な仕組み
  8. 8. 基本的な仕組み Tapestry USER Registry Service Module Module URL HttpServlet PageBrowser Tapestry RequestHandler Filter Filter .tml Filter Filter Component Filter
  9. 9. パッケージ構成 USERクラスの登録 ルートパッケージをweb.xmlで指定 他の設定ファイルなし<context-param> param-name>tapestry.app-package</param-name> <param-value>org.apache.tapestry5.tutorial</param-value></context-param>
  10. 10. パッケージ構成ルートパッケージ以下 pages services components mixins base 特別なフォルダ このフォルダからの パッケージ階層も重要
  11. 11. TapestryPageとtml
  12. 12. PageとtmlPageクラス 画面の情報を保持したり、画面からのアクションを受け取ったりするクラス URLと1対1でひも付けtml(TapestryMarkupLanguage)ファイル HTMLテンプレートファイル Pageと1対1でひも付け URL = Page = tml
  13. 13. Pageとtml Pageクラスpublic class GameStart{ @Property private int guess; @Persist private int target; @InjectPage private GameOver gameOver; void initialized(int target){ this.target = target; } @OnEvent(component=“ansLink”) Object handleAnsLink(int guess) { return target==guss ? gameOver. : null; }}
  14. 14. Pageとtml tml<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> <head> <title>Guess A Number</title> </head> <body> <p>Make a guess between one and ten:</p> <p>${message}</p> <t:loop source="1..10" value="guess" xml:space="preserve"> <t:actionlink t:id=“ansLink" context="guess">${guess}</t:actionlink> </t:loop> </body></html>
  15. 15. Pageとtml レンダリング時Page(hoge/Foo.java) にPageから値を .tml(hoge/Foo.tml) 取得@PropertyString message ${message}@OnEvent( component=“ansLink”) <t:actionlinkObject handleAnsLiks(){} t:id=“ansLink“> 画面アクション時に Pageのメソッドを コールバック
  16. 16. PageとtmlPageクラス POJO(クラスアノテーションもなし) ${app-package}.pagesパッケージに格納 自動登録 URLと1対1のマッピング例えば${rootpkg}/pages/hoge/Foo.javaの場合、http://host/context_root/hoge/fooとマッピングされる
  17. 17. Pageとtmlフィールドアノテーション@Property アクセサを自動生成 宣言しないで自分でアクセサをつけてもOK@Persist 他の画面に行っても持ち越す値に付与 セッションに値が入る@Retain リクエスト間で値を保持したい場合に付与
  18. 18. Pageとtml@Inject コンテナからDIしてほしい場合に付与@InjectService 名前指定でサービスをDIしてほしい場合に付与@InjectPage 次の画面のインスタンスが欲しい場合に宣言 イベントハンドラーから返すと、その画面に遷移
  19. 19. Pageとtmlメソッドアノテーション@OnEvent 「value=EventConstantsの定数」で、各イベント発 生時のハンドル可能 component=コンポーネントidで、指定のコンポーネ ントのアクションをハンドル可能 ACTION ACTIVATE PASSIVATE PREPARE_FOR_RENDER PREPARE_FOR_SUBMIT PREPARE SUBMIT VALIDATE_FORM SUCCESS FAILURE SELECTED PARSE_CLIENT TO_CLIENT VALIDATE REMOVE_ROW ADD_ROW
  20. 20. Pageとtml@OnEventアノテーションは、 onアクション onアクションFromコンポーネントidでも代用可能 @OnEvent( value=EventConstanst.ACTION, component=“ansLink”) public Object hoge(){} public Object onActionFromAnsLink (){ }
  21. 21. Pageとtmltml XHTML形式 ドキュメントルート以下、もしくは ${pkgbase}.pagesパッケージに格納 独自タグ、もしくはHTMLの要素で、コンポーネントを記述 <a t:type="pagelink" t:page="address/create"> <t:pagelink page=“address/create”> いずれも同じ
  22. 22. Pageとtmlタグ部分はレンダリング時にHTMLに置き換わる${value}を使って、Pageクラスから値を取得リンク、フォームなどのクリックで発生するリクエストを、Pageに通知
  23. 23. TapestryComponent・Mixin
  24. 24. コンポーネントComponent Javaクラス、tmlファイル、リソース(js,image,CSS)をひとまとめにしたもの。 ${tapestry.app-package}.componentsパッケージに格納
  25. 25. コンポーネント作り方 Javaクラスを作成 必要ならtmlを作成 画像・JavaScript・CSSなどが必要な場合はJavaクラスに宣言実際のコード
  26. 26. コンポーネント 使い方 tml内でコンポーネントを宣言<t:hoge.foo.Component id=“mycmp” bar=“XXX” />
  27. 27. コンポーネントコンポーネントツリー Pageをルートとしたツリー ツリーに従いレンダリングやイベント伝播を行う Page layout Pagepagelink form
  28. 28. コンポーネント組み込みComponent Form,Label,TextField PageLink,ActionLink,LinkSubmit If,Unless Grid BeanDisplay,BeanEditor
  29. 29. コンポーネントMixin 既存のComponentに対して、機能を追加するためのもの Componentの各処理に割り込む 作り方はComponentと一緒 ただしtmlは使用不可
  30. 30. コンポーネント 使い方 コンポーネント宣言に使用するmixinを宣言<t:TextField t:mixins=“autocomplete" id=“mytxt” />
  31. 31. コンポーネント組み込みMixin Autocomplete RenderDisabled RenderInformals
  32. 32. TapestryIoC・ Module
  33. 33. IoC・ModuleIoC Tapestry組み込みのIoCコンテナ tapestry5-ioc.jarで提供 本体はtapestry5-core.jar bind Registry ServiceBinder Module Service1Service1 Service2 Service2
  34. 34. IoC・ModuleRegistry Serviceの集合体 インターフェースとその実装クラス、及び設定 (contribute、decorate)の情報を保持 コアコンポーネント・ユーザーコンポーネント すべてをこのRegistryから取り出す @Inject,@InjectServiceのついたフィールドに インジェクション
  35. 35. IoC・ModuleModule Serviceと設定をRegistryに登録する役割 ${app.package}/services/アプリ名Module.class がTapestryFilter初期化時に自動的に呼ばれる すべてstaticメソッド bind()で、サービスをbind contributeサービス名()で、そのサービスの設定 decorateサービス名()で、サービスデコレーターの設 定
  36. 36. Tapestryその他機能
  37. 37. その他機能オートリロード機能 pages、components、mixins、baseパッケージ 内のクラスやリソースをリロードAjax対応 zone機能(指定の<div>の中身だけを書き換え)詳細なエラーページ
  38. 38. Tapestry利点・欠点
  39. 39. 利点HTMLテンプレートが利用できるURLとクラス・テンプレートの位置関係が明確コンポーネント作成が容易・再利用が可能IoCコンテナ内臓 カスタマイズが柔軟オートリロード機能でAPサーバ再起動なしの開発が可能
  40. 40. 欠点学習コストが高い 機能が多いので、すべて知るに時間がかかるソースが追いくい 匿名クラスやエンハンスされたクラスが多いライフサイクルがわかりにくいSeasar2,Guiceは使用不可 今出ているのはHiveMindとSpringのアダプタ だけORマッパー・トランザクションとの連携 Hibernate連携以外は?
  41. 41. Tapestryまとめ
  42. 42. まとめTapestryは、イベントドリブン・コンポーネント指向・HTMLテンプレートIoCコンテナ・リロード機能つき結構すごいが学習コストが高めとりあえず 抱かれてみよう Tapestry
  43. 43. まとめ参考文献 Apache Tapestry http://tapestry.apache.org/ 有志の日本語訳 http://kuramo.ch/tapestry5/ja/
  44. 44. まとめご静聴ありがとうございました

×