Hi Babak, As the we share the timer across the camel producers, we cannot just simply call the releaseExternalResources method which stops the shared timer here.
So I did change on the NettyClientBossPoolBuilder to avoid stopping the timer by wrapping it -- Willem Jiang Red Hat, Inc. Web: http://www.redhat.com Blog: http://willemjiang.blogspot.com (English) http://jnn.iteye.com (Chinese) Twitter: willemjiang Weibo: 姜宁willem On November 30, 2014 at 7:06:57 PM, bvah...@apache.org (bvah...@apache.org) wrote: > Repository: camel > Updated Branches: > refs/heads/master 2f4010e03 -> 829458c70 > > > CAMEL-8094: Do not use org.jboss.netty.util.internal.ExecutorUtil as it > breaks > the camel-netty Karaf feature > > Project: http://git-wip-us.apache.org/repos/asf/camel/repo > Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/829458c7 > Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/829458c7 > Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/829458c7 > > Branch: refs/heads/master > Commit: 829458c700a8dcbaa0d710a7d77ff12636afa0a7 > Parents: 2f4010e > Author: Babak Vahdat > Authored: Sun Nov 30 12:06:09 2014 +0100 > Committer: Babak Vahdat > Committed: Sun Nov 30 12:06:09 2014 +0100 > > ---------------------------------------------------------------------- > .../netty/NettyClientBossPoolBuilder.java | 16 ----------- > .../camel/component/netty/NettyProducer.java | 14 +++++++--- > .../netty/NettyServerBossPoolBuilder.java | 18 +------------ > .../component/netty/NettyWorkerPoolBuilder.java | 28 +------------------- > 4 files changed, 13 insertions(+), 63 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/camel/blob/829458c7/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyClientBossPoolBuilder.java > > ---------------------------------------------------------------------- > diff --git > a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyClientBossPoolBuilder.java > > b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyClientBossPoolBuilder.java > > index cc9bfb0..62caf1e 100644 > --- > a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyClientBossPoolBuilder.java > > +++ > b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyClientBossPoolBuilder.java > > @@ -23,7 +23,6 @@ import org.jboss.netty.channel.socket.nio.BossPool; > import org.jboss.netty.channel.socket.nio.NioClientBossPool; > import org.jboss.netty.util.ThreadNameDeterminer; > import org.jboss.netty.util.Timer; > -import org.jboss.netty.util.internal.ExecutorUtil; > > /** > * A builder to create Netty {@link > org.jboss.netty.channel.socket.nio.BossPool} > which can be used for sharing boss pools > @@ -78,19 +77,4 @@ public final class NettyClientBossPoolBuilder { > BossPool build() { > return new NioClientBossPool(Executors.newCachedThreadPool(), bossCount, > timer, > new CamelNettyThreadNameDeterminer(pattern, name)); > } > - > - class CamelNioClientBossPool extends NioClientBossPool { > - private Executor executor; > - CamelNioClientBossPool(Executor bossExecutor, int bossCount, Timer timer, > ThreadNameDeterminer > determiner) { > - super(bossExecutor, bossCount, timer, determiner); > - executor = bossExecutor; > - } > - > - // Just make sure we shutdown the executor; > - public void shutdown() { > - super.shutdown(); > - ExecutorUtil.shutdownNow(executor); > - } > - > - } > } > > http://git-wip-us.apache.org/repos/asf/camel/blob/829458c7/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 491ee38..ac1ecef 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 > > @@ -52,6 +52,7 @@ import > org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory; > import org.jboss.netty.channel.socket.nio.NioDatagramChannelFactory; > import org.jboss.netty.channel.socket.nio.NioDatagramWorkerPool; > import org.jboss.netty.channel.socket.nio.WorkerPool; > +import org.jboss.netty.util.ExternalResourceReleasable; > import org.slf4j.Logger; > import org.slf4j.LoggerFactory; > > @@ -161,7 +162,12 @@ public class NettyProducer extends DefaultAsyncProducer { > bossPool = null; > } > if (workerPool != null) { > - workerPool.shutdown(); > + if (workerPool instanceof ExternalResourceReleasable) { > + // this will first invoke workerPool#shutdown() internally (e.g. > org.jboss.netty.channel.socket.nio.AbstractNioWorkerPool) > + ((ExternalResourceReleasable) workerPool).releaseExternalResources(); > + } else { > + workerPool.shutdown(); > + } > workerPool = null; > } > > @@ -174,12 +180,14 @@ public class NettyProducer extends DefaultAsyncProducer > { > } > > if (channelFactory != null) { > - channelFactory.shutdown(); > + // this will first invoke channelFactory#shutdown() internally (see it's > javadoc) > + channelFactory.releaseExternalResources(); > channelFactory = null; > } > > if (datagramChannelFactory != null) { > - datagramChannelFactory.shutdown(); > + // this will first invoke datagramChannelFactory#shutdown() internally (see > it's > javadoc) > + datagramChannelFactory.releaseExternalResources(); > datagramChannelFactory = null; > } > > > http://git-wip-us.apache.org/repos/asf/camel/blob/829458c7/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBossPoolBuilder.java > > ---------------------------------------------------------------------- > diff --git > a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBossPoolBuilder.java > > b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBossPoolBuilder.java > > index 3be5a64..6404ae1 100644 > --- > a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBossPoolBuilder.java > > +++ > b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBossPoolBuilder.java > > @@ -22,7 +22,6 @@ import java.util.concurrent.Executors; > import org.jboss.netty.channel.socket.nio.BossPool; > import org.jboss.netty.channel.socket.nio.NioServerBossPool; > import org.jboss.netty.util.ThreadNameDeterminer; > -import org.jboss.netty.util.internal.ExecutorUtil; > > /** > * A builder to create Netty {@link > org.jboss.netty.channel.socket.nio.BossPool} > which can be used for sharing boss pools > @@ -65,21 +64,6 @@ public final class NettyServerBossPoolBuilder { > * Creates a new boss pool. > */ > BossPool build() { > - return new CamelNioServerBossPool(Executors.newCachedThreadPool(), > bossCount, > new CamelNettyThreadNameDeterminer(pattern, name)); > - } > - > - class CamelNioServerBossPool extends NioServerBossPool { > - private Executor executor; > - CamelNioServerBossPool(Executor bossExecutor, int bossCount, > ThreadNameDeterminer > determiner) { > - super(bossExecutor, bossCount, determiner); > - executor = bossExecutor; > - } > - > - // Just make sure we shutdown the executor; > - public void shutdown() { > - super.shutdown(); > - ExecutorUtil.shutdownNow(executor); > - } > - > + return new NioServerBossPool(Executors.newCachedThreadPool(), bossCount, > new > CamelNettyThreadNameDeterminer(pattern, name)); > } > } > > http://git-wip-us.apache.org/repos/asf/camel/blob/829458c7/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyWorkerPoolBuilder.java > > ---------------------------------------------------------------------- > diff --git > a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyWorkerPoolBuilder.java > > b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyWorkerPoolBuilder.java > > index 5b6253a..c60cc25 100644 > --- > a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyWorkerPoolBuilder.java > > +++ > b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyWorkerPoolBuilder.java > > @@ -22,7 +22,6 @@ import java.util.concurrent.Executors; > import org.jboss.netty.channel.socket.nio.NioWorkerPool; > import org.jboss.netty.channel.socket.nio.WorkerPool; > import org.jboss.netty.util.ThreadNameDeterminer; > -import org.jboss.netty.util.internal.ExecutorUtil; > > /** > * A builder to create Netty {@link WorkerPool} which can be used for sharing > worker pools > @@ -67,32 +66,7 @@ public final class NettyWorkerPoolBuilder { > */ > public WorkerPool build() { > int count = workerCount > 0 ? workerCount : NettyHelper.DEFAULT_IO_THREADS; > - workerPool = new CamelNioWorkerPool(Executors.newCachedThreadPool(), count, > > new CamelNettyThreadNameDeterminer(pattern, name)); > + workerPool = new NioWorkerPool(Executors.newCachedThreadPool(), count, new > CamelNettyThreadNameDeterminer(pattern, > name)); > return workerPool; > } > - > - class CamelNioWorkerPool extends NioWorkerPool { > - private Executor executor; > - CamelNioWorkerPool(Executor workerExecutor, int count, ThreadNameDeterminer > > determiner) { > - super(workerExecutor, count, determiner); > - executor = workerExecutor; > - } > - > - // Just make sure we shutdown the executor; > - public void shutdown() { > - super.shutdown(); > - ExecutorUtil.shutdownNow(executor); > - } > - > - } > - > - /** > - * Shutdown the created worker pool > - */ > - public void destroy() { > - if (workerPool != null) { > - workerPool.shutdown(); > - workerPool = null; > - } > - } > } > >