मैं एसएसएच गैनीमेड लाइब्रेरी उर्फ ट्रेलियड उर्फ ओरियन का उपयोग कर रहा हूं।जावा गैनीमेड ट्रेलड ओरियन एसएस सत्र टाइमआउट
मैं सत्र के सटीक व्यवहार को समझने की कोशिश कर रहा हूं क्योंकि मुझे लंबे समय तक एक एसएसएच कनेक्शन खोला जाना चाहिए (शायद हमेशा के लिए) और इसे बंद करने के लिए जब मेरा जेवीएम डाउन हो या ऐसा कुछ हो।
तो, मेरी समस्या यह है। मान लिया जाये कि मैं कुछ इस तरह करते हैं:
Connection conn = new Connection(this.hostName, this.port);
conn.addConnectionMonitor(new ConnectionMonitor()
{
@Override
public void connectionLost(Throwable reason)
{
System.out.println("Connection Lost " reason.getMessage());
}
});
conn.connect(null, 1000, 20000);
conn.authenticateWithPublicKey(this.user, keyfile, this.password);
Thread.sleep(30000); //sleep the Thread for 30 seconds
Session sess = conn.openSession();
sess.execCommand("ls");
conn.close();
और, उन 30 सेकंड जब धागा सो रहा है में, मैं एक नेटवर्क समस्या की नकल के लिए अपने नेटवर्क इंटरफेस डिस्कनेक्ट कर दें।
1) डिस्कनेक्ट घटना connectionMonitor द्वारा रोक नहीं है और कनेक्शन टूट संदेश मुद्रित नहीं है 2) जब
Session sess = conn.openSession();
निष्पादित किया जाता है, इस प्रक्रिया को ब्लॉक और कुछ नहीं होता जब तक मैं कनेक्ट नहीं नहीं है नेटवर्क इंटरफ़ेस फिर से। ऐसा इसलिए है क्योंकि, गैनीमेड कोड को देखते हुए, ऐसा लगता है कि डिस्कनेक्शन ईवेंट का पता नहीं चला है क्योंकि सत्र खोला गया है और जब तक यह सफल नहीं होता है तब तक सत्र लॉक होता है।
तो मेरे प्रश्न हैं: 1) क्या यह व्यवहार चाहता था या यह एक बग है? 2) क्या Connection.openSession() विधि के साथ-साथ कनेक्शन.कनेक्ट() विधि में टाइमआउट सेट करने का कोई तरीका है?
अग्रिम धन्यवाद।