As a sanity check I've run the multi-threaded test on the trunk and 2.9.x due to diff CXF versions being used there, still things work OK.

Dumitru, I've been telling everyone CXF RS producer is broken :-), so need your help with reproducing the case. Are you having multiple threads running within a route builder itself ? Please provide more info

Sergey
On 25/07/12 14:44, Sergey Beryozkin wrote:
Dumitru,

I'm not seeing in
http://camel.465427.n5.nabble.com/file/n5716351/camel-config.xml
how the route is initiated, can you provide the source of the updated
org.apache.camel.example.cxf.CamelRoute ?

I've updated one of the tests which Willem created to get 500 threads
stressing the rs client code, can not reproduce the issue

Cheers, Sergey

On 24/07/12 02:45, Willem Jiang wrote:
On Tue, Jul 24, 2012 at 6:16 AM, Sergey
Beryozkin<sberyoz...@gmail.com>wrote:

Hi

On 23/07/12 17:38, dumi_p wrote:

Hi all,

I am using Camel 2.10.0 deployed on Tomcat 7 and I try to test
following
scenario:

1. Have a CXF rest service deployed
2. Have a proxy CXF rest service over the service above, deployed under
the
same Camel instance

It works fine, until I perform requests in parallel. Exception
stacktrace
is
attached.
http://camel.465427.n5.nabble.**com/file/n5716351/stacktrace.*
*txt<http://camel.465427.n5.nabble.com/file/n5716351/stacktrace.txt>
stacktrace.txt

I tried following things in class
org.apache.camel.component.**cxf.jaxrs.CxfRsProducer order to fix it:
1. Invoked JAXRSClientFactoryBean.**setThreadSafe(true), with no
success
2. Added synchronization point over line WebClient client =
cfb.createWebClient(), from invokeHttpClient method. It works, but
performance dropped on my localhost from 150 requests per second to 10
requests per second, so the fix is not acceptable.

I attach my camel-config.xml - please let me know if additional info is
needed. http://camel.465427.n5.nabble.**com/file/n5716351/camel-**
config.xml<http://camel.465427.n5.nabble.com/file/n5716351/camel-config.xml>

camel-config.xml

I am not sure if the problem lies in the configuration I performed
or in
the
cxf-rs component or in cxf itself.

Any idea is appreciated.

Well,I look at the code and see some JAXRSClientFactoryBean cache -
Willem can you comment on this please ? This looks suspicious.


I don't like the JAXRSClientFactoryBean cache either, it is used to
create the WebClient if we change the URI per request. Now I just want to
ask if there is a way to override the server address by setting the
context
per request in the WebClient.

If So , it could easy for use to resolve the issue.


The trace shows that the thread safety is compromised at the point of
creating web clients. I can work on a patch - though will take me a
bit of
time to get to it

Dumitru - any chance you can declare jaxrs:client or WebClient [1,2]
explicitly, with a thread safe flag set and reuse it in the routes
directly
? That should do it.

Thanks
Sergey

[1]
http://cxf.apache.org/docs/**jax-rs-client-api.html#JAX-**RSClientAPI-
**ConfiguringHTTPclientsinSpring<http://cxf.apache.org/docs/jax-rs-client-api.html#JAX-RSClientAPI-ConfiguringHTTPclientsinSpring>

[2]
http://cxf.apache.org/docs/**jax-rs-client-api.html#JAX-**RSClientAPI-
**ConfiguringproxiesinSpring<http://cxf.apache.org/docs/jax-rs-client-api.html#JAX-RSClientAPI-ConfiguringproxiesinSpring>

[2]


Best regards,
Dumitru



--
View this message in context: http://camel.465427.n5.nabble.**
com/CxfRsProducer-is-not-**thread-safe-tp5716351.html<http://camel.465427.n5.nabble.com/CxfRsProducer-is-not-thread-safe-tp5716351.html>

Sent from the Camel - Users mailing list archive at Nabble.com.





Reply via email to