Hi, We have a webclient application that connects through AIA to an AppServer on a cloud-server. There's a report that users can start, but when the user asks a big report, we get error 9407 on the client-side. I checked the appserver and in the logging I see that the appserver takes about 3 seconds to get all the data. The data is placed in a temp-table with 12 fields and about 15000 records. First I thought that the error could be caused by a time-out on the client-side, so I used -clientConnectTimeout parameter. At the end I set that parameter to 250000, but no luck. So now I'm thinking that it could be something with the number of records in the temp-table. Could that be the reason ? Is there a parameter to set some value ? Or could something else be the reason of the error. This is on OE11.3 - Tomcat 8 - Windows 2012R2 server. Kind regards Bart S.
How are you connecting to Tomcat? Are you still using Application Request Routing on IIS or connecting directly to port 8080? I recall there being a maximum message size setting on ARR.
(9407) means the connection was lost. I think -clientConnectTimeout refers only to the initial connection, not connections that are are already established, but I might be wrong on that. There should be no restriction on the number of rows returned. Instead, I suspect this is more related to the time taken to respond. I don't remember the timeout on the client. There might also be timeouts in Tomcat, which are possibly visible in a log file.
I am sorry if this is off topic, I am new to progress is there a listing of the different error codes and their meaning?
I find the simplest way is to pop the error code into the search bar on this site and you'll get the error meaning, any Knowledgebase articles and forum posts available straight away.
Did you try to look at the connection timeout parameter in the tomcat. If the request might have died there there should be some trace of logs in the tomcat server
Well it seems logic that TomCat gives me a timeout. Logging on the appserver, I see that it takes 3seconds to get the data. That looks fine for me because the user gets data from a table that hasn't got a index for it. But because it's a report that isn't often used, it seems allright for me to not create an index for that one report.
I looked in server.xml in the config directory of TomCat. I see the following :
<Connector port="8080" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>
So am I correct that the connectionTimeout is 20000, so 20 seconds ? Or is that the wrong place for looking at that parameter. I haven't got a lot of experience with Tomcat, but I don't see an error in the log files.
Is this the correct parameter (in server.xml) ?
Kind regards
Bart S.
The connectionTimeout attribute of a Connector only specifies the time between when the TCP connection is made by the client and when the HTTP message arrives. That would not affect a longer running operation in the AppServer.
If the request does not timeout in the tomcat server and it does not show any error trace in any of the tomcat logs, then we have to look at the appserver logs. Were there any errors in your appserver logs
Hi Irfan,
Thanks for helping me out with this.
There's no error in the AppServer Log, but there are errors in the AIA-log file.
The errors are:
[SC-001307] Error processing request: ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
[SC-001307] disconnected.
Unexpected error
ClientAbortException: java.net.SocketException: Software caused connection abort: socket write error
After that a lot of Apache and java errors.
The thing is, when I start the same report, but need to retrieve less data, the appserver call works just fine.
Kind regards
Bart S.
Bart,
The ClientAbortException is thrown by the internals of the Tomcat HTTP1.1 engine when it encounters an Java I/O exception writing the HTTP response to the client. That appears to be the case based on the SocketException you showed. So the TCP connection between your WebClient and the Tomcat Connector must be getting closed.
Not sure if this is the problem, but the Tomcat connector has an attribute "keepAliveTimeout" which is to detect idle TCP client connections and disconnect the TCP connection. You can try increasing this value (or set -1 to disable it completely) and see if it changes the behavior or not.
Mike J.
Hi Mike,
Thanks for the tip, but it didn't solve the problem.
I tried it and increased the 'keepAliveTimeout' in server.xml to 600000 (so 10 minutes), that didn't help.
Then I tried it with setting it to '-1', same thing.
So, normally, retrieving a temp-table with 15000 records and all normal fields (12 fields), couldn't be a problem concerning size of the temp-table ?
Kind regards
Bart S.
There should not be a problem with the size of the temp-table returned. But if you can reproduce a problem like this, please log it with Tech Support. You might want to consider contacting Tech Support anyway in order to resolve this.
How are you connecting to Tomcat? Are you still using Application Request Routing on IIS or connecting directly to port 8080? I recall there being a maximum message size setting on ARR.
Hi Stefan,
Indeed I (still?) use ARR on IIS and looked at the parameters and the response buffer settings are set on 4000Kb. I couldn't restart IIS because people are using the application at this moment. So I tested running the application on port 8080 (directly to TomCat) and no problems. So it seems logical that I need to increase that setting in IIS. I'll try it this evening and hopefully it's solved.
Many thanks for pointing me in the right direction and the others for replying. It was my fault that I didn't mention ARR.
Kind regards
Bart S.