| 原作者 | ハワード・ルイス・シップ |
|---|---|
| 開発者 | Apache ソフトウェア財団 |
| 安定リリース | 5.8.4 [1]
/ 2024-02-06; 9か月前 |
| リポジトリ | タペストリーリポジトリ |
| 書かれた | ジャワ |
| オペレーティング·システム | クロスプラットフォーム( Java 仮想マシン) |
| タイプ | Web アプリケーション フレームワーク |
| ライセンス | Apache ライセンス 2.0 |
| Webサイト | タペストリー |
Apache Tapestryは、オープンソースのコンポーネント指向[明確化が必要] Java Web アプリケーション フレームワークであり、概念的にはJavaServer FacesやApache Wicketに似ています。[2] Tapestry は Howard Lewis Ship によって作成され[いつ? ] 、2006 年にApache Software Foundationによってトップレベル プロジェクトとして採用されました。[3]
Tapestry は、シンプルさ、使いやすさ、開発者の生産性を重視しています。設定よりも規約を重視するパラダイムに従っており、ほとんどすべてのXML設定を排除しています。[4] Tapestry は、Web ページ上の各ユーザー インターフェイスコンポーネント (オブジェクト) とそれに対応するJavaクラスの間に強力なバインディングを持たせることで、Web 開発にモジュール アプローチを採用しています。このコンポーネント ベースのアーキテクチャは、 WebObjectsから多くのアイデアを借用しています。[5]
注目すべき機能
- ライブクラスのリロード
- Tapestry は、Java ページ クラス、コンポーネント クラス、サービス実装クラス、HTML テンプレート、コンポーネント プロパティ ファイルの変更についてファイル システムを監視し、再起動を必要とせずに実行中のアプリケーションに変更をホットスワップします。これにより、コード保存と表示のフィードバック サイクルが非常に短くなり、開発者の生産性が大幅に向上するとされています。[6]
- コンポーネントベース
- ページは、それぞれテンプレートとコンポーネントクラスを持つ小さなネスト可能なコンポーネントで構築できます。カスタムコンポーネントは簡単に構築できると言われています。[7]
- 設定よりも規約
- Tapestryは、アプリケーションを構成するためにXMLではなく命名規則と注釈を使用します。[8]
- HTTPSessionの予備使用
- TapestryはHTTPSessionの使用を最小限に抑えることで、クラスタ化されたセッション複製環境で非常に効率的になるように設計されています。[9]
- 投稿/リダイレクト/取得
- ほとんどのフォーム送信はPost/Redirect/Get(PRG)パターンに従っており、これにより複数のフォーム送信事故が減り、URLがより使いやすくブックマークしやすくなり、ブラウザの戻るボタンと更新ボタンが正常に機能するようになります。[10]
- 制御の反転 (IoC)
- TapestryはGoogle Guiceに似た軽量のInversion of Controlレイヤー上に構築されていますが、Tapestryの動作のほぼすべての側面を構成可能かつ置き換え可能にするように設計されています。[8]
Hello Worldの例
最小限のテンプレート化された Tapestry アプリケーションには、次の 3 つのファイルのみが必要です。
- HelloWorld.tml
- /helloworld ページの (X)HTML テンプレート。Tapestry テンプレートには、任意の整形式の (X)HTML マークアップを含めることができます。
<!DOCTYPE html>
<html xmlns= "http://www.w3.org/1999/xhtml" xmlns:t= "http://tapestry.apache.org/schema/tapestry_5_3.xsd" > <body> <p>こんにちは、${username} </p> </body> </html>
- HelloWorld.java
- テンプレートに関連付けられたページ クラス。ここでは、テンプレートがアクセスできる *username* プロパティのみを提供します。
パッケージorg.example.demo.pages ;
/** ページクラス(同じ名前のテンプレートファイルに自動的に関連付けられます) */
public class HelloWorld {
/** 通常のゲッター */
public String getUsername () { return "World" ; } }
- ウェブ
- サーブレットフィルタとして Tapestry をインストールするサーブレットアプリケーションデプロイメント記述子。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name> Tapestry Example </display-name> <context-param> <!-- Tapestry 5 にページ、コンポーネント、ミックスインを検索する場所を指示します --> <param-name> tapestry.app-package </param-name> <param-value> org.example.demo </param-value> </context-param> <filter> <!-- Tapestry サーブレット フィルタを定義します --> <filter-name> app </filter-name> <filter-class> org.apache.tapestry5.TapestryFilter </filter-class> </filter> <filter-mapping> <!-- Tapestry サーブレット フィルタに送信するリクエストをサーブレット コンテナに通知します --> <filter-name> app </filter-name> <url-pattern> /* </url-pattern> </filter-mapping> </web-app>
階級変革
Tapestry はバイトコード操作を使用して実行時にページとコンポーネントのクラスを変換します。このアプローチにより、ページとコンポーネントのクラスを単純なPOJOとして記述でき、いくつかの命名規則と注釈によってクラスのロード時に大幅な追加動作をトリガーできます。Tapestry バージョン 5.0、5.1、5.2 では、Javassist バイトコード操作ライブラリが使用されていました。その後のバージョンでは、Javassist がObjectWeb ASMに基づくPlasticと呼ばれる新しいバイトコード操作レイヤーに置き換えられました。[11] [12]
クライアント側のサポート
Tapestry 5 バージョン 5.3 までは、Prototypeおよびscript.aculo.us JavaScript フレームワークが Tapestry 固有のライブラリとともにバンドルされており、Ajax 操作を第一級オブジェクトとしてサポートします。Prototype/Scriptaculous の代わりに、またはそれに加えて、jQuery を統合するためのサードパーティ モジュールが利用可能です。
バージョン5.4以降、Tapestryには新しいJavaScriptレイヤーが含まれており、組み込みコンポーネントのPrototypeへの依存がなくなり、jQueryや他のJavaScriptフレームワークをプラグインできるようになりました。[13]
バージョン 5.4 では、RequireJS モジュール読み込みシステムを使用した JavaScriptモジュールのサポートも導入されています。
基本原則
Tapestryプロジェクトのドキュメントには、2008年のバージョン5からTapestryのすべての開発決定を規定する4つの「原則」が記載されています。[14]
- 静的構造、動的動作 - ページとコンポーネントの構造は基本的に静的であるため、大きなページとコンポーネントのツリーを構築 (およびセッション メモリに保存) する必要がありません。
- 適応型API - コードがフレームワークに適応するのではなく、フレームワークがコードに適応するように設計されています。
- パブリック API と内部 API を区別します。必然的にパブリックであるものを除き、すべての API は明示的に「内部」(プライベート) です。
- 下位互換性の確保 - Tapestry の開発者は、Tapestry の最新バージョンへのアップグレードが常に容易であることを保証することに尽力していると報告されています。
批判
Tapestry はメジャー バージョン間で下位互換性がないと批判されてきました。特にバージョン 4 からバージョン 5 への移行では、既存のアプリケーションにクリーンな移行パスがなかったことが顕著でした。[15]プロジェクト チーム メンバーは、これが過去に Tapestry ユーザーにとって大きな問題であったことを認識しており、下位互換性は Tapestry の今後の主要な設計目標となりました。バージョン 5 の開発の初期から、下位互換性は Tapestry の 4 つの新しい「コア原則」の 1 つとして挙げられており、他の 3 つのうち 2 つは下位互換性を犠牲にすることなくフレームワークの進化を可能にすることを目的としていました。プロジェクト チーム メンバーは、5.0 以降のすべての Tapestry リリースは高度な下位互換性を備えていると主張しています。
Tapestry 5 に対する初期の批判では、ドキュメントの欠陥も指摘されていました。現在、プロジェクト メンバーは、この欠陥はユーザー ガイドやその他のドキュメントを徹底的に改訂して更新することで、ほぼ解決されたと主張しています。
バージョン 5.0 以降、Tapestry には Prototype と Scriptaculous JavaScript ライブラリがバンドルされています。Howard Lewis Ship 氏によると、2008 年から 2009 年にかけては、これらは妥当な選択でした。しかし、それ以降、Prototype の人気は低下し、jQuery の人気が急上昇しました。これに対応して、Tapestry コミュニティは、Prototype に加えて、または Prototype の代わりに jQuery を使用できるモジュールを開発しました。一方、Tapestry の現在のバージョン 5.4 では、Prototype への依存が完全になくなり、jQuery または Prototype (または他の JavaScript フレームワーク) をプラグインできる互換性レイヤーに置き換えられています。
他のフレームワークとの関係
ハワード・ルイス・シップによれば、Tapestryは当初、当時Objective-Cで書かれクローズドソースだったWebObjectsに見られる一般的な概念とアプローチの一部をJavaで実装する試みとして考案されたという。[16]
Wicketの創始者ジョナサン・ロックによれば、 Apache WicketはTapestryの初期バージョンの複雑さへの対応として開発されたという。[17]
JavaServer Facesのデフォルトのビュー技術であるFaceletsは、Tapestryの初期バージョンに触発されて開発されたと言われており、「業界標準としてJavaServer Facesに裏打ちされたTapestryのようなフレームワーク」のニーズを満たす試みである。[18] [19]
歴史
参照
参考文献
- Drobiazko, Igor (2012)、Tapestry 5: Rapid web application development in Java、Igor Drobiazko、p. 482、2014-12-15 にオリジナルからアーカイブ、2013-01-20に取得
- Kolesnikov, Alexander (2008 年 1 月 15 日)、「Tapestry 5: Web アプリケーションの構築: 開発者に優しい Apache Tapestry フレームワークを使用した Java Web 開発のステップバイステップ ガイド」、Packt Publishing、p. 280、ISBN 978-1-84719-307-0
- Iok Tong, Ka (2007 年 1 月 1 日)、「Tapestry で Web 開発を楽しむ(第 3 版)」、p. 497、ASIN B00262M3HS
- ルイス・シップ、ハワード(2004)、Tapestry in Action、マニング、p. 580、ISBN 1932394117
注記
- ^ 「ダウンロード」.
- ^ “Howard Lewis Ship of Tapestry インタビュー [パート 1] (2012-10-22)”. 2013-01-22時点のオリジナルよりアーカイブ。2013-01-28閲覧。
- ^ ドロビアスコ 2012、1ページ。
- ^ 「Tapestry Central: Tapestry 5 アップデート」 2006 年 7 月 24 日。
- ^ タペストリーの実践 - ハワード・ルイス・シップによる序文
- ^ 「クラスのリロード - Apache Tapestry」。
- ^ ドロビアスコ 2012、20ページ。
- ^ ab Drobiazko 2012、p. 7を参照。
- ^ 「パフォーマンスとクラスタリング - Apache Tapestry」。
- ^ 「フォームと検証 - Apache Tapestry」。
- ^ 「Meeting Plastic I: Introduction | Java Magic」。2011 年 4 月 18 日。
- ^ "[asm] Plastic: Tapestry 5.3 用の ASM ラッパー". 2013 年 6 月 18 日時点のオリジナルよりアーカイブ。2013年 2 月 21 日閲覧。
- ^ 「Tapestry Central: Tapestry 5.4 に注目」2012 年 10 月 19 日。
- ^ “Principles”. 2010-12-21. 2012年10月12日時点のオリジナルよりアーカイブ。2012年10月12日閲覧。
- ^ “Tapestry5 future compatiblity [sic]”. 2009-04-30. 2013-01-21時点のオリジナルよりアーカイブ。 2013-01-21に閲覧。
- ^ “DevRates | Howard Lewis Ship of Tapestry インタビュー [パート 1]”. 2013 年 1 月 22 日時点のオリジナルよりアーカイブ。2013年 1 月 28 日閲覧。
- ^ 「Wicket: さらに別のプレゼンテーション層フレームワークは必要か?」www.theserverside.com。 2004年9月9日時点のオリジナルよりアーカイブ。2022年1月11日閲覧。
- ^ 「Facelets: JavaServer Facelets」。facelets.dev.java.net。2007年7月6日時点のオリジナルよりアーカイブ。2022年1月11日閲覧。
- ^ 「JSF Central - Facelets の内部 パート 1: 概要」www.jsfcentral.com。2013 年 1 月 13 日時点のオリジナルよりアーカイブ。2022 年1 月 11 日閲覧。
- ^ 「Tapestry: Java Web Components Release 2.0 がリリースされました」。2013年 1 月 20 日閲覧。
- ^ 「Tapestry 3.0 最終リリース」 。2013年 1 月 20 日閲覧。
- ^ 「Tapestry 4.0 リリース」。2013年 1 月 20 日閲覧。
- ^ 「Tapestry と JSR-303 Bean Validation API」。2010 年 1 月 4 日。2010 年 4 月 16 日時点のオリジナルよりアーカイブ。2010 年 3 月13 日閲覧。
- ^ “Announcing Tapestry 5.2”. 2010-12-17. 2012年11月14日時点のオリジナルよりアーカイブ。 2012年11月14日閲覧。
- ^ 「JSR 330 標準アノテーションの使用 - Apache Tapestry」。
- ^ 「JavaScript Rewrite」。2012年11月14日時点のオリジナルよりアーカイブ。2013年1月20日閲覧。
外部リンク
- 公式サイト
