EJB – กับงาน Distributed Application

ซีรีส์ EJB ตอนที่ 1

หมายเหตุ: ตอนนี้ผมจะไม่มาสอนวิธีเขียน EJB นะครับเพราะคิดว่าคงมีในอินเตอร์เน็ตเยอะแล้ว

Distributed Application

ใน ตอนที่ 1 ผมได้เกริ่นไว้ว่า EJB คือการพัฒนาโปรแกรมที่เป็นแบบ Component based architecture แปลกันง่ายๆ เลยก็คือ เราแบ่งโปรแกรมออกเป็น component ย่อยๆ โดยแต่ละ component (EJB) สามรถแยกกัน deploy บน EJB container ได้ด้วยตัวมันเอง และไฟล์ WAR ของคุณก็สามารถแยกเป็น component หนึ่งไป deploy บน server ที่แยกต่างหากได้ (สรุปให้เห็นภาพคือ รัน war ใน tomcat ของเครื่องที่ 1 และรัน EJB ใน JBoss ของเครื่องที่ 2) ซึ่งถ้าคุณเคยเขียน RMI มาแล้วจะเข้าใจ Concept นี้เป็นอย่างดี

เนื่องจากว่า EJB เป็นการพัฒนาที่ครอบอยู่บน RMI ซึ่งแน่นอนว่าคุณมีความสามารถของ RMI Client และ RMI Server ไว้ในมือเรียบร้อย (RMI เป็นการเรียกเมธอดของโปรแกรมจาวาที่อยู่คนละเครื่องกันได้ ผมแนะนำให้อ่าน Java Remote Method Invocation – Distributed Computing for Java และ Distributed Programming With Java คุณจะได้ความรู้ RMI และความรู้ Distributed Computing แบบแน่นมากๆ) ซึ่งนี่แหละครับที่เราเรียกว่า Distributed หมายความว่า ถ้าโค้ดของคุณอยู่ใน WAR ไฟล์เดียวและ EJB คุณเป็น Local ทั้งหมด นั่นมั่นไม่ใช่ concept ของ Distributed Computing ครับ

เมื่อมีการทำงานที่แยก component กันอย่างนี้ มันต้องมี service เหล่านี้ตามมาเพื่อ support การทำงานที่เป็นแบบ distributed

  • Naming service
  • Security service
  • Transaction service
  • Event service
  • Message queueing

ซึ่ง Application Server ส่วนมากจะมี Services เหล่านี้ให้บริการอยู่แล้ว (จาก Spec ของ J2EE หรือ Java EE ที่บอกให้เตรียมไว้)

ประโยชน์

จากการที่ผมสอบถามกับเพื่อนๆ ผมที่เลือกใช้ EJB ว่า

ทำไมถึงเลือก EJB

ก็ได้คำตอบมาว่า เขาเอาไว้ใช้ความสามารถเรื่อง Distributed เช่นตอนทำ Load Balance แต่ผมก็เข้าใจว่าเขาทำบน EAR (WAR กับ EJB) รวมกันในไฟล์เดียว เอาไปวางไว้บนเครื่องที่จะทำ Load Balance หลายเครื่อง

สิ่งแรกเลยที่ผมบอกได้ทันทีว่าเขาเข้าใจผิดก็คือ เขาไม่เข้าใจคำว่า Distributed (ย้อนกลับขึ้นไปอ่านหัวข้อข้างบนแล้วมาเทียบกับที่เขาตอบ) เขาเลยไม่ได้ใช้ความสามารถของ EJB ในการทำ Distributed เลย

เพราะถ้าเขาเข้าใจเหมือนหัวข้อด้านบน เขาจะรู้ได้ทันทีว่าประโยชน์ของการทำ Distributed Application มีดังนี้

  • Availability: เพราะเราแยกโปรแกรมออกเป็น component ไว้แล้ว ทำให้ถ้ามีส่วนใดส่วนหนึ่งตาย component ส่วนที่เหลือก็จะไม่กระทบและยังสามารถทำงานต่อไปได้ ซึ่งเราสามารถนำเทคนิค Cluster มาทำเป็น Recovery เพื่อให้ส่วนที่ตายไปสามารถใช้เครื่องอื่นมาทำงานแทนเครื่องที่ตายไปได้
  • Scalability: สมมุติถ้าวันหนึ่งระบบเราต้องสามารถรองรับผู้ใช้งานได้มากกว่าปัจจุบัน เราก็ใช้วิธีเพิ่มเครื่องที่ใช้รัน Component ด้วยวิธีการแบบ Cluster ได้
  • Mainainability: เราแยกระบบเป็น Component ทำให้เราสามารถ Monitor component เฉพาะจุดได้ง่ายขึ้น เพราะรันบน Application Server ที่แยกกัน ซึ่งเป็นประโยชน์ต่อการทำ Tuning ด้วย

ส่งท้าย

หวังว่าเมื่ออ่านบทความนี้จบแล้ว จะเข้าใจ EJB กับระบบ Distributed และ Component base architecture กันมากขึ้นนะครับ

One thought on “EJB – กับงาน Distributed Application

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s