Apache Tapestry - Depolama

Her web uygulamasında, kullanıcı nesnesi, kullanıcı tercihleri ​​vb. Gibi belirli kullanıcı verilerini depolamanın bir yolu olmalıdır. Örneğin, bir alışveriş sepeti uygulamasında, kullanıcının seçtiği öğeler / ürünler, kullanıcı tercih edene kadar geçici bir pakete (alışveriş sepeti) kaydedilmelidir. ürünleri satın almak için. Öğeleri bir veritabanına kaydedebiliriz, ancak tüm kullanıcılar seçilen öğeleri satın almayacağı için çok pahalı olacaktır. Bu nedenle, öğeleri saklamak / saklamak için geçici bir düzenlemeye ihtiyacımız var. Apache Tapestry Verileri kalıcı hale getirmek için iki yol sunar ve bunlar -

  • Kalıcılık sayfası verileri
  • Oturum Depolama

Her ikisinin de kendi avantajları ve sınırlamaları vardır. Aşağıdaki bölümlerde kontrol edeceğiz.

Kalıcılık Sayfası Verileri

Kalıcılık Sayfası Verileri, verileri istekler arasında tek bir sayfada tutmak için basit bir kavramdır ve aynı zamanda Page Level Persistence. Kullanılarak yapılabilir@Persist ek açıklama.

@Persist 
public int age;

Bir alana @Persist ile açıklama eklendiğinde, alanın değeri istek boyunca korunacak ve değer istek sırasında değiştirilirse, bir dahaki sefere erişildiğinde yansıtılacaktır. Apache Tapestry, @Persist konseptini uygulamak için beş tür strateji sağlar. Bunlar aşağıdaki gibidir -

  • Session Strategy - Veriler Oturum kullanılarak saklanır ve bu bir varsayılan stratejidir.

  • Flash Strategy- Veriler Oturum kullanılarak da saklanır, ancak çok kısa ömürlüdür. Veriler yalnızca bir sonraki talepte mevcut olacaktır.

@Persist(PersistenceConstants.FLASH) 
private int age;
  • Client Strategy - Veriler istemci tarafında URL sorgu dizesi, formdaki gizli alan vb. Gibi saklanır.

@Persist(PersistenceConstants.FLASH) 
private int age;
  • Hibernate Entity Strategy- Veriler, Varlık olarak Hazırda Bekletme modülü kullanılarak saklanır. Varlık Hazırda Bekletme'de saklanacak ve referansı (Java sınıf adı ve birincil anahtarı) içinde belirteç olarak kaydedilecektir.HttpSession. Varlık, HttpSession'da bulunan belirteç kullanılarak geri yüklenecektir.

@Persist(HibernatePersistenceConstants.ENTITY) 
private Category category;
  • JPA Entity Strategy- Veriler bir JPA modülü kullanılarak saklanır. Yalnızca Varlık depolayabilir.

@Persist(JpaPersistenceConstants.ENTITY) 
private User user;

Oturum Depolama

Oturum depolama, birden çok sayfalı sihirbazdaki veriler, oturum açılmış kullanıcı ayrıntıları vb. Gibi sayfalarda bulunması gereken verileri depolamak için kullanılan gelişmiş bir kavramdır. Oturum Deposu, biri karmaşık nesneyi depolamak ve diğeri basit değerleri depolamak için iki seçenek sunar.

  • Session Store Object - Karmaşık nesneleri depolamak için kullanılır.

  • Session Attributes - Basit değerleri saklamak için kullanılır.

Oturum Deposu Nesnesi (SSO)

Bir SSO, kullanılarak oluşturulabilir @SessionStoreek açıklama. SSO, nesnenin türünü kullanarak nesneyi depolar. Örneğin,Cart Objecttoken olarak bir Cart sınıf adı kullanılarak depolanacaktır. Böylece, herhangi bir karmaşık nesne bir uygulamada bir kez (kullanıcı başına bir tane) depolanabilir.

public class MySSOPage { 
   @SessionState 
   private ShoppingCart cart; 
}

SSO, özel bir mağazadır ve yalnızca karmaşık / özel nesneleri depolamak için kullanılmalıdır. Basit veri türleri bir SSO kullanılarak da depolanabilir, ancak String gibi basit veri türlerini depolamak, uygulamada yalnızca bir "String" değeri depolamasına neden olur. Uygulamada tek bir "String" değeri kullanmak kesinlikle mümkün değildir. Apache Tapestry, Oturum Nitelikleri sağladığı için basit veri türlerini kullanabilirsiniz.

Oturum Özellikleri

Oturum Öznitelikleri, verilerin türü yerine ada göre depolanmasını sağlar.

public class MyPage { 
   @SessionAttribute  
   private String loggedInUsername; 
}

Varsayılan olarak, Oturum Nitelikleri, oturumdaki verilere başvurmak için alan adını kullanır. Referans adını aşağıda gösterildiği gibi açıklama parametresiyle değiştirebiliriz -

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

Adı oturum referansı olarak kullanmanın ana sorunlarından biri, yanlışlıkla aynı adı birden fazla sınıfta / sayfada kullanabileceğimizdir. Bu durumda, depolanan veriler beklenmedik şekilde değişebilir. Bu sorunu çözmek için, adı sınıf / sayfa adı ve paket adı ile birlikte kullanmak daha iyi olacaktır.com.myapp.pages.register.email, burada com.myapp.pages, paket adı, kayıt, sayfa / sınıf adı ve son olarak e-posta, değişken (depolanacak) adıdır.