[ 
https://issues.apache.org/jira/browse/CAMEL-3698?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998207#comment-12998207
 ] 

Claus Ibsen commented on CAMEL-3698:
------------------------------------

Can you try using ?synchronous=true on the CXF endpoints to see if it makes a 
difference?

What version of Tomcat and JDK are you using?

> Failover loadbalancing between cxf endpoints results in 
> IllegalStateException: Already connected
> ------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-3698
>                 URL: https://issues.apache.org/jira/browse/CAMEL-3698
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core, camel-cxf
>    Affects Versions: 2.6.0
>            Reporter: Martijn van Ginkel
>
> I have configured a route with a failover loadbalancer using camel 2.6.0 and 
> cxf 2.3.2 as follows:
> {code:xml}
> <camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring"; 
> trace="true" autoStartup="true">
> <route>
>     <from uri="cxf:bean:entryEndpoint" />
>         <loadBalance>
>            <failover>
>               <exception>java.lang.Throwable</exception>
>            </failover>
>            <to uri="cxf:bean:targetEndpoint1" />
>            <to uri="cxf:bean:targetEndpoint2" />
>         </loadBalance>
> </route>
> </camelContext>{code}
> We have configured two soap services at a local Tomcat, targetEnpoint1 and 2. 
> If 'targetEndpoint1' is stopped (resulting in a 404), I expect the message to 
> fail over to 'targetEndpoint2'. When I switch of the service at 
> 'targetEndpoint1', executing the route results in a IllegalStateException:
> {code}
> 2011-02-21 16:45:24,430 [ERROR] Logger - Failed delivery for exchangeId: 
> ID-MartijnvG-HP-19759-1298303117555-0-2. Exhausted after delivery attempt: 1 
> caught: java.lang.IllegalStateException: IllegalStateException invoking 
> http://localhost:8080/echo2/echo: Already connected
> java.lang.IllegalStateException: IllegalStateException invoking 
> http://localhost:8080/echo2/echo: Already connected
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
>       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown 
> Source)
>       at java.lang.reflect.Constructor.newInstance(Unknown Source)
>       at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:2107)
>       at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2097)
>       at 
> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
>       at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:697)
>       at 
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
>       at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:454)
>       at 
> org.apache.camel.component.cxf.CxfProducer.process(CxfProducer.java:94)
>       at 
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at 
> org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:104)
>       at 
> org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:272)
>       at 
> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:98)
>       at 
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at 
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>       at 
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>       at 
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
>       at 
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at 
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>       at 
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>       at 
> org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:99)
>       at 
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at 
> org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:299)
>       at 
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:208)
>       at 
> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:269)
>       at 
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at 
> org.apache.camel.processor.loadbalancer.FailOverLoadBalancer.processExchange(FailOverLoadBalancer.java:226)
>       at 
> org.apache.camel.processor.loadbalancer.FailOverLoadBalancer.access$300(FailOverLoadBalancer.java:38)
>       at 
> org.apache.camel.processor.loadbalancer.FailOverLoadBalancer$FailOverAsyncCallback.done(FailOverLoadBalancer.java:286)
>       at 
> org.apache.camel.processor.DefaultChannel$1.done(DefaultChannel.java:275)
>       at 
> org.apache.camel.processor.RedeliveryErrorHandler.deliverToFailureProcessor(RedeliveryErrorHandler.java:639)
>       at 
> org.apache.camel.processor.RedeliveryErrorHandler.processAsyncErrorHandler(RedeliveryErrorHandler.java:368)
>       at 
> org.apache.camel.processor.RedeliveryErrorHandler$1.done(RedeliveryErrorHandler.java:317)
>       at 
> org.apache.camel.management.InstrumentationProcessor$1.done(InstrumentationProcessor.java:78)
>       at 
> org.apache.camel.component.cxf.CxfClientCallback.handleException(CxfClientCallback.java:85)
>       at 
> org.apache.cxf.interceptor.ClientOutFaultObserver.onMessage(ClientOutFaultObserver.java:59)
>       at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream$1.run(HTTPConduit.java:2203)
>       at 
> org.apache.cxf.workqueue.AutomaticWorkQueueImpl$2.run(AutomaticWorkQueueImpl.java:253)
>       at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown 
> Source)
>       at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>       at java.lang.Thread.run(Unknown Source)
> Caused by: java.lang.IllegalStateException: Already connected
>       at java.net.HttpURLConnection.setFixedLengthStreamingMode(Unknown 
> Source)
>       at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.thresholdNotReached(HTTPConduit.java:1937)
>       at 
> org.apache.cxf.io.AbstractThresholdOutputStream.close(AbstractThresholdOutputStream.java:99)
>       at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2029)
>       ... 38 more
> {code}
> The failover does not work. However when I change the loglevel of 
> _org.apache.camel.processor.interceptor.Tracer_ from WARN to INFO in my 
> log4j.properties, the failover does work as expected. In both cases tracing 
> is enabled.
> I believe this is a bug since the behaviour of the failover changes if the 
> log level is changed.
> We were able to reproduce this behaviour on multiple systems. If you have any 
> problems reproducing this behaviour we are happy to provide more information 
> or an example project.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to