Hello all,
i'm working on a load generator tool for simulating client access to a server
with a XML/HTTP based protocol.
this basicly means that we have "MANY" clients connections (5000 and more ) to
a J2EE server connected and exchanging a lot of XML documents at a ratio of
500 HTTP request per sec. So each client send a request at 10 seconds of more
(with more clients) the client code is based on MINA 2.0 prerelease of 28/12 .
The J2EE server has a overload protection system that basicly closes the
connection when a overload situation occures.
connections are closed with HTTP 503 error (service unavailable)
as part of "auto test recovery" , the client will wait a short time (few
seconds) and than try again.
No here starts the problem. When a HTTP error occurse , the connection is
closed by the client. next time ,>10 seconds later , a new connection is
requested from a connection factory class. this factory looks basicly like this
:
public IoSession getConnection(SessionInitializer handler) throws
ConnectException {
cf=connector.connect(host,port,handler) ;
cf.awaitUninterruptibly(40sec)
if (! cf.isconnected() ) {
cf.cancel()
throw new ConnectException("timeout connection");
}
return cf.getSession()
}
connector as setConnectTimeout() set to 30 seconds, my clientcode (the handler)
implements the IoHandler interface and log all IoEvents.
when i reconnect to the server, i get the sessionCreated(IoSession session) &
sessionOpened(IoSession session)
but the ConnectFuture cf doesn't return a valid isConnected() or IoSession.
it only times-out at 40 seconds and the ConnectException is thrown.
Validating the connections with ethereal shows that the connection is created
but never
used (because ConnectException cause the client to go to sleep for awhile and
than retry).
the connecting thread will block "forever" when i replace the
cf.awaitUninterruptibly() with cf.await() :-(
somehow, the connection is not notified to the connectFuture.
in my logfile i can see that connection was established in very short time (<
1sec)
luc