כבר יש לך את התוכנה שלך במקום, אבל אתה עדיין צריך שיטה יעילה יותר לאפשר למשתמשים הטכניים שלך להרחיב את הפלטפורמה.
למרות ש-OSGi ידועה לרוב מפתחי Java, שילובו במוצר שלך עשוי להיראות כמו משימה מרתיעה. חוסר הבהירות לגבי הפעולה המדויקת של OSGi מבלבל עוד יותר את הדרך קדימה.
בניגוד לכל מה שהם היו רוצים להתנסות בו, OSGi מרגיש יותר כמו לנסות להפליג בים הרחב למפתחי ג'אווה רבים.
מאמר זה יציג בפניכם את מערך האביב של 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 spring
קבלת המשאבים
על ידי הורדת הגרסה העדכנית ביותר של Apache Karaf מ אתר זה, נוכל להתחיל בהרפתקת ה-OSGi שלנו.
בהתבסס על Apache Felix, הטמעת Apache של מפרט OSGi, Apache Karaf מספקת פלטפורמה ליישומים מבוססי OSGi.
Karaf מספקת תכונות שימושיות שונות על גבי פליקס שיעזרו לנו להכיר את OSGi, כמו ממשק שורת פקודה שיאפשר לנו לתקשר עם הפלטפורמה.
נקודת כניסה לחבילות
יש לארוז יישום כחבילת OSGi לפני שניתן יהיה להפעיל אותו בסביבת OSGi. בנוסף, יש לציין את נקודת הכניסה לאפליקציה; היא לא הפונקציה הרגילה של ה-Static void main(String[] args).
אז בואו נתחיל ביצירת "שלום עולםיישום המבוסס על 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 ליצירת החבילה.
התקנה והרצה של החבילה
בואו נתחיל את Karaf על ידי הפעלת הפקודה הזו:
כאשר "KARAF HOME" מתייחס לתיקיה שבה הוקם Karaf. אנו יכולים להשתמש בפקודה הבאה כדי להתקין את החבילה כאשר מופיעה ההנחיה של מסוף Karaf:
השימוש במאגר המקומי של Maven הוא הדרך שבה אומרים לקארף לטעון את החבילה.
מחזיר את המזהה המספרי של הצרור, קראף כותב אותו. מזהה זה עשוי להשתנות בהתאם למספר החבילות שהותקנו בעבר. החבילה הותקנה כעת בהצלחה, והפקודה להפעיל אותה היא כדלקמן:
ברגע שאתה משיק את החבילה, "Hello World by Jay" מוצג. כעת נוכל לעצור ולהסיר את החבילה באמצעות:
הקונסולה מציגה את "Goodbye World by Jay".
סיכום
מפתחים יכולים בקלות להוסיף פונקציונליות חדשה לאפליקציית אינטרנט קיימת תוך שמירה על אבטחה ומבודדת ממרכיבים אחרים של התוכנית הראשית באמצעות OSGi.
למדנו על OSGi בפוסט הזה, כולל איך זה מתפקד, היתרונות שלו ותוכנית פשוטה. זה לא קשה לשלב OSGi באפליקציה שלך.
קידוד שמח!
השאירו תגובה