سؤال

أتصور أن هذا هو بسيط - ولكن أنا لا يمكن العثور على الحق في الجمع بين مصطلحات البحث للحصول على إجابة.إذا كان لدي وحدة متعددة التطبيق, كيف يمكنني الحصول على حبوب في وحدة متاحة إلى الفول في وحدة B.

المشروع الإعداد تبدو مثل هذا:

project.ear/module-a.jar/resources/beans.xml
project.ear/module-a.jar/java/foo/bar.class
project.ear/module-b.war/java/foo/barFactory.class

على beans.xml لا يمكن الوصول إليها من قبل أي classpath ، أو نظام الملفات.هل هناك طريقة لعمل هذا ؟ أو هل يجب أن أفعل كل شيء بشكل مختلف ؟

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

المحلول

أعتقد هناك حل أسهل من هذه 3 skaffman المذكورة أعلاه.

  1. وضعت في module-b.war/WEB-INF/web.xml هذه الخطوط:

    <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>

    classpath*:/resources/beans.xml

    </param-value>

    </context-param>

    وهذا يتيح تحميل كل /resources/beans.xml من أي قطعة من classpath (أيأي جرة على classpath) وهو ما يكفي بالنسبة لك.

  2. يجب تحميل module-a.jar كجزء من وحدة-ب.الحرب (module-a.jar تكمن في وحدة-ب.الحرب/WEB-INF/lib الموقع).

لدي مشابهة جدا تحبب في المشروع:business-logic.jar مع الفاصوليا' تكوين الواجهة.الحرب التي يستخدم الفول تكوين في السابق عبر ref="someBean".أنه يعمل.

نصائح أخرى

الخاص بك appserver المرجح باستخدام مختلف classloaders لكل وحدة في أذنك ، ومنع وحدة واحدة من رؤية موارد أخرى.هذا هو السلوك الافتراضي JavaEE classloaders.

تحتاج إما إلى

  • تكوين الخاص بك appserver استخدام "موحدة" classloader عبر الأذن كلها (والذي هو في غاية appserver محددة ، ولكنها كبيرة إذا كان يمكنك الحصول عليه العمل) ، أو
  • حزمة كل شيء في وحدة واحدة (مثلا ، الحرب يمكن أن تحتوي على كل شيء) ، أو
  • إعلان رسمي يعبر عن وحدة الحرب ، مما يسمح لها أن تعلن تبعياته على الفرد جرة الوحدات ، والتي ينبغي أن تسمح حرب لرؤية الموارد في جرة وحدة.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top