حل الفاصوليا الخارجية (الطرف الثالث) في اللحام

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

  •  20-09-2019
  •  | 
  •  

سؤال

أعلم أنه لا يزال غير شائع للغاية ، حيث تم إصدار المواصفات قبل بضعة أشهر فقط.

لم "تثبيت" لحام حتى الآن ، أنا فقط أقرأ ، وبهذا السؤال ، أريد التأكد من فهم هذه النقطة المهمة الصحيحة:

هو حل الفاصوليا الموجودة في الجرار الطرف الثالث الذي حققته من خلال إعلانها <alternatives> في الخاص بك beans.xml?

إذا لم يكن كذلك ، كيفية استخدام الفول من مكتبات الطرف الثالث لا تملك beans.xml ?

إن وضع الجرة على classpath لن يعمل ما لم يكن هناك beans.xml فيهم META-INF, ، وهو ما لا يمكنك أن تصدقه بالنسبة لجرار الطرف الثالث. (نرى وظيفة غافن كينج حول هذا الموضوع)

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

المحلول

لماذا تفكر معقد جدا؟

ببساطة جعل المنتجات المنتجات لتلك الطرف الثالث.

لنفترض أن لديك مكتبة طرف ثالثة تتناول ملفات PDF تلقائيًا وترسلها لكل فاكسيميلي ، وترغب في استخدام شيء مثل

private @Inject PdfFaxService faxService;

في التعليمات البرمجية الخاصة بك ، يمكنك ببساطة تزويد هذه طريقة المنتج. يعمل PdffaxService عديمة الجنسية ، لذلك يمكننا أن نفترض بأمان أنه يمكننا القيام بذلك @ApplicationScoped:

public @Produces @ApplicationScoped PdfFaxService createFaxService() {
  return new PdfFaxService(initparameters);
}

مكان ما.

HTH.

نصائح أخرى

فهمي ل لبديل هو أنه بديل لبعض التنفيذ الآخر لواجهة يمكنك استخدامها في بيئة نشر مختلفة (مثل بيئة اختبار). و لبديل يُعلن الفول عن طريق التعليق عليه @Alternative.

لاستخدام بديل في سيناريو نشر معين ، يمكنك تحديده في <alternatives> عنصر واصف نشر CDI الخاص بك META-INF/beans.xml. هذا سوف تمكين @Alternative الفاصوليا التي تعطيل بشكل افتراضي.

عند تمكينه ، إذا وجدت الحاوية تبعية غامضة لنقطة حقن معينة ، فستنظر إلى البدائل التي يمكن حقنها ، وإذا كان هناك واحد بالضبط ، فالحصل على هذا البديل.

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

أكثر في 2.1.4. بدائل, 4.6. بدائل و 4.7. إصلاح تبعيات غير راضية وغامضة (ولكن أعتقد أن هذا ما تقرأه).

تحديث: للإجابة على سؤالك الإضافي.

إذا لم يكن الأمر كذلك ، كيفية استخدام الفاصوليا من مكتبات الطرف الثالث التي لا تحتوي على beans.xml

لا يمكن أن يحدث هذا ، يجب أن يكون لأرشيف الفول bean.xml (سواء كان فارغًا) كما هو مفصل في القسم 15.6. التغليف والنشر من الوثائق:

لا يحدد CDI أي أرشيف نشر خاص. يمكنك حزم الفاصوليا في الجرار أو EJB-Jars أو Wars-أي موقع نشر في ClassPath التطبيق. ومع ذلك ، الأرشيف يجبكن "أرشيف الفول". وهذا يعني أن كل أرشيف يحتوي على الفاصوليا يجب أن يتضمن ملفًا مسماة beans.xml في ال META-INF دليل classpath أو WEB-INF دليل جذر الويب (لأرشيف الحرب). قد يكون الملف فارغًا. الفاصوليا المنتشرة في الأرشيفات التي ليس لها ملف beans.xml لن يكون الملف متاحًا للاستخدام في التطبيق.

بعد ذلك ، لإصلاح التبعية غير الرضا والغموض ، راجع القسم 4.7 المذكور سابقًا.

تحديث 2: يبدو أن باستخدام BeforeBeanDiscovery.addAnnotatedType() من الممكن إضافة فصول أخرى يجب أخذها في الاعتبار أثناء اكتشاف الفول. ((BeforeBeanDiscovery هو حدث)

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