Repository: camel
Updated Branches:
  refs/heads/camel-2.13.x 62af8b8a9 -> bfcc735be
  refs/heads/camel-2.14.x d24de74b1 -> 090b96dca


CAMEL-8030 Release the thread pool when shutting down the netty endpoint


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/090b96dc
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/090b96dc
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/090b96dc

Branch: refs/heads/camel-2.14.x
Commit: 090b96dcac3fa7519b2cb5a46523687c6ce37ad5
Parents: d24de74
Author: Willem Jiang <willem.ji...@gmail.com>
Authored: Tue Nov 11 16:12:21 2014 +0800
Committer: Willem Jiang <willem.ji...@gmail.com>
Committed: Tue Nov 11 16:33:50 2014 +0800

----------------------------------------------------------------------
 .../netty/NettyClientBossPoolBuilder.java       | 18 ++++++++++++++++++
 .../camel/component/netty/NettyProducer.java    | 10 ++++++++++
 .../netty/NettyServerBossPoolBuilder.java       | 20 +++++++++++++++++++-
 .../component/netty/NettyWorkerPoolBuilder.java | 20 +++++++++++++++++++-
 4 files changed, 66 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/090b96dc/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 a775165..cc9bfb0 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
@@ -16,11 +16,14 @@
  */
 package org.apache.camel.component.netty;
 
+import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 
 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
@@ -75,4 +78,19 @@ 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/090b96dc/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 5856050..5e19763 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
@@ -171,6 +171,16 @@ public class NettyProducer extends DefaultAsyncProducer {
             pool.close();
             pool = null;
         }
+        
+        if (channelFactory != null) {
+            channelFactory.shutdown();
+            channelFactory = null;
+        }
+        
+        if (datagramChannelFactory != null) {
+            datagramChannelFactory.shutdown();
+            datagramChannelFactory = null;
+        }
 
         super.doStop();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/090b96dc/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 1bb4ca3..3be5a64 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
@@ -16,10 +16,13 @@
  */
 package org.apache.camel.component.netty;
 
+import java.util.concurrent.Executor;
 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
@@ -62,6 +65,21 @@ public final class NettyServerBossPoolBuilder {
      * Creates a new boss pool.
      */
     BossPool build() {
-        return new NioServerBossPool(Executors.newCachedThreadPool(), 
bossCount, new CamelNettyThreadNameDeterminer(pattern, name));
+        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);
+        }
+         
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/090b96dc/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 6b615e1..5b6253a 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
@@ -16,10 +16,13 @@
  */
 package org.apache.camel.component.netty;
 
+import java.util.concurrent.Executor;
 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
@@ -64,9 +67,24 @@ public final class NettyWorkerPoolBuilder {
      */
     public WorkerPool build() {
         int count = workerCount > 0 ? workerCount : 
NettyHelper.DEFAULT_IO_THREADS;
-        workerPool = new NioWorkerPool(Executors.newCachedThreadPool(), count, 
new CamelNettyThreadNameDeterminer(pattern, name));
+        workerPool = new CamelNioWorkerPool(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

Reply via email to