سؤال

لإعادة صياغة السؤال: هل يجب علي تجنب تقاسم مثيلات الطبقات التي تنفذ java.sql.Connection بين المواضيع المختلفة؟

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

المحلول

إذا كان برنامج تشغيل JDBC متوافق مع المواصفات، ثم نعم من الناحية الفنية، فإن الكائن آمن للخيط، ولكن يجب تجنب تقاسم الاتصالات بين المواضيع، نظرا لأن النشاط الموجود على الاتصال يعني أن موضوع واحد فقط سيكون قادرا على فعل أي شيء في وقت واحد وبعد

يجب عليك استخدام تجمع اتصال (مثل Apache Commons DBCP.) للتأكد من أن كل مؤشر ترابط يحصل على اتصال خاص به.

نصائح أخرى

java.sql.connection هو واجهة. لذلك، يعتمد كل ذلك على تنفيذ السائق، ولكن بشكل عام يجب تجنب تقاسم نفس الاتصال بين المواضيع المختلفة واستخدام تجمعات الاتصالات. كما ينصح أيضا بوجود عدد الاتصالات في حمام السباحة أعلى من عدد مؤشرات ترابط العمال.

هذا هو موضوع قديم، ولكن بالنسبة لأولئك الذين يبحثون عن إجابة بشأن Microsoft SQL Server، إليك الجواب:

SQLServerConnection ليست آمنة مؤلفة، ولكن يمكن معالجة البيانات المتعددة التي تم إنشاؤها من اتصال واحد في وقت واحد في المواضيع المتزامنة.

و

تنفذ SQLServerconnection اتصال JDBC ب SQL Server.

من كل ما سبق، يمكنك مشاركة البيانات ولكن لا توجد اتصالات، وفي حال كنت بحاجة إلى اتصال في كل مؤشر ترابط، يمكنك استخدام تجمع مؤشر ترابط.

اقرأ أكثر هنا

وحي JDBC ومتعددة المدة مستندات:

نظرا لأن جميع طرق Oracle JDBC API متزامنة، إذا حاول مؤشر ترابطان استخدام كائن الاتصال في وقت واحد، فسيتم إجباره على الانتظار حتى ينتهي الآخر من استخدامه.

لذلك قد يكون آمنا في حالة أوراكل ولكن الوصول المتزامن سيعاني من عنق الزجاجة.

كان لدينا ArrayOutofBoundSexception على ذاكرة التخزين المؤقت في بيان WebSphere BooledDatasource، وكان علينا تعطيل ذاكرة التخزين المؤقت هذه.

كان لدينا علاج يمنع نفسه.

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

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