Return-Path: Delivered-To: apmail-ws-axis-user-archive@www.apache.org Received: (qmail 75919 invoked from network); 23 Jan 2008 07:49:27 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 23 Jan 2008 07:49:27 -0000 Received: (qmail 41796 invoked by uid 500); 23 Jan 2008 07:49:09 -0000 Delivered-To: apmail-ws-axis-user-archive@ws.apache.org Received: (qmail 41781 invoked by uid 500); 23 Jan 2008 07:49:09 -0000 Mailing-List: contact axis-user-help@ws.apache.org; run by ezmlm Precedence: bulk Reply-To: axis-user@ws.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list axis-user@ws.apache.org Received: (qmail 41770 invoked by uid 99); 23 Jan 2008 07:49:09 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 22 Jan 2008 23:49:09 -0800 X-ASF-Spam-Status: No, hits=1.2 required=10.0 tests=SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (nike.apache.org: local policy) Received: from [209.68.5.17] (HELO relay03.pair.com) (209.68.5.17) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 23 Jan 2008 07:48:55 +0000 Received: (qmail 25772 invoked from network); 23 Jan 2008 07:48:46 -0000 Received: from unknown (HELO ?127.0.0.1?) (unknown) by unknown with SMTP; 23 Jan 2008 07:48:46 -0000 X-pair-Authenticated: 222.165.132.170 Message-ID: <4796F158.7090308@opensource.lk> Date: Wed, 23 Jan 2008 13:18:40 +0530 From: Deepal Jayasinghe User-Agent: Thunderbird 2.0.0.9 (Windows/20071031) MIME-Version: 1.0 To: axis-user@ws.apache.org Subject: Re: [axis2] ServiceClient.sendReceive blocks application forever References: <1201022052.13053.9.camel@eskdale.ncl.ac.uk> In-Reply-To: <1201022052.13053.9.camel@eskdale.ncl.ac.uk> X-Enigmail-Version: 0.95.5 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org Hi Michele , Could you please create a JIRA and attach a test case or something , then we will definitely fix that for next release which we are targeting on end of March. Thanks Deepal > 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.doGetConnection(MultiThreadedHttpConnectionManager.java:509) > - locked <0x85b10070> (a > org.apache.commons.httpclient.MultiThreadedHttpConnectionManager > $ConnectionPool) > at > org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(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.writeMessageWithCommons(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.doGetConnection(MultiThreadedHttpConnectionManager.java:509) > - locked <0x85b10070> (a > org.apache.commons.httpclient.MultiThreadedHttpConnectionManager > $ConnectionPool) > at > org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(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.writeMessageWithCommons(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 > > ------------------------------------------------------------------------ > > --------------------------------------------------------------------- > To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org > For additional commands, e-mail: axis-user-help@ws.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org For additional commands, e-mail: axis-user-help@ws.apache.org