Thursday, November 8, 2012

KM: JEE Series - การใช้งาน JPA caching

JPA Caching โดยใช้ Native Query

Problem

เนื่องจากต้องการทำ entity caching เพื่อ join ข้อมูลจาก 2 table โดยมีการจัด priority ของข้อมูลคือให้เอาจาก table แรกเป็นหลัก ถ้าไม่เจอให้ไปดึงข้อมูลจาก table สอง 

Assumption

พัฒนาโดยใช้
  • JPA 1.0
  • Hibernate 3
  • WebLogic Workshop 10.3

Troubleshooting

  1. เริ่มต้นด้วยการสร้าง Named Query จากเงื่อนไขของปัญหาข้างต้น จึงใช้ Native Query เพื่อ join 2 table เข้าด้วยกัน และเลือกข้อมูลจาก priority ของ table เป็นค่าส่งกลับไปใช้งาน โดยทำการระบุ hint ว่าจะทำ caching บน entity นี้


  2. สร้าง file ehcache.xml และวางตามตัวอย่าง


  3. config ค่า parameter สำหรับการทำ caching ในที่นี้ตั้ง TTL ไว้ที่ 60 วินาที


  4. แก้ไข persistence.xml เพื่อเปิดการใช้งาน caching โดยในที่นี้ใช้ ehcache library


  5. เพิ่ม backport-util-concurrent-3.0.jar และ ehcache-1.5.0.jar ใน server class path


  6. เรียกใช้งาน Named Query ที่สร้างไว้

Conclusion

จากการทดสอบ ได้ผลลัพธ์ออกมาถูกต้อง โดยดูจาก sql statement ที่แสดงออกใน console จะไม่พบ statement ที่ทำการ caching ไว้ แต่ใน JPA น่าจะมีวิธีทำที่ถูกต้องกว่านี้

No comments:

Post a Comment