ما هو مسار الفصل الافتراضي لـ EJBs؟
-
29-09-2020 - |
سؤال
من فضلك سامح معرفتي الضعيفة بـ 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 ي.تضمن لغة جافا أن المهيئ الثابت لفئة يتم استدعاؤه مرة واحدة فقط خلال تحميل فئة في الذاكرة.إنه من المهم أن نتذكر ذلك قد يتم تحميل برامج تحميل مختلفة نسخ مميزة من نفس الفئة.هذه النسخ من نفس الفئة هي تعتبر غير ذات صلة تماما من قبل جي في إم.التهيئة الافتراضية مفيدة للغاية في البيئات التي تعتمد فيها نقطة الدخول الدقيقة للتطبيق على بيئة وقت التشغيل.على سبيل المثال ، يمكن استخدام نفس التطبيق كتطبيق مستقل ، كتطبيق ، أو كخدمة تحت التحكم في خادم ويب.
يتم تعريف خوارزمية التهيئة الافتراضية الدقيقة على النحو التالي:
- وضع
log4j.defaultInitOverride
خاصية النظام إلى أي قيمة أخرى ثم "false" سوف تتسبب في Log4J لتخطي إجراء التهيئة الافتراضية (هذا الإجراء).- تعيين
resource
متغير السلسلة إلى قيمةlog4j.configuration
خاصية النظام. الطريقة المفضلة لتحديد ملف التهيئة الافتراضي هي من خلالlog4j.configuration
خاصية النظام. في حالة خاصية النظامlog4j.configuration
لم يتم تعريفه ، ثم قم بتعيين مورد متغير السلسلة على القيمة الافتراضية "log4j.properties".- محاولة تحويل
resource
متغير إلى عنوان URL.- إذا كان لا يمكن تحويل متغير المورد إلى عنوان URL ، على سبيل المثال بسبب أ
MalformedURLException
, ثم ابحث عن المورد من ClassPath عن طريق الاتصالorg.apache.log4j.helpers.Loader.getResource(resource, Logger.class)
الذي يُرجع عنوان URL.لاحظ أن السلسلة "log4j.properties" تشكل عنوان URL مشوه.يرىLoader.getResource(java.lang.String)
للحصول على قائمة المواقع التي تم البحث عنها.- إذا تعذر العثور على عنوان 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.
(مصدر: Developer.com)الشكل 4:توضيح رؤية الفصل لملف الأذن الذي يحتوي على وحدات ويب متعددة و EJBs ووحدات المكتبة المشتركة.يقوم تحميل فئة الأذن بتحميل الفئات في الجرار المعبأة كوحدات مكتبة ، وجميع الفئات التي يتم تحميلها بواسطة محمل فئة الأذن مرئية لـ EJBS.عادة ما تكون الفئات التي يتم تحميلها بواسطة محمل فئة EJB مرئية لوحدة الويب في معظم الحاويات لأن محمل فئة الحرب هو طفل من محمل فئة EJB.
نصائح أخرى
أعتقد أن LOG4J سينظر في أكثر من مكان واحد لملف Log4J.Properties.على أي حال، تذهب جميع ملفات التكوين في جرة EJB داخل الدليل Meta-INF.