Tapestry 5 จะ load module ไหนบ้าง


ในกรณีที่เราใช้ TapestryFilter ที่ถูกเรียกจาก servlet container โดยที่ระบุไว้ใน web.xml. ปกติแล้วจะมี module ของ Tapestry ถูก load ขึ้นมาจำนวนหนึ่ง. ผมเกิดสงสัยขึ้นมาว่าแล้ว module ไหนถูก load บ้าง. ก็เลยพยายามแกะดู. module ที่เห็นถูก load แบบ hard code เลยก็คือ TapestryModule ชื่อฟ้องขนาดนี้ ตามหลักฐานใน TapestryAppInitializer.

อีก module นึงก็คือ module ประจำ app ของเรา เช่น ถ้า app ของเราชื่อ "app1" แล้ว module ก็จะชื่อ "App1Module". Tapestry รู้ชื่อ app ของเราได้อย่างไร? คำตอบคือชื่อ app ได้มาจาก <filtername> ใน web.xml ยกตัวอย่างเช่น <filter-name>app1</filter-name>. แล้ว package ของ app ของเราหละ? ก็ใส่มาใน web.xml เหมือนกัน เช่น <param-value>org.example.mypkg</param-value>.

อีกจุดนึงคือเมื่อเพิ่ม tapestry-hibernate เข้ามา Tapestry รู้ได้ไงว่า ต้องไป load org.apache.tapestry.hibernate.HibernateModule มา? ผมพยายามจะหาดูว่าแอบไป hard code ไว้ที่ไหนหรือเปล่า แต่ก็ไม่เจอ. ไล่ไปไล่มาก็พบว่า Tapestry จะ load module ตามที่กำหนดไว้ใน META-INF/MANIFEST.MF โดยดู property: "Tapestry-Module-Classes". แต่ว่าหาใน source tree ของ tapestry-hibernate ก็ไม่เจอ MANIFEST.MF เลย. ที่ไม่เจอก็เพราะว่า <manifestEntries> เข้าไปอยู่ใน pom.xml ของ tapestry-hibernate เรียบร้อยแล้ว.

อาจจะมีการ load module อื่นๆอีก แต่ตอนนี้ผมอยากรู้แค่นี้ ก็เลยไม่หาต่อแล้ว. จริงๆ แล้วเราสามารถจะเขียน application โดยไม่ต้องรู้ก็ได้ว่า module ไหนจะถูก load ขึ้นมาบ้าง. แค่รู้่ว่า module ของเราที่จะถูก load แน่ก็คือ "<ชื่อ app> + Module" ก็พอแล้ว. ถ้าสร้าง project จาก org.apache.tapestry.quickstart นี่ module นั้นก็จะถูกสร้างมารอให้เราไปแก้อยู่แล้ว. แต่ว่าผมอยากรู้นิ. :-P
หมายเลขบันทึก: 111990เขียนเมื่อ 16 กรกฎาคม 2007 15:04 น. ()แก้ไขเมื่อ 15 พฤษภาคม 2012 11:10 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (0)

ไม่มีความเห็น

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท