Merge "ForwardingRulesManager to expose async flow api"
[controller.git] / opendaylight / logging / bridge / src / main / java / org / opendaylight / controller / logging / bridge / internal / Activator.java
index 75c5ca9cbbbbd13cf050975a9cffcd4e916a4ad9..6bafee0b2cdb053c09401f653dbbd5dcc56d3dbd 100644 (file)
@@ -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
@@ -64,9 +65,17 @@ public class Activator implements BundleActivator {
                  */
                 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
@@ -86,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");
+            }
+        }   
+    }
+
 }