Apache Tapestry

3,227 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,227
On SlideShare
0
From Embeds
0
Number of Embeds
656
Actions
Shares
0
Downloads
11
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. Agenda Tapestryとは 基本的な仕組み Pageとtml Component・ Mixin IoC ・Module その他機能 利点欠点 まとめ
  4. 4. Tapestry Tapestryとは
  5. 5. Tapestryとは Apach傘下で開発中のWebフレームワーク トッププロジェクト Servlet・JSPは使用しない イベントドリブン HTMLテンプレート・コンポーネント JSFに似てる(?) IoCコンテナ内臓
  6. 6. Tapestryとは 2001年ごろに開発開始 現在バージョン5 後方互換性なし JDK5以上 Apache2.0 License
  7. 7. Tapestry 基本的な仕組み
  8. 8. 基本的な仕組み USER Tapestry Registry Service Module Module URL Page HttpServlet Browser 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. Tapestry Pageとtml
  12. 12. Pageとtml Pageクラス 画面の情報を保持したり、画面からのアクショ ンを受け取ったりするクラス 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=quot;http://tapestry.apache.org/schema/tapestry_5_0_0.xsdquot;> <head> <title>Guess A Number</title> </head> <body> <p>Make a guess between one and ten:</p> <p>${message}</p> <t:loop source=quot;1..10quot; value=quot;guessquot; xml:space=quot;preservequot;> <t:actionlink t:id=“ansLinkquot; context=quot;guessquot;>${guess}</t:actionlink> </t:loop> </body> </html>
  15. 15. Pageとtml レンダリング時 .tml(hoge/Foo.tml) Page(hoge/Foo.java) にPageから値を 取得 @Property String message ${message} @OnEvent( component=“ansLink”) <t:actionlink Object handleAnsLiks(){} t:id=“ansLink“> 画面アクション時に Pageのメソッドを コールバック
  16. 16. Pageとtml Pageクラス 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とtml tml XHTML形式 ドキュメントルート以下、もしくは ${pkgbase}.pagesパッケージに格納 独自タグ、もしくはHTMLの要素で、コンポーネ ントを記述 <a t:type=quot;pagelinkquot; t:page=quot;address/createquot;> <t:pagelink page=“address/create”> いずれも同じ
  22. 22. Pageとtml タグ部分はレンダリング時にHTMLに置き換わる ${value}を使って、Pageクラスから値を取得 リンク、フォームなどのクリックで発生する リクエストを、Pageに通知
  23. 23. Tapestry Component・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 Page pagelink 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=“autocompletequot; id=“mytxt” />
  31. 31. コンポーネント 組み込みMixin Autocomplete RenderDisabled RenderInformals
  32. 32. Tapestry IoC・ Module
  33. 33. IoC・Module IoC Tapestry組み込みのIoCコンテナ tapestry5-ioc.jarで提供 本体はtapestry5-core.jar bind ServiceBinder Module Registry Service1 Service1 Service2 Service2
  34. 34. IoC・Module Registry Serviceの集合体 インターフェースとその実装クラス、及び設定 (contribute、decorate)の情報を保持 コアコンポーネント・ユーザーコンポーネント すべてをこのRegistryから取り出す @Inject,@InjectServiceのついたフィールドに インジェクション
  35. 35. IoC・Module Module 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. まとめ ご静聴ありがとうございました

×