سؤال

ما الذي يجعل الوحدة/الخدمة/جزء من وظائف التطبيق مرشحًا جيدًا بشكل خاص لوحدة OSGi؟

أنا مهتم باستخدام OSGi في تطبيقاتي.نحن متجر جافا ونستخدم Spring على نطاق واسع جدًا، لذلك أميل إلى استخدامه وحدات الربيع الديناميكية لمنصات خدمة OSGi(tm)..أنا أبحث عن طريقة جيدة لدمج القليل من OSGi في التطبيق كتجربة.هل استخدم أي شخص هنا هذه التقنية أو تقنية OSGi المماثلة؟هل هناك أي مطبات؟

@ نيكولاس - شكرًا، لقد رأيت ذلك.إنه برنامج تعليمي جيد، لكنني أبحث عن المزيد من الأفكار حول كيفية إنشاء حزمة OSGi "الحقيقية" الأولى الخاصة بي، بدلاً من مثال Hello World.

@ ديفيد - شكرا على الرابط!من الناحية المثالية، باستخدام تطبيق جديد، سأصمم الأمر برمته ليكون ديناميكيًا.لكن ما أبحث عنه الآن هو تقديمه في جزء صغير من تطبيق موجود.بافتراض أنه يمكنني اختيار أي جزء من التطبيق، ما هي بعض العوامل التي يجب مراعاتها والتي من شأنها أن تجعل هذا الجزء أفضل أو أسوأ باعتباره خنزير غينيا OSGi؟

هل كانت مفيدة؟

المحلول

حسنًا، نظرًا لأنه لا يمكنك الحصول على جزء واحد من OSGi وجزء واحد غير OSGi، فستحتاج إلى إنشاء تطبيق OSGi بالكامل.في أبسط أشكاله، يمكنك إنشاء حزمة OSGi واحدة من التطبيق بأكمله.من الواضح أن هذه ليست أفضل الممارسات ولكن قد يكون من المفيد التعرف على كيفية نشر حزمة في حاوية OSGi (Equinox، Felix، Knoplerfish، إلخ).

للانتقال إلى المستوى التالي، ستحتاج إلى البدء في تقسيم تطبيقك إلى مكونات، ويجب أن تحتوي المكونات عادةً على مجموعة من المسؤوليات التي يمكن عزلها عن بقية تطبيقك من خلال مجموعة من الواجهات وتبعيات الفئات.يمكن أن يتراوح تحديد هذه العناصر يدويًا من البساطة إلى حد ما إلى تطبيق جيد التصميم ومتماسك للغاية ولكنه غير مترابط إلى كابوس لشفرة المصدر المتشابكة التي لست على دراية بها.

يمكن أن تأتي بعض المساعدة من أدوات مثل JDepend والتي يمكن أن تظهر لك اقتران حزم Java مع الحزم/الفئات الأخرى في نظامك.يجب أن يكون استخراج الحزمة ذات الاقتران منخفض التأثير أسهل في حزمة OSGi من الحزمة ذات الاقتران عالي التأثير.يمكن الحصول على المزيد من المعرفة المعمارية باستخدام أدوات احترافية مثل الهيكل 101.

على المستوى الفني البحت، والعمل يوميًا مع تطبيق يتكون من 160 حزمة OSGi واستخدام Spring DM يمكنني أن أؤكد أن الانتقال من Spring "العادي" إلى Spring DM خالٍ من الألم إلى حد كبير.مساحة الاسم الإضافية وحقيقة أنه يمكنك (ويجب عليك) عزل تكوين Spring الخاص بـ OSGi في ملفات منفصلة تجعل من الأسهل الحصول على سيناريوهات نشر OSGi وبدونها.

OSGi هو نموذج مكون عميق وواسع، أوصي بالوثائق:

  • مواصفات أو إس جي آي آر 4:احصل على ملفات PDF الخاصة بالمواصفات الأساسية والخلاصة، فهي أساسية وموثوقة وسهلة القراءة.اجعل اختصارًا لهم في متناول يدك في جميع الأوقات، وسوف تستشيرهم.
  • اقرأ عن أفضل ممارسات OSGi، فهناك مجموعة كبيرة من الأشياء التي يمكنك القيام بها يستطيع افعل ولكن مجموعة أصغر إلى حد ما من الأشياء يجب افعلها وهناك بعض الأشياء التي يجب عليك القيام بها لاتفعل ابدا (استيراد ديناميكي:* على سبيل المثال).

بعض الروابط:

نصائح أخرى

عندما تتعلم أدوات تقنية جديدة غنية ستساعدك على التعامل مع الأشياء دون أي مشاكل كبيرة.عند هذه النقطة المجتمع في ops4j.org يوفر مجموعة أدوات غنية تسمى "PAX" والتي تتضمن:

  • باكس عداء:يمكنك الركض والتبديل بين Felix وEquinox وKnopflerfish وConcierge بسهولة
  • باكس كونستروكت:قم ببناء وتنظيم وبناء مشاريع OSGi باستخدام المخضرم بسهولة
  • باكس بدون طيار:اختبر حزم OSGi الخاصة بك مع Junit بينما تكون مستقلاً عن إطار العمل (يستخدم PaxRunner)

ثم هناك العديد من تطبيقات خدمات OSGi الوافية:

  • تسجيل باكس (تسجيل)،
  • باكس ويب (خدمة http)،
  • باكس ويب موسع (دعم الحرب)
  • عملة باكس (إعدادات)،
  • باكس شل (تنفيذ الصدفة، جزء من إصدار osgi التالي)
  • وأكثر بكثير.

..وهناك مجتمع مفيد ومستقل، ولكن هذا أصبح إعلانًا الآن؛-)

تأتي هذه الإجابة بعد حوالي 3 سنوات من طرح السؤال، ولكن وصلة لقد وجدت للتو هو حقا جيد, ، خاصة بالنسبة للمبتدئين الذين يستخدمون maven.شرح خطوة بخطوة.

هل تطبيقك الحالي متجانس أم متدرج في عمليات/طبقات منفصلة؟

إذا كان متدرجًا، يمكنك تحويل الطبقة الوسطى/التطبيق للتشغيل في حاوية OSGi.

في تجربة فريقي، وجدنا أن محاولة القيام بأشياء الويب في OSGi أمر مؤلم.نقاط الألم الأخرى هي تسجيل السبات وجاكرتا كومنز.

أجد أن مواصفات OSGi سهلة القراءة وأوصيك بطباعة المخطط الانسيابي الذي يوضح خوارزمية تحميل الفصل.سأضمن لك أنه سيكون لديك لحظات تتساءل فيها، "لماذا أتلقى خطأ NoClassDefFoundError؟":سيخبرك المخطط الانسيابي بالسبب.

يحاول http://neilbartlett.name/blog/osgibook/.يحتوي الكتاب على أمثلة عملية مع أفضل ممارسات OSGi.

يحاول http://njbartlett.name/files/osgibook_preview_20091217.pdf

أو

http://www.manning.com/hall/

والثاني ليس كتابًا قرأته بنفسي ولكني سمعت عنه أشياء جيدة.

الأول كان مفيدًا جدًا بالنسبة لي.يأخذك عبر الهندسة المعمارية في البداية ثم يقوم بتدريبك على OSGi.

هناك بعض الأفكار التي يجب وضعها في الاعتبار إذا كنت تبدأ باستخدام OSGi.

كما ذكرنا في مكان آخر من هذا الموضوع، فإن معرفة تحميل الفصل الدراسي أمر مهم حقًا.في تجربتي الجميع عاجلا أو آجلا يواجه مشاكل معها.

شيء آخر مهم يجب تذكره هو:لا تحتفظ بالمراجع أبدًا!ألقِ نظرة على نمط السبورة البيضاء الذي تم بناء مفهوم خدمات OSGi عليه (انظر الرابط الموجود في إحدى الإجابات الأخرى).

من خلال تجربتي، لا يجب أن تحاول تحويل تطبيق أحادي إلى تطبيق يستند إلى OSGi.وهذا عادة ما يؤدي إلى فوضى سيئة ولا يمكن السيطرة عليها.البدء من جديد.

قم بتنزيل أحد تطبيقات OSGi المستقلة المتوفرة مجانًا.لقد وجدت Knopflerfish جيدًا ومستقرًا إلى حد ما (أستخدمه في العديد من المشاريع).كما يأتي مع الكثير من التعليمات البرمجية المصدر.يمكنك العثور عليها هنا: http://www.knopflerfish.org

يمكن العثور على برنامج تعليمي جيد آخر هنا. https://pro40.abac.com/deanhiller/cgi-bin/moin.cgi/OsgiTutorial

أجرى بيتر كرينز من تحالف OSGi مقابلة لطيفة: http://www.infoq.com/interviews/osgi-peter-kriens.يمكن العثور على صفحته الرئيسية ومدونته (التي تعد دائمًا قراءة جيدة) هنا: http://www.aqute.biz

أنا حقا أحب دروس أباتشي فيليكس.ومع ذلك، أعتقد بشكل عام أن الاستفادة من OSGi في تطبيقك ليس أحد قرارات "دعونا نستخدم إطار العمل هذا، لأنه مجرد ضجيج".إنها مسألة تصميم أكثر، ولكن كل ما يقدمه لك OSGi فيما يتعلق بالتصميم، يمكنك الحصول عليه باستخدام Vanilla Java أيضًا.

أما بالنسبة لوقت التشغيل، فلا يمكنك فقط إضافة تطبيق موجود وتمكينه من خلال OSGi.يجب أن يكون التصميم ديناميكيًا.يجعل Spring DM من السهل إخفاء ذلك عنك، ولكنه لا يزال موجودًا ويجب أن تكون على دراية به.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top