Pär,

what you said makes me think that maybe the cause is that the system "blocks" when all connections are busy. Does it make any sense?


Michele

On 23 Jan 2008, at 10:19, Pär Malmqvist wrote:

Hi Michele!

I have seen the same the same thing with a simple client when an exception is thrown from the server.
I posted the issue here on the axis list ago.

I found that when using configurationContext.setProperty (HTTPConstants.REUSE_HTTP_CLIENT, Boolean.TRUE);
the client hangs. When FALSE it works fine.

Can you try to use use HTTPConstants.REUSE_HTTP_CLIENT = Boolean.FALSE and se what happens?
It would be interesting to know.

/Pär






> Subject: [axis2] ServiceClient.sendReceive blocks application forever
> From: [EMAIL PROTECTED]
> To: axis-user@ws.apache.org
> Date: Tue, 22 Jan 2008 17:14:12 +0000
>
> Hi all,
>
> after some calls to ServiceClient.sendReceive() my client app. blocks > forever. On the server side there are no error messages, the same on the
> client.
> By using jstack I've found out that my client blocks on sendReceive(),
> however the target operation is very fast
>
> Here is the output of jstack
>
> Full thread dump Java HotSpot(TM) Server VM (1.6.0_03-b05 mixed mode):
>
> "Attach Listener" daemon prio=10 tid=0x08790800 nid=0x32bf runnable
> [0x00000000..0x00000000]
> java.lang.Thread.State: RUNNABLE
>
> Locked ownable synchronizers:
> - None
>
> "Axis2 Task" daemon prio=10 tid=0x08762800 nid=0x3261 in Object.wait()
> [0x8240d000..0x8240e030]
> java.lang.Thread.State: WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> - waiting on <0x85b10070> (a
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager
> $ConnectionPool)
> at
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGet Connection(MultiThreadedHttpConnectionManager.java:509)
> - locked <0x85b10070> (a
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager
> $ConnectionPool)
> at
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getCo nnectionWithTimeout(MultiThreadedHttpConnectionManager.java:394)
> at
> org.apache.commons.httpclient.HttpMethodDirector.executeMethod (HttpMethodDirector.java:152)
> at
> org.apache.commons.httpclient.HttpClient.executeMethod (HttpClient.java:396)
> at
> org.apache.commons.httpclient.HttpClient.executeMethod (HttpClient.java:346)
> at
> org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod (AbstractHTTPSender.java:520)
> at
> org.apache.axis2.transport.http.HTTPSender.sendViaPost (HTTPSender.java:191)
> at
> org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:77)
> at
> org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessag eWithCommons(CommonsHTTPTransportSender.java:327)
> at
> org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke (CommonsHTTPTransportSender.java:206)
> at org.apache.axis2.engine.AxisEngine
> $TransportNonBlockingInvocationWorker.run(AxisEngine.java:516)
> at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor
> $Worker.runTask(ThreadPoolExecutor.java:665)
> at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor
> $Worker.run(ThreadPoolExecutor.java:690)
> at java.lang.Thread.run(Thread.java:619)
>
> Locked ownable synchronizers:
> - None
>
> "HttpListener-11000-1" prio=10 tid=0x08761c00 nid=0x3260 runnable
> [0x8245e000..0x8245efb0]
> java.lang.Thread.State: RUNNABLE
> at java.net.PlainSocketImpl.socketAccept(Native Method)
> at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
> - locked <0x85b10430> (a java.net.SocksSocketImpl)
> at java.net.ServerSocket.implAccept(ServerSocket.java:453)
> at java.net.ServerSocket.accept(ServerSocket.java:421)
> at
> org.apache.axis2.transport.http.server.DefaultConnectionListener.run (DefaultConnectionListener.java:79)
> at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor
> $Worker.runTask(ThreadPoolExecutor.java:665)
> at
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor
> $Worker.run(ThreadPoolExecutor.java:690)
> at java.lang.Thread.run(Thread.java:619)
>
> Locked ownable synchronizers:
> - None
>
> "MultiThreadedHttpConnectionManager cleanup" daemon prio=10
> tid=0x08758000 nid=0x325f in Object.wait() [0x824af000..0x824b0130]
> java.lang.Thread.State: TIMED_WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> - waiting on <0x85b10610> (a java.lang.ref.ReferenceQueue$Lock)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
> - locked <0x85b10610> (a java.lang.ref.ReferenceQueue$Lock)
> at
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager
> $ReferenceQueueThread.run(MultiThreadedHttpConnectionManager.java: 1082)
>
> Locked ownable synchronizers:
> - None
>
> "DestroyJavaVM" prio=10 tid=0x0805a800 nid=0x3251 waiting on condition
> [0x00000000..0xb7e3b080]
> java.lang.Thread.State: RUNNABLE
>
> Locked ownable synchronizers:
> - None
>
> "pool-1-thread-1" prio=10 tid=0x0863cc00 nid=0x325e in Object.wait()
> [0x82500000..0x825010b0]
> java.lang.Thread.State: WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> - waiting on <0x85b10070> (a
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager
> $ConnectionPool)
> at
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGet Connection(MultiThreadedHttpConnectionManager.java:509)
> - locked <0x85b10070> (a
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager
> $ConnectionPool)
> at
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getCo nnectionWithTimeout(MultiThreadedHttpConnectionManager.java:394)
> at
> org.apache.commons.httpclient.HttpMethodDirector.executeMethod (HttpMethodDirector.java:152)
> at
> org.apache.commons.httpclient.HttpClient.executeMethod (HttpClient.java:396)
> at
> org.apache.commons.httpclient.HttpClient.executeMethod (HttpClient.java:346)
> at
> org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod (AbstractHTTPSender.java:520)
> at
> org.apache.axis2.transport.http.HTTPSender.sendViaPost (HTTPSender.java:191)
> at
> org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:77)
> at
> org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessag eWithCommons(CommonsHTTPTransportSender.java:327)
> at
> org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke (CommonsHTTPTransportSender.java:206)
> at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:396)
> at
> org.apache.axis2.description.OutInAxisOperationClient.send (OutInAxisOperation.java:374)
> at
> org.apache.axis2.description.OutInAxisOperationClient.executeImpl (OutInAxisOperation.java:211)
> at
> org.apache.axis2.client.OperationClient.execute (OperationClient.java:163)
> at
> org.apache.axis2.client.ServiceClient.sendReceive (ServiceClient.java:528)
> at
> org.apache.axis2.client.ServiceClient.sendReceive (ServiceClient.java:508)
> at
> ncl.qosp.test.client.streams.delayed.Sender.sendAddStreamMsg (Sender.java:215)
> at
> ncl.qosp.test.client.streams.delayed.Sender.init(Sender.java:157)
> at
> ncl.qosp.test.client.streams.delayed.QueueController.addStream (QueueController.java:262)
> at
> ncl.qosp.test.client.streams.delayed.QueueController.execute (QueueController.java:151)
> at
> ncl.qosp.test.client.streams.delayed.QueueController.run (QueueController.java:182)
> at java.util.concurrent.ThreadPoolExecutor
> $Worker.runTask(ThreadPoolExecutor.java:885)
> at java.util.concurrent.ThreadPoolExecutor
> $Worker.run(ThreadPoolExecutor.java:907)
> at java.lang.Thread.run(Thread.java:619)
>
> Locked ownable synchronizers:
> - <0x85b215a0> (a java.util.concurrent.locks.ReentrantLock
> $NonfairSync)
>
> "Timer-1" daemon prio=10 tid=0x08566800 nid=0x325d in Object.wait()
> [0x8255b000..0x8255be30]
> java.lang.Thread.State: TIMED_WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> - waiting on <0x85b10950> (a java.util.TaskQueue)
> at java.util.TimerThread.mainLoop(Timer.java:509)
> - locked <0x85b10950> (a java.util.TaskQueue)
> at java.util.TimerThread.run(Timer.java:462)
>
> Locked ownable synchronizers:
> - None
>
> "Timer-0" daemon prio=10 tid=0x086bb000 nid=0x325c in Object.wait()
> [0x825ad000..0x825addb0]
> java.lang.Thread.State: TIMED_WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> - waiting on <0x85cb1348> (a java.util.TaskQueue)
> at java.util.TimerThread.mainLoop(Timer.java:509)
> - locked <0x85cb1348> (a java.util.TaskQueue)
> at java.util.TimerThread.run(Timer.java:462)
>
> Locked ownable synchronizers:
> - None
>
> "Low Memory Detector" daemon prio=10 tid=0x08115c00 nid=0x325a runnable
> [0x00000000..0x00000000]
> java.lang.Thread.State: RUNNABLE
>
> Locked ownable synchronizers:
> - None
>
> "CompilerThread1" daemon prio=10 tid=0x08114400 nid=0x3259 waiting on
> condition [0x00000000..0x8291d5c8]
> java.lang.Thread.State: RUNNABLE
>
> Locked ownable synchronizers:
> - None
>
> "CompilerThread0" daemon prio=10 tid=0x08112c00 nid=0x3258 waiting on
> condition [0x00000000..0x8299e548]
> java.lang.Thread.State: RUNNABLE
>
> Locked ownable synchronizers:
> - None
>
> "Signal Dispatcher" daemon prio=10 tid=0x08111800 nid=0x3257 runnable
> [0x00000000..0x829efe10]
> java.lang.Thread.State: RUNNABLE
>
> Locked ownable synchronizers:
> - None
>
> "Surrogate Locker Thread (CMS)" daemon prio=10 tid=0x08110800 nid=0x3256
> waiting on condition [0x00000000..0x82a4129c]
> java.lang.Thread.State: RUNNABLE
>
> Locked ownable synchronizers:
> - None
>
> "Finalizer" daemon prio=10 tid=0x080fcc00 nid=0x3255 in Object.wait()
> [0x82ad3000..0x82ad3e30]
> java.lang.Thread.State: WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> - waiting on <0x85cb1328> (a java.lang.ref.ReferenceQueue$Lock)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
> - locked <0x85cb1328> (a java.lang.ref.ReferenceQueue$Lock)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
> at java.lang.ref.Finalizer
> $FinalizerThread.run(Finalizer.java:159)
>
> Locked ownable synchronizers:
> - None
>
> "Reference Handler" daemon prio=10 tid=0x080fc400 nid=0x3254 in
> Object.wait() [0x82b24000..0x82b24db0]
> java.lang.Thread.State: WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> - waiting on <0x85cb13d8> (a java.lang.ref.Reference$Lock)
> at java.lang.Object.wait(Object.java:485)
> at java.lang.ref.Reference
> $ReferenceHandler.run(Reference.java:116)
> - locked <0x85cb13d8> (a java.lang.ref.Reference$Lock)
>
> Locked ownable synchronizers:
> - None
>
> "VM Thread" prio=10 tid=0x080f9800 nid=0x3253 runnable
>
> "Concurrent Mark-Sweep GC Thread" prio=10 tid=0x0806cc00 nid=0x3252
> runnable
> "VM Periodic Task Thread" prio=10 tid=0x08117400 nid=0x325b waiting on
> condition
>
> JNI global references: 771
>
>
>
> This is the sendAddStreamMsg
>
> /**
> * Sends the specified addStream message.
> *
> * @return The cookie.
> * @throws AxisFault If an error occurs or if the stream was not
> accepted.
> */
> private final long sendAddStreamMsg(OMElement payload) throws
> AxisFault {
> Options options = new Options();
> options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
> options.setCallTransportCleanup(true);
> options.setTo(StreamClient.getRouterEpr());
> options.setAction(TestConstants.ADD_STREAM_SOAP_ACTION);
>
> options.setSoapVersionURI (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
> options.setProperty(HTTPConstants.CHUNKED, Boolean.FALSE);
>
> this.sender.setOptions(options);
> OMElement result = sender.sendReceive(payload);    // line 215
>
> final long cookie = Long.valueOf(result.getText());
> if (log.isDebugEnabled()) {
> StringBuilder sb = new StringBuilder("Worker ");
> sb.append(getService());
> sb.append(", worker ");
> sb.append(this.id);
> sb.append(" received cookie ");
> sb.append(cookie);
> log.debug(sb.toString());
> }
> return cookie;
> }
>
>
> The sender field is a global variable (it's used to accomplish
> asynchronous operations as well) which is initialized inside the
> constructor with
>
> sender = new ServiceClient(getParams().configurationContext, null);
> synchronized (ENGAGE_MODULE_LOCK) {
> sender.engageModule(Constants.MODULE_ADDRESSING);
> }
>
> Finally, the custom configuration context is the following:
>
> configurationContext = ConfigurationContextFactory
> .createConfigurationContextFromFileSystem(axis2Home
> .concat("/repository"), "bin/ncl/qosp/test/client/axis2.xml");
>
>
> connectionManager = new MultiThreadedHttpConnectionManager();
> HttpConnectionManagerParams connectionManagerParams = new
> HttpConnectionManagerParams();
> // 10 seconds
> connectionManagerParams.setConnectionTimeout(10000);
> connectionManagerParams.setMaxConnectionsPerHost(
> HostConfiguration.ANY_HOST_CONFIGURATION, 5);
> connectionManagerParams.setDefaultMaxConnectionsPerHost(3);
> connectionManagerParams.setMaxTotalConnections(100);
> connectionManagerParams.setTcpNoDelay(true);
> connectionManagerParams.setStaleCheckingEnabled(true);
> connectionManagerParams.setLinger(-1);
>
> HttpClient httpClient = new HttpClient(connectionManager);
>
> try {
> configurationContext.setThreadPool(new ThreadPool(1, 5));
> } catch (AxisFault e) {
> System.err.println("Unable to set the thread pool");
> }
>
> configurationContext.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,
> Boolean.TRUE);
> configurationContext.setProperty(HTTPConstants.CACHED_HTTP_CLIENT,
> httpClient);
>
>
> I attach the axis2.xml.
>
>
>
> Does anybody know what's going on?
>
>
> Thanks in advance,
> Michele

Express yourself instantly with MSN Messenger! MSN Messenger


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to