apache tapestry
Post on 28-May-2015
1.622 Views
Preview:
DESCRIPTION
TRANSCRIPT
Apache Tapestry-- Open-source framework for creating dynamic,
robust, highly scalable web applications --
自己紹介
名前
片山暁雄
IDid:c9katayama
c95029@gmail.com所属
株式会社キャピタルアセットプランニングhttp://www.cap-net.co.jp
チームT2Frameworkhttp://code.google.com/p/t-2/
Agenda
Tapestryとは
基本的な仕組み
PageとtmlComponent・ MixinIoC ・Moduleその他機能
利点欠点
まとめ
Tapestry
Tapestryとは
Tapestryとは
Apach傘下で開発中のWebフレームワーク
トッププロジェクト
Servlet・JSPは使用しない
イベントドリブン
HTMLテンプレート・コンポーネント
JSFに似てる(?)
IoCコンテナ内臓
Tapestryとは
2001年ごろに開発開始
現在バージョン5後方互換性なし
JDK5以上
Apache2.0 License
Tapestry
基本的な仕組み
Tapestry USER
基本的な仕組み
TapestryFilter
Page
Component
.tml
Browser
Registry
Module
HttpServletRequestHandler
Filter
Filter
Filter
Filter
Service
Module
URL
パッケージ構成
USERクラスの登録
ルートパッケージをweb.xmlで指定
他の設定ファイルなし
<context-param>param-name>tapestry.app-package</param-name>
<param-value>org.apache.tapestry5.tutorial</param-value></context-param>
パッケージ構成
ルートパッケージ以下pagesservicescomponentsmixinsbase
特別なフォルダこのフォルダからのパッケージ階層も重要
Tapestry
Pageとtml
Pageとtml
Pageクラス
画面の情報を保持したり、画面からのアクションを受け取ったりするクラス
URLと1対1でひも付け
tml(TapestryMarkupLanguage)ファイル
HTMLテンプレートファイル
Pageと1対1でひも付け
URL = Page = tml
Pageとtml
public class GameStart{ @Propertyprivate int guess;
@Persistprivate int target;@InjectPageprivate GameOver gameOver;void initialized(int target){
this.target = target;}@OnEvent(component=“ansLink”)Object handleAnsLink(int guess) {
return target==guss ? gameOver. : null;}
}
Pageクラス
Pageと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>
tml
Pageとtml
Page(hoge/Foo.java)
@PropertyString message
@OnEvent(component=“ansLink”)
Object handleAnsLiks(){}
.tml(hoge/Foo.tml)
${message}
<t:actionlinkt:id=“ansLink“>
レンダリング時にPageから値を
取得
画面アクション時にPageのメソッドを
コールバック
Pageとtml
Pageクラス
POJO(クラスアノテーションもなし)
${app-package}.pagesパッケージに格納
自動登録
URLと1対1のマッピング
例えば${rootpkg}/pages/hoge/Foo.javaの場合、
http://host/context_root/hoge/fooとマッピングされる
Pageとtml
フィールドアノテーション@Property
アクセサを自動生成
宣言しないで自分でアクセサをつけてもOK
@Persist他の画面に行っても持ち越す値に付与
セッションに値が入る
@Retainリクエスト間で値を保持したい場合に付与
Pageとtml
@InjectコンテナからDIしてほしい場合に付与
@InjectService名前指定でサービスをDIしてほしい場合に付与
@InjectPage次の画面のインスタンスが欲しい場合に宣言
イベントハンドラーから返すと、その画面に遷移
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
Pageとtml
@OnEventアノテーションは、
onアクション
onアクションFromコンポーネントid
でも代用可能
@OnEvent(value=EventConstanst.ACTION,component=“ansLink”)
public Object hoge(){}
public Object onActionFromAnsLink (){}
Pageとtml
tmlXHTML形式
ドキュメントルート以下、もしくは
${pkgbase}.pagesパッケージに格納
独自タグ、もしくはHTMLの要素で、コンポーネントを記述
<a t:type="pagelink" t:page="address/create">
<t:pagelink page=“address/create”>
いずれも同じ
Pageとtml
タグ部分はレンダリング時にHTMLに置き換わる
${value}を使って、Pageクラスから値を取得
リンク、フォームなどのクリックで発生する
リクエストを、Pageに通知
Tapestry
Component・Mixin
コンポーネント
ComponentJavaクラス、tmlファイル、リソース
(js,image,CSS)をひとまとめにしたもの。
${tapestry.app-package}.componentsパッケー
ジに格納
コンポーネント
作り方Javaクラスを作成
必要ならtmlを作成
画像・JavaScript・CSSなどが必要な場合はJavaクラスに宣言
実際のコード
コンポーネント
使い方tml内でコンポーネントを宣言
<t:hoge.foo.Componentid=“mycmp” bar=“XXX” />
コンポーネント
コンポーネントツリーPageをルートとしたツリー
ツリーに従いレンダリングやイベント伝播を行う
Page
Pagelayout
formpagelink
コンポーネント
組み込みComponentForm,Label,TextFieldPageLink,ActionLink,LinkSubmitIf,UnlessGridBeanDisplay,BeanEditor
コンポーネント
Mixin既存のComponentに対して、機能を追加する
ためのもの
Componentの各処理に割り込む
作り方はComponentと一緒
ただしtmlは使用不可
コンポーネント
使い方コンポーネント宣言に使用するmixinを宣言
<t:TextFieldt:mixins=“autocomplete" id=“mytxt” />
コンポーネント
組み込みMixinAutocompleteRenderDisabledRenderInformals
Tapestry
IoC・ Module
ServiceBinder
IoCTapestry組み込みのIoCコンテナ
tapestry5-ioc.jarで提供
本体はtapestry5-core.jar
IoC・Module
Registry Module
Service1
Service2Service1
Service2
bind
IoC・Module
RegistryServiceの集合体
インターフェースとその実装クラス、及び設定(contribute、decorate)の情報を保持
コアコンポーネント・ユーザーコンポーネントすべてをこのRegistryから取り出す
@Inject,@InjectServiceのついたフィールドに
インジェクション
IoC・Module
ModuleServiceと設定をRegistryに登録する役割
${app.package}/services/アプリ名Module.classがTapestryFilter初期化時に自動的に呼ばれる
すべてstaticメソッド
bind()で、サービスをbindcontributeサービス名()で、そのサービスの設定
decorateサービス名()で、サービスデコレーターの設
定
Tapestry
その他機能
その他機能
オートリロード機能pages、components、mixins、baseパッケージ
内のクラスやリソースをリロード
Ajax対応
zone機能(指定の<div>の中身だけを書き換え)
詳細なエラーページ
Tapestry
利点・欠点
利点
HTMLテンプレートが利用できる
URLとクラス・テンプレートの位置関係
が明確
コンポーネント作成が容易・再利用が可能
IoCコンテナ内臓 カスタマイズが柔軟
オートリロード機能でAPサーバ再起動な
しの開発が可能
欠点
学習コストが高い機能が多いので、すべて知るに時間がかかる
ソースが追いくい匿名クラスやエンハンスされたクラスが多い
ライフサイクルがわかりにくい
Seasar2,Guiceは使用不可今出ているのはHiveMindとSpringのアダプタだけ
ORマッパー・トランザクションとの連携Hibernate連携以外は?
Tapestry
まとめ
まとめ
Tapestryは、イベントドリブン・コンポーネント指向・HTMLテンプレート
IoCコンテナ・リロード機能つき
結構すごいが学習コストが高め
とりあえず 抱かれてみよう Tapestry
まとめ
参考文献Apache Tapestry
http://tapestry.apache.org/
有志の日本語訳http://kuramo.ch/tapestry5/ja/
まとめ
ご静聴ありがとうございました
top related