CAMEL-6442 fix the IllegalStateException issue in camel-netty-http route
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ea3823a5 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ea3823a5 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ea3823a5 Branch: refs/heads/camel-2.10.x Commit: ea3823a58e4fef59dd0a66c5b5cbe40fd0754fe1 Parents: 78d10b6 Author: Willem Jiang <ningji...@apache.org> Authored: Sat Jun 8 22:33:01 2013 +0800 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Jun 14 11:30:49 2013 +0200 ---------------------------------------------------------------------- .../camel/component/netty/NettyProducer.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/ea3823a5/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java index f790bf3..a5cb5ad 100644 --- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java +++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java @@ -18,8 +18,10 @@ package org.apache.camel.component.netty; import java.net.InetSocketAddress; import java.util.Map; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.TimeUnit; import org.apache.camel.AsyncCallback; import org.apache.camel.CamelContext; @@ -381,7 +383,22 @@ public class NettyProducer extends DefaultAsyncProducer { if (LOG.isTraceEnabled()) { LOG.trace("Waiting for operation to complete {} for {} millis", channelFuture, configuration.getConnectTimeout()); } - channelFuture.awaitUninterruptibly(configuration.getConnectTimeout()); + // here we need to wait it in other thread + final CountDownLatch channelLatch = new CountDownLatch(1); + channelFuture.addListener(new ChannelFutureListener() { + @Override + public void operationComplete(ChannelFuture cf) throws Exception { + channelLatch.countDown(); + } + }); + + try { + channelLatch.await(configuration.getConnectTimeout(), TimeUnit.MILLISECONDS); + } catch (InterruptedException ex) { + throw new CamelException("Interrupted while waiting for " + "connection to " + + configuration.getAddress()); + } + if (!channelFuture.isDone() || !channelFuture.isSuccess()) { throw new CamelException("Cannot connect to " + configuration.getAddress(), channelFuture.getCause());