Apache-tapestry-advanced-features
Apacheタペストリー-高度な機能
この章では、Apache Tapestryのいくつかの高度な機能について詳しく説明します。
制御の反転
Tapestryは、組み込みのInversion of Controlライブラリを提供します。 TapestryはIoCに深く統合されており、すべての機能にIoCを使用しています。 Tapestry IoCの構成は、他の多くのIoCコンテナーのようにXMLではなくJava自体に基づいています。 タペストリーIoCベースのモジュールはJARファイルにパッケージ化され、設定なしでクラスパスにドロップされます。 タペストリーIoCの使用法は、明るさに基づいています。つまり、
- 2つまたは3つのメソッドの小さなインターフェイス。
- 2つまたは3つのパラメーターを持つ小さなメソッド。
- 明示的なメソッド呼び出しではなく、イベントを介した匿名通信。
モジュール
モジュールは、Tapestryアプリケーションの機能を拡張する方法です。 Tapestryには、組み込みモジュールと多数のサードパーティモジュールの両方があります。 Hibernateは、Tapestryが提供するホットで非常に便利なモジュールの1つです。 また、JMX、JPA、Spring Framework、JSR 303 Bean Validation、JSONなどを統合するモジュールもあります。 注目すべきサードパーティのモジュールのいくつかは-
- タペストリー-カイエン
- Tapestry5-googleanalytics
- タペストリー5のギャング-Tapestry5-HighCharts
- タペストリー5のギャング-Tapestry5-jqPlot
- タペストリー5のギャング-Tapestry5-Jquery
- タペストリー5のギャング-Tapestry5-Jquery-mobile
- タペストリー5のギャング-タペストリー5-ポートレット
ランタイム例外
タペストリーの最も優れた機能の1つは、*詳細なエラー報告*です。 Tapestryは、最先端の例外レポートを提供することにより、開発者を支援します。 タペストリーの例外レポートは、詳細情報を含む単純なHTMLです。 誰でも簡単にレポートを理解できます。 TapestryはHTMLでエラーを表示するだけでなく、例外が発生した日時をプレーンテキストで保存します。 これにより、開発者は実稼働環境でも例外を確認できます。 開発者は、壊れたテンプレート、予期しないnull値、一致しないリクエストなどの問題を修正する自信を持ち続けることができます。
ライブクラスとテンプレートのリロード
Tapestryは、変更されるとテンプレートとクラスを自動的にリロードします。 この機能により、ビルドとテストのサイクルを経ることなく、アプリケーションの変更を即座に反映できます。 また、この機能により、アプリケーション開発の生産性が大幅に向上します。
アプリケーションのルートパッケージが org.example.myfirstapp であると考えてください。 次に、次のパスのクラスが再読み込みのためにスキャンされます。
org.example.myfirstapp.pages
org.example.myfirstapp.components
org.example.myfirstapp.mixins
org.example.myfirstapp.base
org.example.myfirstapp.services
*AppModule.java* でプロダクションモードを *true* に設定することにより、ライブクラスのリロードを無効にできます。
configuration.add(SymbolicConstants.PRODUCTION_MODE,”false”);
単体テスト
単体テストは、個々のページとコンポーネントをテストする手法です。 Tapestryは、ユニットテストのページとコンポーネントに簡単なオプションを提供します。
ページのユニットテスト:Tapestryは、アプリケーションをテストするクラス PageTester を提供します。 これは、ブラウザとサーブレットコンテナの両方として機能します。 サーバー側のブラウザを使用せずにページをレンダリングし、結果のドキュメントをチェックして正しいレンダリングを確認できます。 単純なページ Hello を考えてみましょう。これは、helloをレンダリングし、helloテキストはid hello_id のhtml要素で囲まれています。 この機能をテストするには、以下に示すようにPageTesterを使用できます-
public class PageTest extends Assert {
@Test
public void test1() {
Sring appPackage = "org.example.myfirstapp";//package name
String appName = "App1";//app name
PageTester tester = new PageTester(appPackage, appName, "src/main/webapp");
Document doc = tester.renderPage("Hello");
assertEquals(doc.getElementById("hello_id").getChildText(), "hello");
}
}
PageTesterは、ページのレンダリングに加えて、コンテキスト情報、フォーム送信、リンクナビゲーションなどを含めるオプションも提供します。
統合テスト
統合テストは、単体テストのように個々のページをチェックする代わりに、モジュールとしてアプリケーションをテストするのに役立ちます。 統合テストでは、複数のモジュールをユニットとして一緒にテストできます。 Tapestryは、 Tapestry Test Utilities という小さなライブラリを提供して、統合テストを実行します。 このライブラリは、Seleniumテストツールと統合してテストを実行します。 このライブラリは、Seleniumサーバー、Seleniumクライアント、およびJettyインスタンスを起動および管理する基本クラス SeleniumTestCase を提供します。
統合テストの例の1つは次のとおりです-
import org.apache.tapestry5.test.SeleniumTestCase;
import org.testng.annotations.Test;
public class IntegrationTest extends SeleniumTestCase {
@Test
public void persist_entities() {
open("/persistitem");
assertEquals(getText("//span[@id='name']").length(), 0);
clickAndWait("link = create item");
assertText("//span[@id = 'name']", "name");
}
}
開発ダッシュボード
開発ダッシュボードは、アプリケーションの問題を特定/解決するために使用されるデフォルトのページです。 ダッシュボードには、URL http://localhost:8080/myfirstapp/core/t5dashboard からアクセスします。 ダッシュボードには、アプリケーションで使用可能なすべてのページ、サービス、およびコンポーネントライブラリが表示されます。
応答圧縮
Tapestryは、* GZIP圧縮*を使用して応答を自動的に圧縮し、クライアントにストリーミングします。 この機能により、ネットワークトラフィックが削減され、ページの配信が高速化されます。 圧縮は、AppModule.javaのシンボル tapestry.min-gzip-size を使用して構成できます。 デフォルト値は100バイトです。 応答のサイズが100バイトを超えると、Tapestryは応答を圧縮します。
セキュリティ
Tapestryは、Webアプリケーションの既知のセキュリティ脆弱性からアプリケーションを保護するための多くのオプションを提供します。 これらのオプションの一部を以下にリストします-
- HTTPS -タペストリーページに @ Secure の注釈を付けて、安全なページにし、* httpsプロトコル*のみでアクセスできるようにすることができます。
- ページアクセス制御-特定のユーザーのみがアクセスするページを制御します。
- ホワイトリストページ-タペストリーページに @ WhitelistAccessOnly の注釈を付けて、 localhost からのみアクセスできるようにすることができます。
- 資産セキュリティ-タペストリーでは、特定の種類のファイルにのみアクセスできます。 他のものは、ファイルの* MD5ハッシュ*が提供されている場合にのみアクセスできます。
- シリアル化されたオブジェクトの日付-タペストリーはHMACをシリアル化されたJavaオブジェクトデータに統合し、クライアントに送信してメッセージの改ざんを防ぎます。
- Cross Site Request Forgery -Tapestryは、tapestry-csrf-protectionと呼ばれるサードパーティモジュールを提供して、CSRF攻撃を防ぎます。
- セキュリティフレームワークの統合-Tapestryは、単一の認証/承認実装にロックしません。 Tapestryは、一般的な認証フレームワークと統合できます。
ロギング
Tapestryは、ロギングの広範なサポート、実行中のアプリケーションの進行状況の自動記録を提供します。 Tapestryでは、事実上のJavaロギングライブラリ SLF4J を使用しています。 アノテーション @ Log は、メソッドの入り口と出口、および可能な例外を発行するために、任意のコンポーネントメソッドに含めることができます。 また、Tapestryが提供するロガーオブジェクトは、以下に示すように @ Inject アノテーションを使用して任意のコンポーネントに挿入できます-
public class MyPage {
@Inject
private Logger logger;
//. . .
void onSuccessFromForm() {
logger.info("Changes saved successfully");
}
@Log
void onValidateFromForm() {
//logic
}
}
最後に、Apache Tapestryは、簡潔で、スケーラブルで、保守可能で、堅牢で、Ajax対応のアプリケーションを構築するための最良の方法をもたらすと言えます。 Tapestryは、サードパーティのJavaアプリケーションと統合できます。 また、非常に簡単かつ高速であるため、大規模なWebアプリケーションの作成にも役立ちます。