ซึ่งเป็น Application Framework สำหรับ Java EE5
จุดเด่นของ Seam ก็คือการ integrate context ระหว่าง
Presentation Context (JSF) กับ Business Logic Context (EJB)
Gavin King (founder ของ Hibernate) บอกว่า
One of the (several) goals of Seam is to bring Ruby On Rails style productivity to the Java EE platform
วันนี้ก็เลยนั่งทำ Diagram ที่ present ให้เห็นภาพว่า
การ integrate ระหว่าง jsf context กับ ejb context
ว่าเชื่อมต่อกันอย่างไร
- เริ่มจาก user submit ข้อมูลจาก jsp
seam จะพยายาม binding data เข้าไปที่ Entity Bean
เมื่อพบว่ามีการระบุ user.name
seam ก็จะมองหา Entity Bean ที่มี annotaion ระบุ@Name("user")
เมื่อรู้ว่าเป็น entity ตัวไหนแล้ว
seam ก็จะ initialize Entity Bean นั้นขึ้นมา
พร้อมกับทำการ set ค่าให้ - ใน submit component ที่ jsp มีการระบุ action ไว้ว่า
ต้องการให้ trig action ที่ชื่อregister.register
seam ก็จะทำการหา Session Bean ที่มีการ annotation ระบุเป็น@Name("register")
แล้ว call method ที่ชื่อregister
ให้ - ในจังหวะก่อนที่จะเริ่ม call นั้น
seam จะตรวจว่า Session Bean นั้นต้องการให้ inject
อะไรบ้าง ซึ่งจะพบว่า RegisterAction ต้องการให้ inject
user (ที่เกิดจากข้อ 1) เข้ามาด้วย
นอกจากนี้ยังสามารถ inject FacesContext (Context ของ Presentaion Layer)
เข้ามาด้วย ซึ่งทำให้เราสามารถส่ง message กลับไปยัง Presentation Layer ได้ง่าย
เช่นการ push Error Message กลับไป - หลังจากทำงานสำเร็จ method register
ก็จะ return name ของ Page ที่ต้องการแสดงผลกลับมา
ซึ่งจะถูกนำไป search ใน face-config.xml file
เพื่อหาว่า jsp ตัวไหนเป็นผู้รับผิดชอบในการ render
ดูแล้วเยี่ยมมากเลย
เมื่อบวกกับ ประเด็นที JBoss มี Embed EJB3 Container ออกมา
(สามารถนำไป embed ใน Tomcat ได้)
ทำให้ Seam ดูจะเป็นคู่แข่งที่น่ากลัวของ Tapestry 4
ส่วนใครที่ยังไม่เคยเห็น Spec ของ EJB3 นั้น
แนวทางของ EJB3 จะออกมาดังนี้
ใช้ Annotation เข้ามาช่วย
ทำให้ลด xml config file ไปได้จำนวนหนึ่ง
พร้อมทั้งเปลี่ยน model ในการเขียน Session Bean
ไปเป็น POJO (เหมือนที่ spring ทำอยู่)
ทำให้ลด Overhead ในการเขียน EJB แบบเดิม
ซึ่งต้องมี interface วุ่นวายไปหมด
ในส่วนของ Entity Bean ใน Spec EJB3 นั้น
สำหรับคนที่ใช้ Hibernate เป็นอยู่แล้ว
ก็แทบจะไม่ต้องเรียนรู้อะไรเพิ่มเติมเลย
อ่านเพ่ิมเติม
SEAM - Contextual Components
No comments:
Post a Comment