इसे डीबग करने के लिए कुछ सुझाव
-
जैसा कि स्टीव ने टिप्पणियों में उल्लेख किया है। यह देखने का प्रयास करें कि जब आप वापस नहीं लौटाए गए कनेक्शन टाइमआउट विकल्प को हटाते हैं तो क्या होता है।
-
हो सकता है कि आपके प्रश्नों में बहुत अधिक समय लग रहा हो। अपने कोड पर कुछ प्रदर्शन आँकड़े लॉग करने का प्रयास करें और देखें कि आपकी क्वेरी में कितना समय लग रहा है। हो सकता है कि आपको अपनी क्वेरी को ट्यून करने की आवश्यकता हो। और अल्पावधि के लिए आप अपने प्रश्नों पर प्रतिक्रिया समय से अधिक होने के लिए unreturnedConnectionTimeout भी बढ़ा सकते हैं।
-
हाइबरनेट में लेनदेन टाइमआउट विकल्प भी आज़माएं। tx.setTimeout(20) सेट किया जा सकता है और टाइमआउट नंबरों के साथ खेलें और देखें कि क्या कुछ प्रश्न टाइमआउट हैं।
-
आप कुछ प्रोफाइलिंग टूल का भी उपयोग करना चाह सकते हैं। VisualVM आज़माएं यदि आपका जावा संस्करण इस पर समर्थित है। अन्यथा (यदि linux या mac पर) आप जावा डिबगिंग कमांड जावा के पुराने संस्करण पर। उनमें से कुछ आदेश JDK से भी उपलब्ध हैं।
कोड में छोटे सुधार
-
सुनिश्चित नहीं है कि यह वास्तव में आपकी समस्या को ठीक करेगा, हालांकि आप अपवाद ब्लॉक में लेनदेन के लिए रोलबैक जोड़ना चाह सकते हैं। एक और अपवाद से बचने के लिए tx.close के लिए एक और कोशिश पकड़ जोड़ा गया।
-
सत्र बंद करने के लिए एक शून्य जांच भी जोड़ा। आप पहले से ही जानते होंगे कि एक शर्त जब अंत में पूरी तरह से निष्पादित नहीं हो सकती है - यदि अंत में ब्लॉक में एक और अपवाद फेंक दिया जाता है। वर्तमान में यह आपके कोड में लागू नहीं हो सकता है, हालांकि यदि आप अंत में ब्लॉक में एक से अधिक लाइन जोड़ते हैं तो सुनिश्चित करें कि कोई भी अपवाद कवर किया गया है ताकि अगली पंक्ति निष्पादित हो सके।
-
एक और सुझाव है कि लेन-देन के दायरे को ही कम किया जाए। कोड को देखकर ऐसा लगता है कि यूआईडी नहीं मिलने की स्थिति में ही आपको लेन-देन की आवश्यकता हो सकती है। if(u==null) ब्लॉक के अंदर लेनदेन कोड को सीमित करने के बारे में कैसे। सुनिश्चित नहीं है कि मदद करता है लेकिन आपको पढ़ने के लिए लेनदेन की आवश्यकता नहीं है।
नीचे मेरा नमूना कोड है
public static Basicinfo getBean(Integer iduser) {
Basicinfo u = null;
Transaction tx = null;
Session sess = NewHibernateUtil.getSessionFactory().openSession();
try {
Query q = sess.createQuery("from Basicinfo where iduser=" + iduser);
u = (Basicinfo) q.uniqueResult();
if (u == null) {
tx = sess.beginTransaction(); //line 69
u = new Basicinfo();
u.setIduser(iduser);
tx.commit();
}
} catch (Exception ex) {
ex.printStackTrace();
if(tx != null) {
try {
tx.rollback();
} catch(Exception e){e.printStackTrace;}
}
} finally {
if(sess!=null) {
sess.close();
}
}
return u;
}