لديك بالفعل برنامجك ، لكنك لا تزال بحاجة إلى طريقة أكثر فاعلية لتمكين المستخدمين التقنيين لديك من توسيع النظام الأساسي.
على الرغم من أن OSGi معروفة لدى معظم مطوري Java ، إلا أن دمجها في منتجك قد يبدو مهمة شاقة. إن الافتقار إلى الوضوح حول الأعمال الدقيقة لـ OSGi يزيد من تعكير الطريق إلى الأمام.
على عكس أي شيء يرغبون في تجربته ، يبدو OSGi أشبه بمحاولة الإبحار في البحر الواسع للعديد من مطوري Java.
ستقدم لك هذه المقالة دروس OSGi Felix الربيعية التعليمية باستخدام برنامج مباشر وتصفح ومزاياها وتفاصيل أخرى مهمة.
إذن ما هو OSGi؟
أصبح إنشاء وحدات ومكونات وتوزيعها ممكنًا من خلال إطار عمل Java المعروف باسم OSGi (مبادرة بوابة الخدمة المفتوحة).
إنه يركز على تغليف الوظائف والاقتران السائب ، والذي يوفر العديد من المزايا للمطورين ، بما في ذلك الوظائف المعيارية التي يمكن نقلها بسهولة بين أكواد المصدر والاختبار الذي لا يحتاج إلى تبعيات لا تنتهي.
كيف يعمل OSGi؟
يتم تعريف نظام المكونات الديناميكي لـ Java من خلال مجموعة من المواصفات تسمى OSGi. تتيح هذه المواصفات نهجًا تطويرًا حيث يتم إنشاء التطبيق من عدد من الأجزاء ثم تجميعه في حزم.
يتم استخدام الخدمات المحلية والقائمة على الشبكة بواسطة هذه المكونات للتواصل. الهدف هو جعل الكود الأساسي للبرنامج مضغوطًا قدر الإمكان. اقتران عالي بين هذا الرمز والعديد من المكونات ممكن.
تسمى عناصر البناء القابلة لإعادة الاستخدام للتطبيق بالمكونات. فكر في ميزات مثل عربة التسوق لموقع التجارة الإلكترونية الخاص بك أو تطبيق كشوف المرتبات لنظام إدارة الموظفين لديك.
يمكن للمكونات استخدام OSGi لإخفاء عمليات التنفيذ الخاصة بها عن المكونات الأخرى وتوفير البيانات اللازمة لها فقط عبر الخدمات.
هذا يمنع المكونات من تغيير البيانات عن غير قصد لا ينبغي أن يكون لها حق الوصول إليها وتدير التبعيات.
يتم إجراء جميع الاتصالات بين المكونات في تطبيق OSGi من خلال الخدمات في عالم مثالي. تحتوي حزمة Java على 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. بالإضافة إلى ذلك ، يجب تحديد نقطة إدخال التطبيق ؛ إنها ليست الوظيفة الرئيسية (String [] args) العامة القياسية.
فلنبدأ بإنشاء "مرحبا يا عالم”على أساس OSGi.
نبدأ بإنشاء تبعية أساسية لـ OSGi API:
سيتمكن وقت تشغيل OSGi من الوصول إلى التبعية ، وبالتالي لا تحتاج الحزمة إلى احتوائها. لذلك ، تم تمييزه على أنه مزود.
لنقم الآن بإنشاء فئة HelloWorld المباشرة:
يجب أن تطبق الفئات التي تعمل كنقاط دخول للحزم واجهة BundleActivator المقدمة من OSGi.
عندما يتم تشغيل الحزمة التي تحتوي على هذه الفئة ، تستدعي منصة OSGi الوظيفة start (). على الجانب الآخر ، قبل فترة وجيزة من إيقاف الحزمة ، يتم استدعاء وظيفة الإيقاف ().
دعونا لا ننسى أن كل حزمة يمكن أن تحتوي على BundleActivator واحد فقط. يمكن لكلتا الطريقتين التواصل مع وقت تشغيل OSGi باستخدام كائن BundleContext المعطى.
إنشاء حزمة
اجعل ملف pom.xml حزمة OSGi حقيقية عن طريق إجراء التغييرات اللازمة.
يجب علينا أولاً أن نعبر بوضوح عن أن هدفنا هو إنتاج حزمة.
بعد ذلك ، نستخدم المكون الإضافي maven-bundle-plugin لتعبئة فئة HelloWorld كحزمة OSGi ، بإذن من مجتمع Apache Felix:
تم تحديد قيم رؤوس OSGi التي نرغب في تضمينها في ملف MANIFEST للحزمة في قسم التعليمات.
Bundle-Activator هو بالفعل الاسم المؤهل بشكل صحيح لحل BundleActivator الذي سيتم استخدامه لبدء وإيقاف الحزمة. إنه متوافق مع الفصل الذي تم إنشاؤه للتو.
على الرغم من أنه ليس رأس OSGi ، فإن رأس الحزمة الخاصة يوجه المكوّن الإضافي لإضافة الحزمة إلى الحزمة ولكن لا تجعلها قابلة للوصول إلى المكونات الإضافية الأخرى. يجب استخدام الأمر mvn install لإنشاء الحزمة.
تثبيت وتشغيل الحزمة
لنبدأ Karaf بتنفيذ هذا الأمر:
حيث يشير "KARAF HOME" إلى المجلد حيث تم إعداد Karaf. يمكننا استخدام الأمر التالي لتثبيت الحزمة عند ظهور موجه وحدة تحكم Karaf:
استخدام مستودع Maven المحلي هو كيفية إخبار Karaf بتحميل الحزمة.
إعادة المعرف الرقمي للحزمة ، يكتبه كاراف. قد يختلف هذا المعرف بناءً على عدد الحزم التي تم تثبيتها مسبقًا. تم الآن تثبيت الحزمة بنجاح ، ويكون أمر تشغيلها كالتالي:
في اللحظة التي تقوم فيها بتشغيل الحزمة ، يتم عرض "Hello World by Jay". يمكننا الآن إيقاف الحزمة وإزالتها باستخدام:
تعرض وحدة التحكم "Goodbye World by Jay."
وفي الختام
يمكن للمطورين إضافة وظائف جديدة بسهولة إلى تطبيق ويب موجود مع إبقائه آمنًا ومعزولًا عن المكونات الأخرى للبرنامج الرئيسي باستخدام OSGi.
لقد تعلمنا عن OSGi في هذا المنشور ، بما في ذلك كيفية عمله ومزاياه وبرنامج مباشر. ليس من الصعب دمج OSGi في التطبيق الخاص بك.
الترميز سعيدة!
اترك تعليق