Ich arbeite an einer Webanwendung (läuft auf Tomcat), die Programme auf einem IBM i (AS/400) mit der JTOpen ProgramCall-Klasse aufruft (com.ibm.as400.access.ProgramCall). Mein Problem ist bei Programmaufrufen, die mehr als 30 Sekunden benötigen, um zu antworten, die eine java.net.SocketTimeoutException: Read timed out exception
auslösen.JTOpen ProgramCall Socket-Timeout
Für diese Klasse ist eine setTimeout()
-Methode verfügbar, die sich jedoch nicht auf das Socket-Timeout auswirkt. Ich habe auch meine Tomcat-Konfigurationen überprüft und nichts gesehen, was dieses Verhalten verursacht hätte.
Kennt jemand eine Möglichkeit, das Timeout für eine solche Implementierung zu ändern?
Code:
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());
}