แปลจาก เโดอกสาร ของ Sunil Patil, JavaWorld.com, 03/04/08 Hello, OSGi, Part 1: Bundles for beginners
เรื่องของ Open Services Gateway Initiative(OSGi) เป็นสถาปัตยกรรมที่ถูกออกแบบมาเพื่อรองรับการพัฒนาและติดตั้งแอพพลิเคชั่นหรือไลบราลี่ให้อยู่ในรูปแบบของโมดูล เอกสารชุดแรกนี้จะเป็นเรื่องของการแนะนำให้รู้จัก OSGi โดย Sunil Patil จะนำท่านเข้าสู่โลกของการพัฒนาแอพพลิเคชั่นด้วย OSGi ด้วยการสร้างสุดยอดแอพพลิเคชั่นชื่อ HelloWorld ด้วยการใช้ Eclipse OSGi ชื่อ Equinox นอกจากนี้เรายังจะได้รับความรู้เกี่ยวกับ service-oriented application ด้วยการใช้ OSGi และแนะนำเล็กน้อยเกี่ยวกับ OSGi ServiceFactory และ ServiceTracker คลาส
อีกครั้งกับ Open Service Gateway Initative(OSGi) ตัวมันนั้นคือสิ่งที่ทำให้ Java สามารถทำ Dynamic Module ได้หรือเรียกอีกอย่างว่าสถาปัตยกรรมการพัฒนาแอพพลิเคชั่นเชิงมอดูลา ปัจจุบันเองมี container หลายตัวที่ถูกสร้างให้รองรับการทำงานแบบนี้เช่น Knopfilefish, Equinox และ Apache Felix ซึ่งตัว OSGi นั้นเมื่อเราใช้งานมันแล้วเราจะสามารถแตกแอพพลิเคชั่นของเราออกเป็นโมดูลย่อยๆเพื่อให้ง่ายต่อการควบคุม dependency ระหว่างตัวโมดูลได้ง่ายขึ้น
เมื่อเราพิจรณา OSGi ในแง่ของผู้ผลิต container แล้วนั้นสิ่งที่ผู้ผลิตเหล่านั้นจำเป็นต้องทำคือการทำตามมาตรฐานเฉกเช่นกับการสร้าง Servlet Container หรือ EJB Container และสำหรับ OSGi แล้วมีสองสิ่งด้วยกันที่ต้องทำ หนึ่งคือจะต้องสร้างเซอร์วิสต่างๆที่ container จะต้องทำ สองคือส่วนเชื่อมต่อระหว่างแอพพลิเคชั่นและ container ดังนั้นการสร้างแอพพลิเคชั่นด้วย OSGi สามารถมองได้ง่ายๆคือทำตาม OSGi API และเอาไป deploy บน OSGi container ดังนั้นในมุมมองของนักพัฒนานั้นประโยชน์ที่เราได้รับจะสามารถจำแนกได้ดังนี้
- เราสามารถ เปิด ปิด หยุด โมดูลต่างๆใน container ได้อย่างอิสระและไม่ต้อง restart ตัว container ด้วย
- แอพพลิเคชั่นของเราสามารถมีได้หลาย เวอร์ชั่น ณ เวลาเดียวกัน
- OSGi เตรียมโครงสร้างพื้นฐานที่ดีสำหรับการก้าวไปสู่โลกของ Service-Oriented Application และรวมไปถึงเรื่อง Embedded, mobile และ Rich Internet app
- หลายคนคงสังสัยว่าในเมื่อเรามี Servlet Container สำหรับทำเวบแอพพลิเคชั่นและ EJB Container เอาไว้ทำทรานแซคชั่นแล้ว ทำไมเราต้องมี OSGi อีกล่ะ คำตอบคือด้วยการใช้ OSGi เราสามารถแยกแอพพลิเคชั่นที่ซับซ้อนมากออกเป็นโมดูลเล็กได้อีก แต่ในรายละเอียดแล้วจะใอยู่ในส่วนอื่นของเอกสารนี้
OSGi ในมุมมองของ Enterpise แอพพลิเคชั่น
การกำหนดมาตรฐานของ OSGi นั้นเริ่มราวๆเดือนมีนา ปี 1999 โดยที่เนื้อหาหลักของงานนี้อยู่ที่การสร้างมาตรฐานเปิดขึ้นมาสำหรับการให้บริการเซอร์วิสต่างๆบน network และอุปรณ์ต่างบนนั้น โดยที่แนวคิดที่เป็นพื้นฐานของ OSGi คือเมื่อใดก็ตามที่เราทำการเพิ่ม OSGi เซอร์วิสแพลทฟอร์มเข้าไปในอุปกรณ์เน็ทเวิร์ค (โดยการฝังเข้าไปเหมือน server) แล้วเราควรจะมีสิทธิ์ในการจัดการและบริหารซอฟท์แวร์คอมโพเนนท์ต่างๆบนนั้นได้จากทุกๆที่ในเน็ทเวิร์คนั้น เช่นเราควรที่จะสามารถ ติดตั้ง แก้ไข หรือ ถอด คอมโพเนนท์เหล่านั้นได้กลางอากาศเลย โดยไม่ต้องไปสร้างผลกระทบใดๆต่อการทำงานของเซิร์ฟเวอร์นั้นๆ
ซึ่งหลายปีมานี้เทคโนโลยี OSGi ได้ถูกบรรจุไว้ในอุปกรณ์ระบบและเน็ทเวิร์คต่างๆ และเหนือสิ่งอื่นใดในเรื่องของการพัฒนาแอพพลิเคชั่น Eclipse ได้รวมเอา OSGi เข้ามาไว้ในตัวเองด้วยกัน เราจะเห็นได้ว่า OSGi คือการรวมเอาเทคโนโลยีที่มีอนาคตและมีมูลค่าอย่างยิ่ง มารวมกันเพื่อการสร้างแอพพลิเคชั่นระดับ เอนเทอร์ไพรส์ โดยเฮพาะ
การเติบโตของการสนับสนุน
ปี 2003 ทีมพัฒนา Eclipse วางแผนเรื่องของการทำให้ Eclipse มีความยืดหยุ่นและมีพลวัตมากขึ้นในเรื่องของการทำ Rich Client Platform และ เพิ่มความเป็นโมดูลามากขึ้น และแน่นอนทีมได้ตกลงใจใช้ OSGi เฟรมเวิร์คเพื่อการทำโมเดลเรื่องคอมโพเนนท์แบบพลวัต และรุ่นแรกที่ใช้มาตรฐานนี้คือ Eclipse 3.0
แนวทางนี้ยังส่งผลไปถึงการพัฒนา Application Server ด้วยเพราะทีมพัฒนาของบริษัทต่างๆก็เริ่มสางแผนสำหรับเรื่องการรองรับการทำงานกับ OSGi ไว้แล้ว SpringFramework สนับสนุนไปเรียบร้อย โดยการทำโปรเจค Spring Dynamic Module ซึ่งเป็นโปรเจคท่ทำให้เราสามารถใช้ OSGi บนโครงสร้างการทำงานของ Spring เป็นไปอย่างง่ายดาย
Open source OSGi containers
ถ้าเรามอง OSGi จากมุมมองของนักพัฒนา เราสามารถมองมันเป็นส่วนหนึ่งของระบบที่ดูคล่องตัวไม่เทอะทะ สามารถนำไปวางไว้ในระบบงานขนาดใหญ่ได้อย่างง่ายดาย ยกตัวอย่างเช่นในกรณีที่เราพัฒนาเวบแอพพลิเคชั่นที่มีระดับความซับซ้อนสูงมาก และเราต้องการแยกการทำงานออกเป็นโมดูลย่อยๆเช่น มีโมดูลเกี่ยวกับ View มีอีกโมดูลเกี่ยวกับ DAO และอีกโมดูลเกี่ยวกับ Model และเราจัดการความสัมพันธ์ของโมดูลทั้งสามด้วยการใช้ OSGi container ดังนั้นเราจึงสามารถแก้ไขโมดูล DAO (ปรับปรุงประสิทธิภาพให้เร็วขึ้น) ได้โดยไม่ต้องทำการ restart แอพพลิเคชั่นของเราเลย
และแน่นอนตราบเท่าที่เราคงสภาพให้แอพพลิเคชั่นของเราเป็นไปตามมาตรฐาน OSGi แล้วเราสามารถย้ายแอพพลิเคชั่นของเราไปวางไว้บน OSGi Container ตัวใดๆก็ได้ซึ่งปัจจุบันมีอยู่สามตัวคือ
Equinox: เป็น OSGi container ที่สร้างตามมาตรฐาน OSGi Service Platform Release 4 ซึ่งตัวมันเปรียบเสมือนหัวใจของ Eclipse Platform ตัว equinox มีฟังก์ชั่นพื้นฐานที่บังคับทั้งหมดของมาตรฐานและมีฟังก์ชั่นเสริมอีกจำนวนมาก
Knopflerfish: เป็น OSGi container ที่สร้างตามมาตรฐาน OSGi R3 และ R4 โดยที่ Knopflerfish 2 มีฟังก์ชั่นพื้นฐานที่บังคับทั้งหมดของมาตรฐานและมีฟังก์ชั่นเสริมบางตัวใน R4
Apache Felix: เป็น OSGi Container แบบเปิดซอร์สที่ยังไม่สามารถทำได้ตามมาตรฐาน R4 ได้ทั้งหมด
tutorial รอหน่อยนะครับ

น่าลอง เพื่อจะได้เห็นภาพ ของ SOA ได้เข้าใจขึ้น
ผมเคยคิดเรื่อง dynamic module เหมือนกัน
แต่นึกไม่ออกว่าจะเขียนโค้ดยังไง ให้เนี๊ยบ ๆ
ไหนได้เขาพัฒนาจนเป็นมาตรฐาน ซะแล้ว
อ่านเพลินมาก ๆ