Apache Tapestry - ที่เก็บข้อมูล
ทุกเว็บแอปพลิเคชันควรมีวิธีการจัดเก็บข้อมูลผู้ใช้บางอย่างเช่นอ็อบเจ็กต์ผู้ใช้ค่ากำหนดของผู้ใช้ ฯลฯ ตัวอย่างเช่นในแอปพลิเคชันตะกร้าสินค้าควรบันทึกรายการ / ผลิตภัณฑ์ที่ผู้ใช้เลือกไว้ในที่เก็บข้อมูลชั่วคราว (รถเข็น) จนกว่าผู้ใช้จะชอบ เพื่อซื้อผลิตภัณฑ์ เราสามารถบันทึกรายการในฐานข้อมูลได้ แต่จะมีราคาแพงเกินไปเนื่องจากผู้ใช้ทั้งหมดจะไม่ซื้อรายการที่เลือก ดังนั้นเราจำเป็นต้องมีการจัดเตรียมชั่วคราวเพื่อจัดเก็บ / คงอยู่ Apache Tapestry มีสองวิธีในการเก็บรักษาข้อมูลและคือ -
- ข้อมูลหน้าการคงอยู่
- พื้นที่จัดเก็บเซสชัน
ทั้งสองมีข้อดีและข้อ จำกัด ในตัวเอง เราจะตรวจสอบในส่วนต่อไปนี้
ข้อมูลหน้าความคงอยู่
Persistence Page Data เป็นแนวคิดง่ายๆในการคงข้อมูลไว้ในเพจเดียวระหว่างคำขอและเรียกอีกอย่างว่าเป็น Page Level Persistence. สามารถทำได้โดยใช้ไฟล์@Persist คำอธิบายประกอบ
@Persist
public int age;
เมื่อมีการใส่คำอธิบายประกอบด้วย @Persist แล้วค่าของฟิลด์จะยังคงอยู่ตลอดการร้องขอและหากค่ามีการเปลี่ยนแปลงในระหว่างการร้องขอฟิลด์นั้นจะแสดงเมื่อมีการเข้าถึงในครั้งต่อไป Apache Tapestry มีกลยุทธ์ห้าประเภทในการนำแนวคิด @Persist ไปใช้ มีดังนี้ -
Session Strategy - ข้อมูลยังคงอยู่โดยใช้เซสชันและเป็นกลยุทธ์เริ่มต้น
Flash Strategy- ข้อมูลยังคงอยู่โดยใช้เซสชันเช่นกัน แต่เป็นข้อมูลที่มีอายุสั้นมาก ข้อมูลจะพร้อมใช้งานในคำขอถัดไปเพียงรายการเดียว
@Persist(PersistenceConstants.FLASH)
private int age;
Client Strategy - ข้อมูลยังคงอยู่ในฝั่งไคลเอ็นต์เช่นสตริงการสืบค้น URL ฟิลด์ที่ซ่อนอยู่ในแบบฟอร์มเป็นต้น
@Persist(PersistenceConstants.FLASH)
private int age;
Hibernate Entity Strategy- ข้อมูลยังคงอยู่โดยใช้โมดูลไฮเบอร์เนตเป็นเอนทิตี เอนทิตีจะถูกเก็บไว้ใน Hibernate และการอ้างอิง (ชื่อคลาส Java และคีย์หลัก) จะถูกบันทึกเป็นโทเค็นในHttpSession. เอนทิตีจะถูกกู้คืนโดยใช้โทเค็นที่มีอยู่ใน HttpSession
@Persist(HibernatePersistenceConstants.ENTITY)
private Category category;
JPA Entity Strategy- ข้อมูลยังคงอยู่โดยใช้โมดูล JPA มันจะเก็บเอนทิตีได้เท่านั้น
@Persist(JpaPersistenceConstants.ENTITY)
private User user;
พื้นที่จัดเก็บเซสชัน
พื้นที่จัดเก็บเซสชันเป็นแนวคิดขั้นสูงที่ใช้ในการจัดเก็บข้อมูลที่จำเป็นต้องมีในหน้าต่างๆเช่นข้อมูลในวิซาร์ดหลายเพจล็อกอินรายละเอียดผู้ใช้ ฯลฯ Session Storage มีสองตัวเลือกตัวเลือกหนึ่งในการจัดเก็บอ็อบเจ็กต์ที่ซับซ้อนและอีกตัวหนึ่งเพื่อเก็บค่าอย่างง่าย
Session Store Object - ใช้เพื่อเก็บวัตถุที่ซับซ้อน
Session Attributes - ใช้เพื่อเก็บค่าง่ายๆ
วัตถุที่เก็บเซสชัน (SSO)
สามารถสร้าง SSO ได้โดยใช้ @SessionStoreคำอธิบายประกอบ สปส. จะจัดเก็บวัตถุโดยใช้ชนิดของวัตถุ ตัวอย่างเช่นไฟล์Cart Objectจะถูกจัดเก็บโดยใช้ชื่อคลาส Cart เป็นโทเค็น ดังนั้นจึงสามารถจัดเก็บวัตถุที่ซับซ้อนได้หนึ่งครั้งในแอปพลิเคชัน (หนึ่งรายการต่อผู้ใช้)
public class MySSOPage {
@SessionState
private ShoppingCart cart;
}
SSO เป็นร้านค้าเฉพาะและควรใช้เพื่อเก็บเฉพาะวัตถุที่ซับซ้อน / พิเศษ นอกจากนี้ยังสามารถจัดเก็บประเภทข้อมูลอย่างง่ายโดยใช้ SSO ได้ แต่การจัดเก็บประเภทข้อมูลอย่างง่ายเช่น String ทำให้เก็บค่า "String" ได้เพียงค่าเดียวในแอปพลิเคชัน การใช้ค่า "สตริง" เดียวในแอปพลิเคชันนั้นไม่สามารถทำได้ คุณสามารถใช้ประเภทข้อมูลง่ายๆได้เนื่องจาก Apache Tapestry มีคุณสมบัติเซสชัน
แอตทริบิวต์เซสชัน
แอตทริบิวต์เซสชันช่วยให้สามารถจัดเก็บข้อมูลโดยใช้ชื่อแทนประเภท
public class MyPage {
@SessionAttribute
private String loggedInUsername;
}
โดยค่าเริ่มต้นแอตทริบิวต์เซสชันจะใช้ชื่อฟิลด์เพื่ออ้างอิงข้อมูลในเซสชัน เราสามารถเปลี่ยนชื่ออ้างอิงด้วยพารามิเตอร์คำอธิบายประกอบดังที่แสดงด้านล่าง -
public class MyPage {
@SessionAttribute("loggedInUserName")
private String userName;
}
ปัญหาหลักอย่างหนึ่งในการใช้ชื่อเป็นการอ้างอิงเซสชันคือเราอาจใช้ชื่อเดียวกันโดยไม่ได้ตั้งใจในมากกว่าหนึ่งคลาส / หน้า ในกรณีนี้ข้อมูลที่จัดเก็บอาจเปลี่ยนแปลงโดยไม่คาดคิด ในการแก้ไขปัญหานี้ควรใช้ชื่อร่วมกับชื่อคลาส / เพจและชื่อแพ็กเกจเช่นcom.myapp.pages.register.emailโดยที่ com.myapp.pages เป็นชื่อแพ็กเกจ register คือชื่อเพจ / คลาสและสุดท้ายอีเมลเป็นชื่อตัวแปร (ที่จะจัดเก็บ)