أوجي فيليكس:هل يمكن مشاركة الفصل بين التطبيق المضيف والحزمة؟

StackOverflow https://stackoverflow.com/questions/1012897

سؤال

داخل طلبي المضيف ، حاولت تنفيذ خدمة pushservice بسيطة ، والتي يجب استخدامها لنقل مثيل للفصل المسمى مركبة إلى عالم OSGI ، من خلال توفير مجموعة والحصول على الطريقة.لتكون قادرًا على استخدام الخدمة التي قمت بتصديرها لكل من واجهة الخدمة وفئة السيارة إلى ملف JAR واستيراد هذا الملف داخل الحزمة ، والتي يجب أن تستخدم الخدمة.

في كل مرة حاولت استخدام فئة المركبات داخل تطبيق المضيف الخاص بي ، والذي يعرض إطار عمل Felix ، والحزمة ، حصلت على خطأ في الارتباط.بعد قراءة إدخال المدونة التالي (http://frankkiieviet.blogspot.com/2009/03/javalanglinkageerror-loader-constraint.html) فهمت سبب حدوث هذا الخطأ.لكن ليس لدي أي فكرة عن كيفية حل مشكلتي.

هل من الممكن مشاركة فصل بين التطبيق المضيف ومثال OSGI؟ربما يتعين علي استخدام الانعكاس بدلاً من استيراد ملف الجرة؟لقد ألقيت نظرة على تلك المكتبة (http://code.google.com/p/transloader/) ولست متأكدًا حقًا مما إذا كان هذا lib قادرًا على حل مشكلتي أم لا ...

ر،

ماركوس

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

المحلول

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

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

قبل تهيئة وقت تشغيل OSGi، قم بتعيين هذه الخاصية "org.osgi.framework.system.packages" لتضمين الحزم الخاصة بك (بدون أحرف البدل) مفصولة بفواصل منقوطة ";".قد تحتاج أيضًا إلى تضمين حزم osgi الأساسية، "org.osgi.framework" والخدمات الأساسية "org.osgi.packageadmin"، "org.osgi.startlevel"، "org.osgi.url".

لقد بحثت للتو في التحكم في الإصدار الخاص بي ووجدت مقتطفًا عندما كنت لا أزال أستخدم Felix (الإعداد هو نفسه تقريبًا بالنسبة لـ Equinox)

Map<String, String> configMap = new HashMap<String, String();

configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
    "your.package;other.package;org.osgi.framework");

// setup other properties

Bundle systemBundle = new Felix(configMap, null);
systemBundle.start();

// Now you can use classes from "your.package" with explicity 
// declaring them as imports in bundles
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top