X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Flogging%2Fbridge%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Flogging%2Fbridge%2Finternal%2FActivator.java;h=7061954e80e199b2a52c49eeace78ad27b9d4518;hb=c11fedfa1195b5d17cb2493fba1a4f0fde862ce1;hp=90908ef7fa96fcda1d95bec7afae8d52f89ffdb6;hpb=42210c03b0a4c54706320ba9f55794c0abd4d201;p=controller.git diff --git a/opendaylight/logging/bridge/src/main/java/org/opendaylight/controller/logging/bridge/internal/Activator.java b/opendaylight/logging/bridge/src/main/java/org/opendaylight/controller/logging/bridge/internal/Activator.java index 90908ef7fa..7061954e80 100644 --- a/opendaylight/logging/bridge/src/main/java/org/opendaylight/controller/logging/bridge/internal/Activator.java +++ b/opendaylight/logging/bridge/src/main/java/org/opendaylight/controller/logging/bridge/internal/Activator.java @@ -12,6 +12,7 @@ package org.opendaylight.controller.logging.bridge.internal; import org.osgi.service.log.LogEntry; import java.util.Enumeration; import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; import org.osgi.framework.BundleActivator; import org.osgi.framework.ServiceRegistration; import org.osgi.framework.ServiceReference; @@ -44,7 +45,7 @@ public class Activator implements BundleActivator { .getService(service); if (reader == null) { this.log.error("Cannot register the LogListener because " - + "cannot retrive LogReaderService"); + + "cannot retrieve LogReaderService"); } reader.addLogListener(this.listener); // Now lets walk all the exiting messages @@ -55,9 +56,26 @@ public class Activator implements BundleActivator { this.listener.logged(entry); } } + + /* + * Install the default exception handler so that the uncaught + * exceptions are handled by our customized handler. This new + * handler will display the exceptions to OSGI console as well + * as log to file. + */ + Thread.setDefaultUncaughtExceptionHandler(new org.opendaylight. + controller.logging.bridge.internal.UncaughtExceptionHandler()); + + /* + * Install the Shutdown handler. This will intercept SIGTERM signal and + * close the system bundle. This allows for a graceful closing of OSGI + * framework. + */ + + Runtime.getRuntime().addShutdownHook(new shutdownHandler(context)); } else { this.log.error("Cannot register the LogListener because " - + "cannot retrive LogReaderService"); + + "cannot retrieve LogReaderService"); } } else { System.err @@ -77,4 +95,21 @@ public class Activator implements BundleActivator { this.listener = null; this.log = null; } + + private class shutdownHandler extends Thread { + BundleContext bundlecontext; + public shutdownHandler(BundleContext ctxt) { + this.bundlecontext = ctxt; + } + + public void run () { + try { + this.bundlecontext.getBundle(0).stop(); + log.debug("shutdown handler thread called"); + } catch (BundleException e) { + log.debug("Bundle couldn't be stopped"); + } + } + } + }