Thursday, March 30, 2006

Tapestry 4

หลังจากติดอกติดใจกับ Rails มาพักใหญ่
วันนี้ก็ได้ฤกษ์กลับไป Evaluate Tapestry4.0 อีกครั้ง
(ปัจจุบันที่บริษัทฯใช้ version 3 อยู่)

แรกสุด ก็ต้องดูที่ startup time ก่อน
เมื่อใช้กับ jetty, Tapestry จะใช้เวลา start ประมาณ 5 วินาที
อืมม์..ใช้ได้ จำได้ว่า ตอนที่เป็น beta แรกๆ มันนานกว่านี้เยอะ
ในเวลา 5 วินาทีนี้ เป็นของ Hivemind (ฐานรากของ Tapestry) ไปซะ 3 วินาที

เวลาชุดถัดไปที่ต้องวัด ก็คือเวลาในการ compile page,
tapestry ก็ใช้ technique เดียวกับ JSP
นั่นคือ เมื่อเรียกใช้ ก็จะมีการ compile
(สิ่งที่ tapestry ทำ ก็คือ การ generate class file ขึ้นมา
โดยใช้ javassist)
ผลก็คือ ใช้เวลา compile ไปเสีย 9 วินาที
อันนี้สินาน แต่ก็พอยอมรับได้ (เพราะมันทำเฉพาะครั้งแรกครั้งเดียว)

ความแตกต่างต่อไปที่เห็น ก็คือ
เดิม tapestry ต้องมี xml file ที่ใช้เป็น glue ระหว่าง
html file กับ class file
โดย xml file นี้จะระบุว่า html นี้จับคุ่กับ class file ไหน
มาใน Tapestry 4.0 นี้ มีการใช้ convention แบบ rails เข้ามาช่วย
กล่าวคือ สมมติว่า html ของเราชื่อ Home.html,
Tapestry จะมองหา class file ที่ชื่อ Home.class ใน default package
ถ้าเจอ ก็จะใช้ตัวนั้นเป็น BasePage
ซึ่งเราสามารถ config ระบุ package prefix ที่จะใช้ในการค้นหา class file ได้
<application>  
<meta key="org.apache.tapestry.page-class-packages" value="myproj.pages"/>
</application>

ส่วนกรณีที่ html page เราอยู่ใน subfolder
เวลาค้นหา BasePage, ชื่อของ subfoder ก็จะถูกแปลงเป็น packaege name ด้วย
ยกตัวอย่าง "admin/UserEdit,
การค้นหา class ก็จะค้นหา class ที่ชื่อ UserEdit
ใน package "package_prefix.admin"

ประเด็นที่ยังค้างคาใจ ใน tapestry4 ที่ต้องลองต่อ ก็คือ
การนำเอา annotation มาใช้เป็นกลไกในการ inject (dependency injection)
อยากรู้ว่า มัน work ไหม

Related link from Roti

No comments: