Apache-tapestry-storage

提供:Dev Guides
移動先:案内検索

Apacheタペストリー-ストレージ

すべてのWebアプリケーションには、ユーザーオブジェクト、ユーザー設定などの特定のユーザーデータを保存する何らかの方法が必要です。 たとえば、ショッピングカートアプリケーションでは、ユーザーが商品の購入を希望するまで、ユーザーが選択したアイテム/商品を一時的なバケット(カート)に保存する必要があります。 データベースにアイテムを保存できますが、選択したアイテムをすべてのユーザーが購入するわけではないため、費用がかかりすぎます。 そのため、アイテムを保存/永続化するための一時的な手配が必要です。 Apache Tapestryは、データを永続化する2つの方法を提供します-

  • 永続性ページデータ
  • セッションストレージ

どちらにも独自の利点と制限があります。 次のセクションで確認します。

永続化ページのデータ

永続性ページデータは、リクエスト間でデータを1つのページに永続化する単純な概念であり、ページレベルの永続性*とも呼ばれます。 *@ Persist アノテーションを使用して実行できます。

@Persist
public int age;

フィールドに@Persistアノテーションが付けられると、フィールドの値はリクエスト間で保持され、リクエスト中に値が変更された場合、次回アクセスされたときに反映されます。 Apache Tapestryは、@ Persistコンセプトを実装するための5種類の戦略を提供します。 彼らは次のとおりです-

  • セッション戦略-データはセッションを使用して永続化され、デフォルトの戦略です。
  • フラッシュ戦略-データもセッションを使用して永続化されますが、非常に短命です。 データは、後続の1つのリクエストでのみ使用できます。
@Persist(PersistenceConstants.FLASH)
private int age;
  • クライアント戦略-データは、URLクエリ文字列、フォームの非表示フィールドなど、クライアント側に保持されます。
@Persist(PersistenceConstants.FLASH)
private int age;
  • Hibernate Entity Strategy -データはHibernateモジュールをエンティティとして使用して永続化されます。 エンティティはHibernateに保存され、その参照(Javaクラス名とその主キー)はトークンとして HttpSession に保存されます。 エンティティは、HttpSessionで利用可能なトークンを使用して復元されます。
@Persist(HibernatePersistenceConstants.ENTITY)
private Category category;
  • * JPAエンティティ戦略*-データはJPAモジュールを使用して永続化されます。 エンティティのみを保存できます。
@Persist(JpaPersistenceConstants.ENTITY)
private User user;

セッションストレージ

セッションストレージは、複数ページウィザードのデータやログインユーザーの詳細など、ページ全体で使用できる必要があるデータを保存するために使用される高度な概念です。 セッションストレージには、2つのオプションがあります。1つは複雑なオブジェクトを保存し、もう1つは単純な値を保存します

  • セッションストアオブジェクト-複雑なオブジェクトを保存するために使用されます。
  • セッション属性-単純な値を保存するために使用されます。

セッションストアオブジェクト(SSO)

SSOは、 @ SessionStore アノテーションを使用して作成できます。 SSOは、オブジェクトのタイプを使用してオブジェクトを保存します。 たとえば、* Cartオブジェクト*は、トークンとしてCartクラス名を使用して保存されます。 したがって、任意の複雑なオブジェクトをアプリケーションに1回(ユーザーごとに1つ)格納できます。

public class MySSOPage {
   @SessionState
   private ShoppingCart cart;
}

SSOは特殊なストアであり、複雑な/特殊なオブジェクトのみを格納するために使用する必要があります。 SSOを使用して単純なデータ型を保存することもできますが、Stringなどの単純なデータ型を保存すると、アプリケーションに「String」値が1つだけ保存されます。 アプリケーションで単一の「文字列」値を使用することは、単に不可能です。 Apache Tapestryはセッション属性を提供するため、単純なデータ型を使用できます。

セッション属性

セッション属性を使用すると、タイプではなく名前でデータを保存できます。

public class MyPage {
   @SessionAttribute
   private String loggedInUsername;
}

デフォルトでは、セッション属性はフィールド名を使用してセッションのデータを参照します。 以下に示すように、注釈パラメーターによって参照名を変更できます-

public class MyPage {
   @SessionAttribute("loggedInUserName")
   private String userName;
}

名前をセッション参照として使用する際の主な問題の1つは、複数のクラス/ページで同じ名前を誤って使用する可能性があることです。 この場合、保存されたデータは予期せず変更される可能性があります。 この問題を修正するには、クラス/ページ名およびパッケージ名とともに名前を使用する方が良いでしょう。 com.myapp.pages.register.email のようになります。com.myapp.pagesはパッケージ名、registerはページです/クラス名と最後に電子メールは変数(保存される)名です。