سؤال

نعلم جميعًا أنه في طبقة الويب هناك احتمال بوجود نسخة واحدة فقط من Servlet معين والتي تخدم طلبات متعددة.يمكن أن يؤدي هذا إلى مشكلات الترابط في متغيرات المثيل.

سؤالي هو، هل من الآمن إدخال EJB باستخدام التعليق التوضيحي @EJB في servlet كمتغير مثيل؟

حدسي الأولي سيكون لا، على افتراض أن نفس مثيل وحدة جافا للأعمال سوف يخدم طلبات متعددة في نفس الوقت.يبدو أن هذا سيكون أيضًا غريزة عدد من المبرمجين الآخرين: لا تحقن في servlets

ومع ذلك فقد قفزت إلى الاستنتاج الخاطئ.من الواضح أن ما يتم إدخاله في servlet هو وكيل، تحت الغطاء، هل تخدم الحاوية بالفعل كل طلب بمثيل مختلف وتحافظ على سلامة الخيط؟وكما يقترح هذا المنتدى: قم بالحقن في servlets

ويبدو أن هناك الكثير من الآراء المتضاربة.ايهم صحيح؟؟؟

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

المحلول

مرجع الخاص بك "لا حقن لالسيرفلتس" تذكر شيئا عن لل EJBs أو الشرحejb. فهي تتحدث عن عدم ترابط الأشياء آمنة مثل PersistenceContext.

ولكل المواصفات EJB يمكنك الوصول لل EJBs من مجموعة متنوعة من العملاء البعيدين بما في ذلك السيرفلتس (EJB 3.0 مواصفات (JSR-220) - القسم 3.1). حقن المنظمة بتبني استخدامEJB الشرح هو طريقة للحصول على واجهة EJB عبر الاعتماد على الحقن (القسم 3.4.1) وهو بديل ليبحث حتى الأشياء المنظمة بتبني في مساحة الاسم JNDI. حتى لا يكون هناك شيء خاص حول الشرحEJB فيما يتعلق لل EJBs التي تم الحصول عليها.

وهكذا، استنادا إلى EJB 3.0 المواصفات، انها ممارسة عادية للحصول لل EJBs من السيرفلتس باستخدامEJB الشرح.

نصائح أخرى

وأنها آمنة للحقن وEJB في بريمج كمتغير سبيل المثال بريمج، طالما أن EJB عديم الجنسية. يجب أن NEVER حقن جليل فول في بريمج.

ويجب تنفيذ EJB بك عديمي الجنسية لأنه لا يحمل أي متغير المثال الذي في حد ذاته يحمل قيمة جليل (مثل استمرار السياق). إذا كنت بحاجة إلى استخدام سياق استمرار، ثم يجب عليك الحصول على مثيل لها في أساليب EJB. يمكنك القيام بذلك من خلال وجود PersistenceContextFactory كمتغير سبيل المثال EJB ثم تحصل مثيل مدير كيان من مصنع في طريقة للEJB.

ووPersistenceContextFactory هو الخيط آمنة، وبالتالي فإنه يمكن حقنها في متغير مثيل.

وطالما أنك تمتثل للقواعد المذكورة أعلاه، ينبغي أن يكون موضوع الآمن للحقن عديمي الجنسية فول في بريمج

إنها حقيبة مختلطة.

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

أعتقد أن ما يقوله التصميم المستنتج هو غير صحيح.لا يهم إذا كانت حبة الجلسة عديمة الحالة تستخدم سياقًا ثابتًا.لن يتمكن سوى متصل واحد فقط من الوصول إلى مثيل حبة واحدة في نفس الوقت، لذلك على الرغم من أن سياق الاستمرارية ليس آمنًا لسلسلة المحادثات، فإن EJB يحمي من الوصول المتعدد إليه.فكر في الأمر كما لو أن كل طريقة لفاصوليا الجلسة تحتوي على الكلمة الأساسية المتزامنة المطبقة عليها.

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

وأعتقد أن الجواب البسيط هو أن كنت لا يضمن أنه آمن.

والسبب في ذلك هو أنه لا يوجد شيء واضح في مواصفات المنظمة بتبني تقول اجهات EJB المنزل يجب أن تكون ذات ألوان. توضح المواصفات سلوك جزء جانب الملقم فقط. ما قد تجد أن الهياكل العظمية العميل والخيط فعلا آمن ولكن كنت بحاجة الى ان ننظر في كيفية تنفيذها من قبل مكتبة تستخدمه. أما الجزء الشرح توسيع فقط في تحديد مواقع الخدمة بحيث لا يشتري لك شيئا.

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