Hi Dan
On 31/07/13 23:42, Daniel Kulp wrote:

On Jul 30, 2013, at 12:07 PM, Sergey Beryozkin <[email protected]> wrote:

Hi Dan, others

Do you remember why LocalConduit uses a piped-style communication by default ? 
The problem with that it causes calls with empty payloads hang (plenty of cases 
with RS but also possible with SOAP GET for ex), unless users go and enable a 
direct dispatch style.

If I remember correctly, the main reason is that using the Pipe enables ALL the 
interceptors and such to work exactly like they would if you used HTTP.  Thus, 
you get a more accurate and similar path if you are trying to do a more 
complete test.   With DIRECT_DISPATCH, a ton of things would be bypassed and 
thus stream based interceptors and such that you may expect to trigger wouldn't.
OK, that is useful to know, why is Pipe support there

I'd rather go and enable the direct dispatch style by default, will make things 
a bit simpler for users (no need to know about LocalConduit.DIRECT_DISPATCH 
unless really needed, and if they will need a piped style then they'd disable 
it by setting LocalConduit.DIRECT_DISPATCH to false)

I'm OK flipping it, but I'd also want to try and actually fix the problem.    
Can you create a small test case and @Ignore it and point me at it?   Then I 
can try and update the Local transport to actually work properly for that case.

As I mentioned on IRC, I made a GET test work in Pipe mode, for that to work I needed to update the client runtime to add writer interceptors even for cases when no output body is available and additionally write an empty string into the OS.

I'm not really sure I'd like to do it only for a LocalConduit to work in a Pipe mode :-). May be a neater fix can be found. Have a look please when you have a chance, see JAXRSLocalTransportTest#testProxyDirectDispatchGet and comment out the line where a direct dispatch property is set.

Enabling Direct Dispatch by default is not of high priority per se, but what appeals to me there is that the same code which works in the production can be parameterized on the address and reused with the local scheme, which is quite cool - though of course it works for WS even with Pipe.

Though I can imagine that at Spring/Blueprint level there could be multiple jaxrs clients, some bound to HTTP, some to Local, etc - that can be done too if Pipe by default is important for Local.

Thanks, Sergey



Reply via email to