คุณมีซอฟต์แวร์อยู่แล้ว แต่คุณยังต้องการวิธีที่มีประสิทธิภาพมากขึ้นในการทำให้ผู้ใช้ทางเทคนิคของคุณสามารถขยายแพลตฟอร์มได้
แม้ว่า OSGi จะเป็นที่รู้จักกันดีในหมู่นักพัฒนา Java ส่วนใหญ่ การผสานรวมเข้ากับผลิตภัณฑ์ของคุณอาจดูเหมือนเป็นงานที่น่ากลัว การขาดความชัดเจนเกี่ยวกับการทำงานที่แม่นยำของ OSGi ทำให้เกิดความสับสนมากขึ้น
ตรงกันข้ามกับสิ่งที่พวกเขาต้องการทดลองด้วย OSGi รู้สึกเหมือนกำลังพยายามแล่นเรือในทะเลกว้างไปยังนักพัฒนา Java หลายคน
บทความนี้จะแนะนำคุณเกี่ยวกับบทช่วยสอนเกี่ยวกับฤดูใบไม้ผลิของ OSGi Felix โดยใช้โปรแกรมที่ตรงไปตรงมาและอธิบายข้อดีและรายละเอียดที่สำคัญอื่นๆ
OSGi คืออะไร?
การสร้างและแจกจ่ายโมดูลและส่วนประกอบสามารถทำได้โดยกรอบงาน Java ที่เรียกว่า OSGi (Open Service Gateway Initiative)
โดยเน้นที่การห่อหุ้มฟังก์ชันและการเชื่อมต่อแบบหลวม ซึ่งมีข้อดีหลายประการสำหรับนักพัฒนา รวมถึงฟังก์ชันแบบโมดูลาร์ที่สามารถถ่ายโอนระหว่างซอร์สโค้ดและการทดสอบที่ไม่ต้องการการพึ่งพาที่ไม่สิ้นสุดได้อย่างง่ายดาย
OSGi ทำงานอย่างไร?
ระบบองค์ประกอบแบบไดนามิกสำหรับ Java ถูกกำหนดโดยชุดข้อกำหนดที่เรียกว่า OSGi ข้อมูลจำเพาะเหล่านี้ช่วยให้เกิดแนวทางการพัฒนาซึ่งแอปพลิเคชันสร้างขึ้นจากหลายส่วนแล้วรวมเป็นแพ็กเกจ
ส่วนประกอบเหล่านี้ใช้บริการในพื้นที่และเครือข่ายเพื่อสื่อสาร การทำให้รหัสหลักของโปรแกรมมีขนาดกะทัดรัดที่สุดเท่าที่จะเป็นไปได้คือจุดมุ่งหมาย สามารถเชื่อมต่อระหว่างรหัสนี้กับส่วนประกอบต่างๆ ได้สูง
องค์ประกอบอาคารที่ใช้ซ้ำได้ของแอปพลิเคชันนี้เรียกว่าส่วนประกอบ นึกถึงคุณลักษณะต่างๆ เช่น ตะกร้าสินค้าสำหรับเว็บไซต์อีคอมเมิร์ซของคุณ หรือแอปพลิเคชันบัญชีเงินเดือนสำหรับระบบการจัดการพนักงานของคุณ
ส่วนประกอบสามารถใช้ OSGi เพื่อซ่อนการใช้งานจากส่วนประกอบอื่นๆ และให้ข้อมูลที่จำเป็นแก่พวกเขาผ่านบริการเท่านั้น
สิ่งนี้จะป้องกันส่วนประกอบจากการเปลี่ยนแปลงข้อมูลโดยไม่ได้ตั้งใจที่พวกเขาไม่ควรมีการเข้าถึงและจัดการการขึ้นต่อกัน
การเชื่อมต่อระหว่างส่วนประกอบในแอปพลิเคชัน OSGi ทั้งหมดทำผ่านบริการในโลกอุดมคติ แพ็คเกจ Java มี API ที่ระบุสำหรับบริการ
การทำงานร่วมกันระหว่างผู้ให้บริการและลูกค้าจำเป็นต้องใช้คลาสและ/หรืออินเทอร์เฟซซึ่งประกอบเป็น API
ส่วนประกอบ OSGi ทั้งหมดถูกรวมเข้าด้วยกันเป็นบันเดิล ซึ่งแต่ละองค์ประกอบมีทรัพยากรที่ต้องใช้ในการทำงาน บันเดิลค่อนข้างชัดเจนเกี่ยวกับสิ่งที่พวกเขาต้องการจากสิ่งแวดล้อมและสิ่งที่พวกเขาสามารถทำได้
ประโยชน์
- แอปพลิเคชัน OSGi มีสิทธิ์เข้าถึงที่เก็บบันเดิลภายนอก
- เฟรมเวิร์กช่วยให้การออกแบบที่เน้นบริการในระดับโมดูล
- ทำให้สามารถจัดการเวอร์ชันและการขึ้นต่อกันของแอพพลิเคชั่นบันเดิล นอกเหนือจากการกำหนดมาตรฐานและทำให้การรวมไลบรารีของบุคคลที่สามทำได้ง่ายขึ้น
- แอปพลิเคชันสามารถปรับให้เข้ากับความต้องการที่เปลี่ยนแปลงได้มากขึ้น พกพาสะดวกยิ่งขึ้น และปรับรื้อปรับระบบใหม่ได้รวดเร็วยิ่งขึ้น
- A โปรแกรมประยุกต์บนเว็บ สามารถปรับใช้เป็นกลุ่มของบันเดิล OSGi เวอร์ชันที่มีอายุการใช้งานแบบไดนามิก ต้องขอบคุณการรวมเฟรมเวิร์กกับโมเดลการเขียนโปรแกรม Java EE
- แทนที่จะติดตั้งเป็นไลบรารีของบุคคลที่สามโดยเป็นส่วนหนึ่งของแอปพลิเคชัน เฟรมเวิร์กจะจัดเตรียมแอสเซมบลีที่ประกาศและการทดสอบหน่วยที่คล่องตัวของ Spring Framework ในรูปแบบมาตรฐานที่จัดเตรียมให้เป็นส่วนหนึ่งของรันไทม์ของเซิร์ฟเวอร์แอปพลิเคชัน
- สำหรับแอปพลิเคชันขององค์กรที่ประกอบด้วยบันเดิลเวอร์ชันต่างๆ ที่มีวงจรชีวิตแบบไดนามิก เฟรมเวิร์กนำเสนอการแยก
- ประกอบด้วยที่เก็บบันเดิลแบบรวมที่สามารถจัดเก็บบันเดิลที่ใช้ร่วมกันและบันเดิลที่แบ่งใช้ซึ่งใช้โดยแอพพลิเคชั่นหลายตัว ป้องกันไม่ให้แต่ละแอพพลิเคชั่นปรับใช้สำเนาของไลบรารีที่แบ่งใช้แยกกัน
เริ่มต้นใช้งานสปริง OSGi Felix
รับทรัพยากร
โดยการดาวน์โหลดเวอร์ชันล่าสุดของ Apache Karaf จาก เว็บไซต์นี้เราสามารถเริ่มต้นการผจญภัยของ OSGi ได้
บนพื้นฐานของ Apache Felix การนำ Apache ไปใช้ตามข้อกำหนด OSGi Apache Karaf จัดเตรียมแพลตฟอร์มสำหรับแอปพลิเคชันที่ใช้ OSGi
Karaf มีฟีเจอร์ที่เป็นประโยชน์มากมายที่ด้านบนของ Felix ที่จะช่วยเราในการทำความคุ้นเคยกับ OSGi เช่น อินเทอร์เฟซบรรทัดคำสั่งที่จะช่วยให้เราสามารถสื่อสารกับแพลตฟอร์มได้
จุดเริ่มต้นสำหรับการรวมกลุ่ม
แอปพลิเคชันต้องจัดแพ็กเกจเป็นบันเดิล OSGi ก่อนจึงจะสามารถรันในสภาพแวดล้อม OSGi ได้ นอกจากนี้ ต้องระบุจุดเข้าใช้งานของแอปพลิเคชัน ไม่ใช่ฟังก์ชัน main(String[] args ของ static static สาธารณะแบบมาตรฐาน
มาเริ่มกันด้วยการสร้าง “สวัสดีชาวโลก” แอปพลิเคชันที่ใช้ OSGi
เราเริ่มต้นด้วยการสร้างการพึ่งพา OSGi API พื้นฐาน:
รันไทม์ของ OSGi จะสามารถเข้าถึงการพึ่งพาได้ ดังนั้นบันเดิลจึงไม่จำเป็นต้องมีอยู่ ดังนั้นจึงมีการทำเครื่องหมายว่าให้มา
ตอนนี้ มาสร้างคลาส HelloWorld ที่ตรงไปตรงมากัน:
คลาสที่ทำหน้าที่เป็นจุดเริ่มต้นสำหรับบันเดิลต้องใช้อินเทอร์เฟซ BundleActivator ที่ OSGi จัดเตรียมให้
เมื่อบันเดิลที่มีคลาสนี้เปิดตัว แพลตฟอร์ม OSGi จะเรียกใช้ฟังก์ชัน start() ในอีกด้านหนึ่ง ไม่นานก่อนที่บันเดิลจะหยุด ฟังก์ชัน stop() จะถูกเรียก
อย่าลืมว่าแต่ละบันเดิลสามารถมี BundleActivator ได้เพียงอันเดียวเท่านั้น ทั้งสองวิธีสามารถสื่อสารกับรันไทม์ OSGi โดยใช้อ็อบเจ็กต์ BundleContext ที่ให้มา
การสร้างบันเดิล
ทำให้ pom.xml เป็นบันเดิล OSGi ที่แท้จริงโดยทำการเปลี่ยนแปลงที่จำเป็น
เราต้องแสดงให้ชัดเจนว่าเป้าหมายของเราคือการผลิตบันเดิล
จากนั้น เราใช้ maven-bundle-plugin เพื่อจัดแพ็คเกจคลาส HelloWorld เป็นบันเดิล OSGi โดยได้รับความอนุเคราะห์จากชุมชน Apache Felix:
ค่าของส่วนหัว OSGi ที่เราต้องการรวมไว้ในไฟล์ MANIFEST ของบันเดิลนั้นระบุไว้ในส่วนคำแนะนำ
Bundle-Activator เป็นชื่อที่ถูกต้องเหมาะสมของโซลูชัน BundleActivator ที่จะใช้ในการเริ่มต้นและหยุดบันเดิล มันเข้ากันได้กับคลาสที่เพิ่งสร้างขึ้น
แม้ว่าจะไม่ใช่ส่วนหัวของ OSGi แต่ส่วนหัว Private-Package จะแนะนำให้ปลั๊กอินเพิ่มแพ็คเกจไปยังบันเดิล แต่ไม่อนุญาตให้ปลั๊กอินอื่นๆ เข้าถึงได้ ควรใช้คำสั่ง mvn install เพื่อสร้างบันเดิล
การติดตั้งและใช้งาน Bundle
มาเริ่มกันที่ Karaf โดยรันคำสั่งนี้:
โดยที่ “KARAF HOME” หมายถึงโฟลเดอร์ที่มีการตั้งค่า Karaf เราสามารถใช้คำสั่งต่อไปนี้เพื่อติดตั้งบันเดิลเมื่อพรอมต์คอนโซล Karaf ปรากฏขึ้น:
การใช้ที่เก็บ Maven ในเครื่องเป็นวิธีที่บอกให้ Karaf โหลดบันเดิล
การส่งคืน ID ที่เป็นตัวเลขของบันเดิล Karaf จะเขียนมันออกมา ID นี้อาจแตกต่างกันไปขึ้นอยู่กับจำนวนบันเดิลที่เคยติดตั้งไว้ก่อนหน้านี้ ติดตั้งบันเดิลสำเร็จแล้ว และคำสั่งในการเปิดใช้มีดังนี้:
ทันทีที่คุณเปิดแพ็คเกจ “Hello World by Jay” จะปรากฏขึ้น ตอนนี้เราสามารถหยุดและนำบันเดิลออกได้โดยใช้:
คอนโซลแสดงข้อความ "Goodbye World by Jay"
สรุป
นักพัฒนาสามารถเพิ่มฟังก์ชันการทำงานใหม่ให้กับเว็บแอปพลิเคชันที่มีอยู่ได้อย่างง่ายดาย ในขณะที่รักษาความปลอดภัยและแยกออกจากส่วนประกอบอื่นๆ ของโปรแกรมหลักโดยใช้ OSGi
เราได้เรียนรู้เกี่ยวกับ OSGi ในโพสต์นี้ รวมถึงวิธีการทำงานของ OSGi ข้อดีของ OSGi และโปรแกรมที่ตรงไปตรงมา การรวม OSGi เข้ากับแอปพลิเคชันของคุณไม่ใช่เรื่องยาก
มีความสุขในการเข้ารหัส!
เขียนความเห็น