Hi All, I'm using Axis2 and Synapse together for some experiments. Axis2 ver 1.4 is used both as a client as well as to host a couple of web services. I use Synapse (ver 1.2) as a load balancer/request redirector to 2 or more Axis2 instances. Axis2 servers run with a modified axis2-kernel where I've done changes to AxisEngine and some of the transports. Synapse also uses this modified kernel. I generate requests which gets load balanced according to some algorithms I implement in Synapse. I change the arrival rates of the requests (at Synapse) for various experiments.
I encounter some problems when there's a higher arrival of requests at synapse (for lower arrival rates this seem to work fine). After some time into the experiments, some of the requests time out on the client side complaining there's no response from Synapse. When inspecting Synapse, I could see that the following exceptions were thrown, "[HttpClientWorker-4] ERROR ServerHandler IO error submiting response : Connection is closed org.apache.http.ConnectionClosedException: Connection is closed at org.apache.http.impl.nio.NHttpConnectionBase.assertNotClosed(NHttpConnectionBase.java:238) at org.apache.http.impl.nio.DefaultNHttpServerConnection.submitResponse(DefaultNHttpServerConnection.java:200) at org.apache.synapse.transport.nhttp.ServerHandler.commitResponse(ServerHandler.java:213) at org.apache.synapse.transport.nhttp.HttpCoreNIOSender.sendAsyncResponse(HttpCoreNIOSender.java:416) at org.apache.synapse.transport.nhttp.HttpCoreNIOSender.invoke(HttpCoreNIOSender.java:271) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:567) at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:143) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:219) at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:154) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:58) at org.apache.synapse.mediators.filters.OutMediator.mediate(OutMediator.java:60) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:58) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:125) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:176) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:344) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:139) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:274) at org.apache.synapse.transport.nhttp.ClientWorker.run(ClientWorker.java:200) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) at java.lang.Thread.run(Thread.java:713)" The number of requests synapse handles are logged and strangely that equals to more than the number of requests sent to Synapse. Investigating further on this I could see that Synapse had processed the same request more than once and sometimes, the result hasn't been sent to the client. I'm guessing that this may be due to retransmission of requests from the client due to not having any response from synapse. The Axis2 client is used an asynchronous client and since the timing of the requests is important, each request is created on a separate thread and use a newly created serviceClient object inside each thread of execution. After the non blocking call is done serviceClient.cleanup() and serviceClient.cleanupTransport() is called. I'm wondering whether the problems are connected with the version of the client I use (I've seen that 1.4 has some problems) and/or the way I'm using the client. Here's a part of the code how it's done, "ServiceClient serviceClient = new ServiceClient(); Options opts = new Options(); opts.setTo(EPR); opts.setAction(Action); opts.setTimeOutInMilliSeconds(5400000); serviceClient.setOptions(opts); serviceClient.sendReceiveNonBlocking(this.createPayload(parameter), callback); ... serviceClient.cleanup(); serviceClient.cleanupTransport();" Migrating the Axis2 client libraries to 1.5.1 resulted in exceptions being thrown and requests not reaching Synapse at all. I have a couple of questions on the above, 1) Could this be due to bugs with the 1.4 version of Axis2? 2) Are there any changes required/suggested in the way the client code works? 3) Could this be happening due to any problems with Synapse? (I posted this to the Axis2 mailing list assuming that it might be to do with the client), in which case please cross post this to the Synapse mailing list, thanks. Appreciate any help and suggestions you could give in solving this issue. Thanks, Vidura