Wednesday, September 21, 2005

JBoss Seam

เมื่อวานอ่านเจอเรื่อง JBoss Seam
ซึ่งเป็น 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
ว่าเชื่อมต่อกันอย่างไร



  1. เริ่มจาก user submit ข้อมูลจาก jsp
    seam จะพยายาม binding data เข้าไปที่ Entity Bean
    เมื่อพบว่ามีการระบุ user.name
    seam ก็จะมองหา Entity Bean ที่มี annotaion ระบุ @Name("user")
    เมื่อรู้ว่าเป็น entity ตัวไหนแล้ว
    seam ก็จะ initialize Entity Bean นั้นขึ้นมา
    พร้อมกับทำการ set ค่าให้
  2. ใน submit component ที่ jsp มีการระบุ action ไว้ว่า
    ต้องการให้ trig action ที่ชื่อ register.register
    seam ก็จะทำการหา Session Bean ที่มีการ annotation ระบุเป็น @Name("register")
    แล้ว call method ที่ชื่อ register ให้
  3. ในจังหวะก่อนที่จะเริ่ม call นั้น
    seam จะตรวจว่า Session Bean นั้นต้องการให้ inject
    อะไรบ้าง ซึ่งจะพบว่า RegisterAction ต้องการให้ inject
    user (ที่เกิดจากข้อ 1) เข้ามาด้วย
    นอกจากนี้ยังสามารถ inject FacesContext (Context ของ Presentaion Layer)
    เข้ามาด้วย ซึ่งทำให้เราสามารถส่ง message กลับไปยัง Presentation Layer ได้ง่าย
    เช่นการ push Error Message กลับไป
  4. หลังจากทำงานสำเร็จ 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

Related link from Roti

No comments: