سؤال

نحن حاليًا بصدد ترحيل تطبيقنا من بيئة الإنتاج الخاصة بنا إلى مركز بيانات جديد تمامًا.

  • بيئة الإنتاج الحالية :جافا 1.4، جافا EE 3، كان 5.1، JSF 2.1
  • بيئة مركز البيانات الجديدة:جافا 1.5، جافا EE 5، كان 6.1، JSF 2.1
تطبيقنا مبني على JSF 2.1 ويحتوي على الكود أدناه في إحدى استدعاءات AJAX:
request.getSession().getServletContext().getRequestDispatcher(
                    "/results.faces").include(request, response);
وهذا هو المكان الذي نواجه فيه مشاكل.

حالة 1:هيكل EAR حسب المواصفات القياسية
.EAR -> WAR -> WEB-INF -> lib -> *.jar (جميع الجرار الخاصة بالتطبيقات موجودة ضمن WEB-INF/lib).هذا لا يعمل ونحن نحرص على الحصول على استثناءات للفئة التي لم يتم العثور عليها بواسطة أداة تحميل الفصل.أيضًا، فشل استدعاء AJAX أعلاه (لم يتم إنشاء الإخراج)

الحالة 2:يحتوي EAR على كافة ملفات JAR الخاصة بالتطبيق على الجذر (يحتوي MANIFEST.MF على مسار الفئة المحدد يدويًا).
يعمل هذا الأسلوب بشكل مثالي ويتم تحميل جميع ملفات JAR دون أي مشاكل.علاوة على ذلك، فإن مكالمة AJAX تسير بشكل جيد أيضًا.

أي أفكار لماذا يمكن أن يحدث هذا.

- أشيش

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

المحلول

نعم، يرجع السبب في ذلك إلى أن خوادم تطبيقات Java EE تحتوي على تسلسل هرمي لأدوات تحميل الفئات التي تسير على النحو التالي:أولاً يتم استدعاء محمل فئة bootstrap؛التالي هو محمل فئة مستوى EAR، ثم محمل فئة مستوى WAR.لن تبحث أدوات تحميل الفئات ذات المستوى الأعلى أدناه عن الفئات التي تحتاجها.إذا لم يجدوا ما يحتاجون إليه، فسيتم طرح ClassNotFoundException.

لذلك لم تكن ملفات JAR الموجودة في WEB-INF/lib مرئية لمحمل فئة مستوى EAR.عندما تقوم بنقل ملفات JAR هذه للأعلى، فإنك تحل المشكلة.فهو يجعل كل تلك JARs مرئية لجميع WARs في أذنك أيضًا.

الشيء الوحيد الذي قد ترغب في التحقق منه هو مواصفات web.xml والملفات الأخرى.تغيرت مواصفات servlet وJSP في مكان ما على طول الطريق، لذا انتقلت ملفات JAR مثل JSTL وما شابه من الإصدار 1.0 إلى 1.1.قد ترغب في التحقق بعناية من ملف web.xml الخاص بك وجميع ملفات JAR للتأكد من مطابقتها للمواصفات التي يدعمها خادم تطبيق Java EE الخاص بك.

لسوء الحظ، فإن ترقية خادم التطبيق ليست سهلة مثل إدخال EAR أو WAR.

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