JTOpen ProgramCall sınıfını (com.ibm.as400.access.ProgramCall) kullanarak IBM i (AS/400) programlarını çağıran bir web uygulamasında (Tomcat üzerinde çalışıyor) çalışıyorum. Sorunum, yanıtlamak için 30 saniyeden fazla süren program çağrılarıdır; bunlar bir java.net.SocketTimeoutException: Read timed out exception
'u tetikler.JTOpen ProgramCall Soket Zaman Aşımı
Bu sınıf için kullanılabilir bir setTimeout()
yöntemi var, ancak yuva zaman aşımı üzerinde bir etkisi yok gibi görünüyor. Ayrıca Tomcat yapılandırmalarımı kontrol ettim ve bu davranışa neden olacak hiçbir şey görmedim.
Böyle bir uygulama için zaman aşımını değiştirmenin bir yolu olduğunu bilen var mı?
Kodu:
pgmCall.setProgram(getCompleteName(), parmList);
initializeAS400TextParameters();
// Run the AS/400 program.
try {
Trace.setTraceDiagnosticOn(true);
Trace.setTraceInformationOn(true);
Trace.setTraceWarningOn(true);
Trace.setTraceErrorOn(true);
Trace.setTraceDatastreamOn(true);
if (pgmCall.run() != true) {
messageList = pgmCall.getMessageList();
for (int i = 0; i < messageList.length; i++) {
log.debug("Error Message " + i + " " + messageList[i]);
}
setCompletionMsg("Program call failed.");
log.debug("442 Program call failed.");
return false;
} else {
messageList = pgmCall.getMessageList();
for (int i = 0; i < messageList.length; i++) {
log.debug("Success Message " + i + " " + messageList[i]);
}
setCompletionMsg("Program called ok.");
log.debug("452 Program called ok.");
return true;
}
} catch (Exception e) {
// This is where the timeout exception is thrown
log.debug("Error Running Program: " + e.getMessage() + " " + e.getLocalizedMessage());
setCompletionMsg(e.getMessage());
}