سؤال

كنت أعاني من استثناءات عرضية في تطبيق XPages:

Genacodicetagpre

كلا الفصلين المذكورين متماثلان ، يتم استخدام فئة كوحدة للجلسة.لم أتمكن من البحث في جوجل عن أي شيء يغطي مشكلتي.الشرح المعتاد لذلك هو التغيير في عناصر التصميم ، وليس حالتي.

أصبح تطبيق XPage غير قابل للاستخدام (الصفحات التي تستخدم وحدة برامج الجلسة SomeClass) منذ تلك اللحظة ، حتى إعادة تشغيل مهمة http ، أو إعادة حفظ faces-config.xml.

في بعض الحالات يكون هذا مرتبطًا باستثناء آخر: Genacodicetagpre

ما وراء هذا السلوك؟

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

المحلول

شرح فيليب رياند ذلك عبر البريد الإلكتروني:

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

الآن ، كل تطبيق XPages له محمل فئة خاص به. ولكن يتم تجاهل أداة تحميل الفئة هذه في كل مرة يحدث فيها تغيير في التصميم للتطبيق ، من خلال Domino Designer على سبيل المثال. هذا مطلوب لأن التغيير في XPages يولد فئة Java جديدة يجب تحميلها بعد ذلك بدلاً من الفئة السابقة. عندما يحدث هذا ، يتم تجاهل محمل الفصل ويتم إنشاء محمل جديد. ثم يتم إعادة تحميل جميع الفئات المتعلقة بالتطبيقات ، حسب الحاجة ، على الرغم من أنها لم تتغير ، وهذا سلوك شائع تنفذه خوادم J2EE. ومع ذلك ، إذا كانت الشفرة الخاصة بك تقوم بتخزين كائن مؤقتًا في نطاق لا يتم تجاهله عند حدوث تغيير في التصميم ، فمن المحتمل أن يحدث هذا. على سبيل المثال ، لا يتم تجاهل applicationScope & sessionScope حاليًا عند حدوث تغيير في التصميم ، مما قد يؤدي إلى حدوث هذه المشكلة. كان هذا اختيارًا للتصميم حيث يؤدي تجاهل النطاقات أحيانًا إلى تجربة سيئة للمطور ، ولكن مع هذا العيب.

أخيرًا ، يعمل حفظ faces-config.xml كحل بديل. عندما يتم حفظ هذا الملف ، ثم يتم تجاهل الوحدة النمطية بأكملها من الذاكرة ، بما في ذلك النطاقات ، وهذا ما يفسر سبب عملها. يجب أن يؤدي إجراء تغيير على فئة Java المخصصة إلى إعادة تحميل الوحدة وإزالة المشكلة.

لذلك يبدو أن وضع الفاصوليا (حتى بشكل غير مباشر) في SessionScope أو applicationScope هو السبب.

نصائح أخرى

إذا تم تحميل ملف الفئة نفسه في برامج تحميل فئات مختلفة ، فإن فئتي Java الناتجتين ليستا من نفس الفئة ؛لن يُسمح لك بتمرير مثيلات أحدهما إلى وظائف تتوقع الأخرى.بشكل عام ، إذا كنت ترى هذا النوع من المشكلات ، فذلك لأن لديك العديد من برامج تحميل الفئات الفرعية التي يمكنها الوصول إلى ملف jar غير مرئي لمحمل الفصل الرئيسي المشترك.قد تحتاج إلى نقل البرطمان الذي يحتوي على "someclass" إلى دليل مكتبة عام بدلاً من (على سبيل المثال) دليل تطبيق ويب معين.

فقط اعرض تجربتي هنا.

كنت أشغل تطبيقي على بيئة CAT باستخدام عدة JVM عندما صادفت هذه المشكلة.نظرًا لأن نفس الإصدار كان يعمل بنجاح بالنسبة لي في بيئة ITG ، فقد أعدت تشغيل كل من JVMs على CAT وتم حل الخطأ.لست متأكدًا تمامًا من سبب ذلك.

تنظيف المشروع أيضًا يجعل هذا يعمل!

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