You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by mcoogan <mi...@daon.com> on 2007/12/01 14:37:15 UTC

Re: Thread hangs when processing large response message using LocalTransport with dispatchDirect


Thanks Dan. I've logged a JIRA against this issue (CXF-1245)




dkulp wrote:
> 
> 
> Yea, that looks very bad.    Pipes should NEVER be used on a single 
> thread.   That will definitely cause a hang.   Can you log a JIRA?
> 
> It probably should use a CachedOutputStream and then grab the inputstream 
> in the dispatchDirect method.
> 
> Dan
> 
> 
> On Friday 30 November 2007, mcoogan wrote:
>> I am running a local transport configured with DISPATCH_DIRECT = true.
>> Small request/response messages process successfully but any request
>> that generates a response > 1KB seems to hang the JVM. The problem
>> appears to be in the PipedInput/OutputStreams. If the buffer (default
>> size 1024B) fills up it is never flushed and the thread appears to
>> hang in an eternal wait (PipedInputStream.awaitSpace())
>>
>> The PipedInput and PipedOutput Streams are on the same thread and
>> therefore the buffer is never cleared until after the stream is
>> closed.
>>
>> Has anyone else seen this problem or is it something I am missing in
>> the configuration.
>>
>> Here's a code snippet of how I send the local
>>
>>
>>         InputStream in = null;
>>     	MyMessageObserver mo = new MyMessageObserver();
>>
>> 	try {
>> 		EndpointInfo ei = new EndpointInfo(null,
>> "http://schemas.xmlsoap.org/soap/http");
>> 		ei.setAddress(address);
>>
>> 		LocalConduit conduit = (LocalConduit)localTransport.getConduit(ei);
>> 		conduit.setMessageObserver(mo);
>>
>> 		Message msg = new MessageImpl();
>> 		msg.put(LocalConduit.DIRECT_DISPATCH, true);
>>
>> 		in = new ByteArrayInputStream(messsageBytes);
>> 		msg.setContent(InputStream.class, in);
>>
>> 		conduit.close(msg);
>> 		return  mo.getResponseStream().toByteArray();
>>
>> 	}
>> 	finally {
>>
>> 		try {
>> 			if(in != null) {
>> 				in.close();
>> 			}
>> 		} catch (Exception e) {
>> 			logger.error("Error closing Stream: "+ e.getMessage());
>> 		}
>> 	}
>>
>>
>> Thanks in advance
> 
> 
> 
> -- 
> J. Daniel Kulp
> Principal Engineer
> IONA
> P: 781-902-8727    C: 508-380-7194
> daniel.kulp@iona.com
> http://www.dankulp.com/blog
> 
> 

-- 
View this message in context: http://www.nabble.com/Thread-hangs-when-processing-large-response-message-using-LocalTransport-with-dispatchDirect-tf4922460.html#a14105264
Sent from the cxf-user mailing list archive at Nabble.com.