तो जैसा कि प्रश्न पर मेरी टिप्पणी में पोस्ट किया गया है, MySQL कनेक्टर से आधिकारिक उत्तर यह है कि आपको इसे बंद करने के लिए सेट किए गए सभी परिणामों को स्ट्रीम करना होगा (http://dev.mysql.com/doc/refman/5.5/en/connector-j- संदर्भ-कार्यान्वयन-नोट्स.html ) इसके अतिरिक्त, स्ट्रीमिंग परिणाम होने के दौरान आप कोई और क्वेरी नहीं कर सकते।
पूरी तरह से घृणित हैक के रूप में, मैंने नीचे जाने के लिए प्रतिबिंब का उपयोग किया RowDataDynamic (ver. 5.1.24) और नकली एक बाधित अपवाद, जैसे:
final Class<?> rdClass = rd.getClass();
final Field isInterruptedField = rdClass.getDeclaredField("isInterrupted");
isInterruptedField.setAccessible(true); // override 'protected' visibility
isInterruptedField.set(rd, true);
ध्यान दें, ResultSet पर जाने के लिए आपको जो भी ऑब्जेक्ट हैंडल करना है, उसे नीचे ले जाना होगा। मेरे लिए, मैं हाइबरनेट की स्क्रॉल करने योग्य परिणाम कक्षा का उपयोग कर रहा था। इसका मतलब था इससे परिणामसेट संदर्भ प्राप्त करना (इसकी सुपर क्लास, वास्तव में), फिर वहां से RowData।
यह शेष परिणामों को स्ट्रीम किए बिना क्लोज ऑपरेशन की अनुमति देगा फिर भी जब मैं लेन-देन को रोलबैक करने का प्रयास करता हूं (जिसे मैं अभी पकड़ता हूं और अनदेखा करता हूं) बेमेल पैकेट आकार के कारण मुझे अपवाद मिलता है। Atomikos को कनेक्शन पूल के रूप में उपयोग करते हुए, जैसे-जैसे चीज़ें साफ़ होंगी, मुझे अगले कुछ कनेक्शनों के बारे में चेतावनियाँ दिखाई देंगी, लेकिन सब कुछ अभी भी ठीक काम करता है।
स्पष्ट रूप से यह दृष्टिकोण सभी के लिए काम नहीं कर सकता है, लेकिन कम से कम यह एक समाधान है जब डेटाबेस क्वेरी के माध्यम से प्रसंस्करण करना या बैचों में परिणाम पुनर्प्राप्त करने के लिए अधिक जटिल तर्क लिखना काम नहीं करेगा।