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/>