Hi Babak, As we just create the UnstoppableTime instance inside of the NettyClientBossPoolBuilder and don’t want to other people to create the instance out side of NettyClientBossPoolBuilder, I don’t think we need to define the UnstoppableTime as the static member class.
-- 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 December 1, 2014 at 1:57:31 PM, Babak Vahdat (babak.vah...@swissonline.ch) wrote: > Hi Willem, > > Yeah that makes sense. > > I guess the newly introduced UnstoppableTimer should be better declared as > (private) *static* member class instead of nonstatic. This would avoid the > extraneous reference to its *every* enclosing instance (which is > NettyClientBossPoolBuilder). > > Babak > > > Am 01.12.14 05:57 schrieb "Willem Jiang" unter : > > >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/cam > >>el-netty/src/main/java/org/apache/camel/component/netty/NettyClientBossPo > >>olBuilder.java > >> ---------------------------------------------------------------------- > >> diff --git > >>a/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyClientBossPoolBuilder.java > >> > >>b/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyClientBossPoolBuilder.java > >> index cc9bfb0..62caf1e 100644 > >> --- > >>a/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyClientBossPoolBuilder.java > >> +++ > >>b/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyClientBossPoolBuilder.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/cam > >>el-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.jav > >>a > >> ---------------------------------------------------------------------- > >> diff --git > >>a/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyProducer.java > >> > >>b/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyProducer.java > >> index 491ee38..ac1ecef 100644 > >> --- > >>a/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyProducer.java > >> +++ > >>b/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyProducer.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/cam > >>el-netty/src/main/java/org/apache/camel/component/netty/NettyServerBossPo > >>olBuilder.java > >> ---------------------------------------------------------------------- > >> diff --git > >>a/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyServerBossPoolBuilder.java > >> > >>b/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyServerBossPoolBuilder.java > >> index 3be5a64..6404ae1 100644 > >> --- > >>a/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyServerBossPoolBuilder.java > >> +++ > >>b/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyServerBossPoolBuilder.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/cam > >>el-netty/src/main/java/org/apache/camel/component/netty/NettyWorkerPoolBu > >>ilder.java > >> ---------------------------------------------------------------------- > >> diff --git > >>a/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyWorkerPoolBuilder.java > >> > >>b/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyWorkerPoolBuilder.java > >> index 5b6253a..c60cc25 100644 > >> --- > >>a/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyWorkerPoolBuilder.java > >> +++ > >>b/components/camel-netty/src/main/java/org/apache/camel/component/netty/N > >>ettyWorkerPoolBuilder.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; > >> - } > >> - } > >> } > >> > >> > > > > >