CAMEL-9330 : Main - enableHangupSupport should be default enabled

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

Branch: refs/heads/master
Commit: d3d75d287b8c185a7beaac84297bdfc8302a4302
Parents: f56df5e
Author: lburgazzoli <lburgazz...@gmail.com>
Authored: Thu Jan 14 18:48:35 2016 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Fri Jan 15 13:27:34 2016 +0100

----------------------------------------------------------------------
 .../java/org/apache/camel/main/MainSupport.java | 23 +++++++++++++-------
 1 file changed, 15 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/d3d75d28/camel-core/src/main/java/org/apache/camel/main/MainSupport.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/main/MainSupport.java 
b/camel-core/src/main/java/org/apache/camel/main/MainSupport.java
index 2112444..6ad6830 100644
--- a/camel-core/src/main/java/org/apache/camel/main/MainSupport.java
+++ b/camel-core/src/main/java/org/apache/camel/main/MainSupport.java
@@ -50,7 +50,6 @@ public abstract class MainSupport extends ServiceSupport {
     protected final List<Option> options = new ArrayList<Option>();
     protected final CountDownLatch latch = new CountDownLatch(1);
     protected final AtomicBoolean completed = new AtomicBoolean(false);
-    protected final HangupInterceptor hangupInterceptor = new 
HangupInterceptor();
     protected long duration = -1;
     protected TimeUnit timeUnit = TimeUnit.MILLISECONDS;
     protected boolean trace;
@@ -58,18 +57,24 @@ public abstract class MainSupport extends ServiceSupport {
     protected String routeBuilderClasses;
     protected final List<CamelContext> camelContexts = new 
ArrayList<CamelContext>();
     protected ProducerTemplate camelTemplate;
+    protected boolean hangupInterceptorEnabled = true;
 
     /**
      * A class for intercepting the hang up signal and do a graceful shutdown 
of the Camel.
      */
     private final class HangupInterceptor extends Thread {
         Logger log = LoggerFactory.getLogger(this.getClass());
+        final MainSupport mainInstance;
+
+        public HangupInterceptor(MainSupport main) {
+            mainInstance = main;
+        }
 
         @Override
         public void run() {
             log.info("Received hang up - stopping the main instance.");
             try {
-                MainSupport.this.stop();
+                mainInstance.stop();
             } catch (Exception ex) {
                 log.warn("Error during stopping the main instance.", ex);
             }
@@ -108,8 +113,6 @@ public abstract class MainSupport extends ServiceSupport {
                 enableTrace();
             }
         });
-
-        Runtime.getRuntime().addShutdownHook(hangupInterceptor);
     }
 
     /**
@@ -117,6 +120,7 @@ public abstract class MainSupport extends ServiceSupport {
      */
     public void run() throws Exception {
         if (!completed.get()) {
+            internalBeforeStart();
             // if we have an issue starting then propagate the exception to 
caller
             beforeStart();
             start();
@@ -139,10 +143,7 @@ public abstract class MainSupport extends ServiceSupport {
      * Hangup signal.
      */
     public void disableHangupSupport() {
-        boolean result = 
Runtime.getRuntime().removeShutdownHook(hangupInterceptor);
-        if (LOG.isDebugEnabled() && result) {
-            LOG.debug("HangupInterceptor ({}) successfully removed", 
hangupInterceptor);
-        }
+        hangupInterceptorEnabled = false;
     }
 
     /**
@@ -185,6 +186,12 @@ public abstract class MainSupport extends ServiceSupport {
         }
     }
 
+    private void internalBeforeStart() {
+        if (hangupInterceptorEnabled) {
+            Runtime.getRuntime().addShutdownHook(new HangupInterceptor(this));
+        }
+    }
+
     /**
      * Callback to run custom logic before CamelContext is being stopped.
      * <p/>

Reply via email to