سؤال

من فضلك سامح معرفتي الضعيفة بـ Java EJBs، ولكن عندما يتم نشر EJB على خادم تطبيق كملف .jar، حيث تقوم أشياء مثل Hibernate وlog4j بالبحث أولاً عن ملفات التكوين الخاصة بها (hibernate.cfg.xml وlog4j.properties) في ملف .jar؟

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

المحلول

(...) عندما يتم نشر EJB على خادم تطبيق كملف .jar، أين تبحث أشياء مثل Hibernate وlog4j أولاً عن ملفات التكوين الخاصة بها (hibernate.cfg.xml وlog4j.properties) في ملف .jar؟

يعتمد هذا على تنفيذ الأداة ولا علاقة له بحقيقة أنك تستخدم EJBs.بالنسبة للإسبات، تكتب الوثائق:

3.7.ملف تكوين XML

هناك طريقة بديلة للتكوين هي تحديد تكوين كامل في ملف مسمى hibernate.cfg.xml.يمكن استخدام هذا الملف كبديل ل hibernate.properties ملف أو ، إذا كان كلاهما موجودًا ، لتجاوز الخصائص.

ملف تكوين XML هو بشكل افتراضي من المتوقع أن يكون في جذر الخاص بك CLASSPATH.

فيما يتعلق بـ Log4J، الإجراء موضح أدناه:

إجراء التهيئة الافتراضي

مكتبة log4j لا تجعل أي افتراضات حول بيئتها.في على وجه الخصوص ، لا يوجد log4j افتراضي الملاحق.تحت بعض محددة جيدا الظروف ومع ذلك ، فإن ثابت إنياليزر من Logger سوف الطبقة محاولة التكوين التلقائي لوج 4 ي.تضمن لغة جافا أن المهيئ الثابت لفئة يتم استدعاؤه مرة واحدة فقط خلال تحميل فئة في الذاكرة.إنه من المهم أن نتذكر ذلك قد يتم تحميل برامج تحميل مختلفة نسخ مميزة من نفس الفئة.هذه النسخ من نفس الفئة هي تعتبر غير ذات صلة تماما من قبل جي في إم.

التهيئة الافتراضية مفيدة للغاية في البيئات التي تعتمد فيها نقطة الدخول الدقيقة للتطبيق على بيئة وقت التشغيل.على سبيل المثال ، يمكن استخدام نفس التطبيق كتطبيق مستقل ، كتطبيق ، أو كخدمة تحت التحكم في خادم ويب.

يتم تعريف خوارزمية التهيئة الافتراضية الدقيقة على النحو التالي:

  1. وضع log4j.defaultInitOverride خاصية النظام إلى أي قيمة أخرى ثم "false" سوف تتسبب في Log4J لتخطي إجراء التهيئة الافتراضية (هذا الإجراء).
  2. تعيين resource متغير السلسلة إلى قيمة log4j.configuration خاصية النظام. الطريقة المفضلة لتحديد ملف التهيئة الافتراضي هي من خلال log4j.configuration خاصية النظام. في حالة خاصية النظام log4j.configuration لم يتم تعريفه ، ثم قم بتعيين مورد متغير السلسلة على القيمة الافتراضية "log4j.properties".
  3. محاولة تحويل resource متغير إلى عنوان URL.
  4. إذا كان لا يمكن تحويل متغير المورد إلى عنوان URL ، على سبيل المثال بسبب أ MalformedURLException, ثم ابحث عن المورد من ClassPath عن طريق الاتصال org.apache.log4j.helpers.Loader.getResource(resource, Logger.class) الذي يُرجع عنوان URL.لاحظ أن السلسلة "log4j.properties" تشكل عنوان URL مشوه.يرى Loader.getResource(java.lang.String)للحصول على قائمة المواقع التي تم البحث عنها.
  5. إذا تعذر العثور على عنوان URL، قم بإحباط التهيئة الافتراضية.خلاف ذلك ، تكوين log4j من عنوان URL.ال PropertyConfigurator سوف تستخدم ل تحليل عنوان URL لتكوين log4j ما لم ينتهي عنوان URL ب ".xml" التمديد ، وفي هذه الحالة DOMConfigurator سوف يستخدم.أنت يمكن اختياريا تحديد مخصص المكون.قيمة ال log4j.configuratorClass يتم أخذ خاصية النظام على أنها كاملة اسم الفئة المؤهلة للمخصص الخاص بك المكون.أداة التهيئة المخصصة أنت تحدد يجب تنفيذ Configurator واجهه المستخدم.

للتلخيص، إذا قمت بوضع كلا الملفين في جذر EJB-JAR، فيجب العثور عليهما.


بالنسبة لعنوان سؤالك أنصحك بقراءته تطبيقات التعبئة والتغليف EJB 3 الذي أقتبسه أدناه:

التبعيات بين وحدات Java EE

لسوء الحظ ، لا توفر أي مواصفات Java EE معيارًا للتحميل في الفصل ، ويقوم كل خادم تطبيق بتنفيذ لوادر الفئة بأي طريقة تبدو أفضل للبائع.ومع ذلك ، تحدد Java EE رؤية وتبادل الفئات بين الوحدات المختلفة ، ويمكننا تصوير التبعية بين الوحدات المختلفة كما هو موضح في الشكل 4.

كما هو موضح في الشكل 4 ، يقوم محمل فئة الأذن بتحميل جميع الجرار في دليل LIB الذي يتم مشاركته بين الوحدات النمطية المتعددة.عادةً ما يقوم تحميل فئة EJB واحد بتحميل جميع EJB المعبأة في جميع وحدات EJB-JAR.غالبًا ما يكون محمل فئة EJB هو طفل محمل فئة التطبيق ، ويقوم بتحميل جميع فئات EJB.نظرًا لأن EJB طفل لعملية تحميل فئة الأذن ، فإن جميع الفئات المحملة على مستوى الأذن ستكون مرئية لـ EJBS.

alt text
(مصدر: Developer.com)

الشكل 4:توضيح رؤية الفصل لملف الأذن الذي يحتوي على وحدات ويب متعددة و EJBs ووحدات المكتبة المشتركة.يقوم تحميل فئة الأذن بتحميل الفئات في الجرار المعبأة كوحدات مكتبة ، وجميع الفئات التي يتم تحميلها بواسطة محمل فئة الأذن مرئية لـ EJBS.عادة ما تكون الفئات التي يتم تحميلها بواسطة محمل فئة EJB مرئية لوحدة الويب في معظم الحاويات لأن محمل فئة الحرب هو طفل من محمل فئة EJB.

نصائح أخرى

أعتقد أن LOG4J سينظر في أكثر من مكان واحد لملف Log4J.Properties.على أي حال، تذهب جميع ملفات التكوين في جرة EJB داخل الدليل Meta-INF.

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