سؤال

في فهمي لـ Servlet، سيتم إنشاء مثيل Servlet بواسطة الحاوية init() سيتم استدعاء الطريقة مرة واحدة، وسيعمل servlet كوحدة مفردة حتى يتم إيقاف تشغيل JVM.

لا أتوقع أن يتم إجراء تسلسل لـ servlet الخاص بي، حيث سيتم إنشاؤه جديدًا عندما يتعافى خادم التطبيق أو يبدأ تشغيله بشكل طبيعي.يجب ألا يحتوي servlet على أي أعضاء خاصين بالجلسة، لذلك ليس من المنطقي أن تتم كتابته على القرص وإعادة إنشاء مثيل له.فهل هناك فائدة عملية لذلك؟

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

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

المحلول

ومن الناحية الفنية، وأعتقد أن يسمح للحاوية بريمج ل"إيقاف فاعلية" الكائن بريمج إلى القرص، بطريقة مشابهة أن الفاصوليا جلسة EJB يمكن أن يكون. لذلك كنت الصحيح أن نطرح هذا السؤال إذا ستفشل التطبيق بسبب الحقول غير قابل للتسلسل.

في الواقع، لم اسمع ابدا من وعاء القيام بذلك، حتى انها في الحقيقة مجرد الأمتعة إرث من الأيام القديمة السيئة من J2EE في وقت مبكر. وأود أن لا تقلق بشأن ذلك.

نصائح أخرى

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

وجوجل ويبدو أن تشير إلى أن هذا حدث حتى أن الكتاب حاوية يمكن أن يكون هذا الخيار، إذا كانوا يريدون ذلك.

وأنت الصحيح أن بريمج ينبغي أن تعقد أي جلسة أعضاء محددة، في الواقع أعتقد أن كنت تريد دولة كما صغيرة في كل وقت ممكن. إذا قمت بتخزين كل شيء في أي جلسة أو ServletConfig، أعتقد أنك سوف تكون قادرة على البقاء على قيد الحياة التسلسل.

وفقط كما هي تسلسل الأشياء الدورة البقاء على قيد الحياة مخابئ لتلك servletcontainers إعطاء الخيار العنقودية، قد يكون هناك خيار للحاوية لنقل مثيل بريمج بالإضافة إلى عقدة كتلة أخرى ؟؟ أنا مجرد تخمين هنا

يتم استخدام Serializable باعتباره a واجهة العلامة لسمات الجلسة في البيئة الموزعة.

SRV.7.7.2 البيئات الموزعة (JSR-154)

ضمن تطبيق تم وضع علامة عليه كـ للتوزيع, ، يجب التعامل مع جميع الطلبات التي تشكل جزءًا من الجلسة بواسطة جهاز Java Virtual Machine ("JVM") في وقت واحد.يجب أن تكون الحاوية قادرة على التعامل مع جميع الكائنات الموضوعة في مثيلات من فئة HTTPSENESS باستخدام أساليب setAttribute أو putvalue بشكل مناسب.يتم فرض القيود التالية لتلبية هذه الشروط:

  • يجب أن تقبل الحاوية الكائنات التي تقوم بتنفيذ الواجهة القابلة للتسلسل.
  • سيتم التعامل مع ترحيل الجلسات بواسطة مرافق خاصة بالحاويات.

يجب أن يرمي حاوية servlet الموزعة مجموعة غير قانونية للكائنات التي لا يمكن للحاوية دعم الآلية اللازمة لترحيل الجلسة التي تخزينها.

يجب أن تدعم حاوية servlet الموزعة الآلية اللازمة ترحيل الكائنات التي تنفذ Serializable.

(...)

يمكن لمزود الحاويات ضمان قابلية التوسع وجودة ميزات الخدمة مثل التوازن بين التحميل والفشل بواسطة وجود القدرة على نقل كائن جلسة ، ومحتوياته ، من أي عقدة نشطة للنظام الموزع إلى عقدة مختلفة من النظام. إذا تم توزيع الحاويات استمرار الجلسات أو ترحيلها لتوفير جودة ميزات الخدمة ، لا تقتصر على استخدام آلية التسلسل JVM الأصلية لتسلسل HTTPSESTIONS وسماتها.لا يضمن المطورون أن الحاويات ستستدعي أساليب ReadObject و WriteObject على سمات الجلسة إذا قاموا بتطبيقها ، ولكن يتم ضمان الحفاظ على الإغلاق التسلسلي لسماتها.

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