سؤال

ونحن نستخدم الربيع 2.5.4 / السبات 3.2 / بنك الإسكان للتجارة تطبيق الخادم 6.1.0.17. لقد نشر التطبيق على مربع AIX. في اليوم التالي عندما جئت في، وأنا أحاول لتسجيل الدخول إلى التطبيق. أحصل على هذا الاستثناء على الصفحة:

وError 500: Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: could not execute query; nested exception is org.hibernate.exception.JDBCConnectionException: could not execute query

وراجعت System.Out السجلات ومعرفة مزيد من التفاصيل. (المستخدمة باستبين لأن التنسيق سجل كان الشد حقا حتى في تخطيط الصفحة)


ووسطر من التعليمات البرمجية لدينا الذي يسبب استثناء لدينا هو:

List loginList = getHibernateTemplate().find("from Login  
    where storeId =" + id + " and password ='" + password + "'");

ونحن الأسلاك الاتصال في applicationContext.xml الربيع. ونحن ندرك أن الاتصال على AS400 يسقط في بعض الأحيان (قد أعد تشغيل النظام بين عشية وضحاها - أنا لست متأكدا). ومع ذلك، فإننا ويفضل أن لا تريد فتح اتصال جديد عندما نكون الأسلاك كل شيء في applicationContext.

وتحدث هذه المشكلة بغض من استخدام مصدر البيانات / JNDI أو JDBC

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

وتقدير كبير،

وكريس

تحديث:

والفحص بعض المشاركات في منتديات ربيع المجتمع ولقد نفذت بلدي مصدر البيانات مع المشاعات-DBCP التي لديها بعض الخصائص مثل 'testWhileIdle "و" validationQuery. انا ذاهب الى ترك التطبيق على التوالي وتحقق ذلك مرة أخرى في AM. سيتم نشر تحديثا على النتائج.

تحديث # 2:

وعن طريق DBCP-المشاعات BasicDataSource يبدو لتصحيح هذه المشكلة، التي يبدو أن هناك مشكلة في الشبكة. وقد تجمع بنك الإسكان للتجارة وصلات، وإذا كان هناك مشكلة في شبكة على الجانب AS400، فإنه سيحاول استخدام الاتصال لديها، وهو ما لا نعرفه هو 'قديمة'. باستخدام validationQuery مع الفاصل الزمني هو وسيلة رخيصة (ولكن فعالة) لحل هذه المشكلة - ولكن قد يكون هناك طريقة أفضل على الجانب بنك الإسكان للتجارة، تحت التكوين. ولكن، كذلك قد لا تغيير ما لم ينكسر، لذلك حتى فشل ذلك، فإنه من المحتمل أن يكون لدينا حل للمضي قدما.

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

المحلول

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

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