You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/04/08 11:54:32 UTC

svn commit: r1672051 - in /sling/trunk/bundles/commons/logservice/src: main/java/org/apache/sling/commons/logservice/internal/ test/java/org/apache/sling/commons/logservice/internal/

Author: cziegeler
Date: Wed Apr  8 09:54:32 2015
New Revision: 1672051

URL: http://svn.apache.org/r1672051
Log:
SLING-4563 : Log start level number on STARTLEVEL CHANGED event

Modified:
    sling/trunk/bundles/commons/logservice/src/main/java/org/apache/sling/commons/logservice/internal/Activator.java
    sling/trunk/bundles/commons/logservice/src/main/java/org/apache/sling/commons/logservice/internal/LogSupport.java
    sling/trunk/bundles/commons/logservice/src/test/java/org/apache/sling/commons/logservice/internal/LogSupportTest.java

Modified: sling/trunk/bundles/commons/logservice/src/main/java/org/apache/sling/commons/logservice/internal/Activator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/logservice/src/main/java/org/apache/sling/commons/logservice/internal/Activator.java?rev=1672051&r1=1672050&r2=1672051&view=diff
==============================================================================
--- sling/trunk/bundles/commons/logservice/src/main/java/org/apache/sling/commons/logservice/internal/Activator.java (original)
+++ sling/trunk/bundles/commons/logservice/src/main/java/org/apache/sling/commons/logservice/internal/Activator.java Wed Apr  8 09:54:32 2015
@@ -22,8 +22,10 @@ import java.util.Hashtable;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
 import org.osgi.service.log.LogReaderService;
 import org.osgi.service.log.LogService;
+import org.osgi.service.startlevel.StartLevel;
 
 /**
  * The <code>Activator</code> class is the <code>BundleActivator</code> for the
@@ -36,11 +38,17 @@ public class Activator implements Bundle
 
     private LogSupport logSupport;
 
+    /** Reference to the start level service. */
+    private ServiceReference startLevelRef;
+
     /**
      * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
      */
     public void start(final BundleContext context) throws Exception {
-        logSupport = new LogSupport();
+        // get start level service, it's always there (required by the spec)
+        startLevelRef = context.getServiceReference(StartLevel.class.getName());
+
+        logSupport = new LogSupport((StartLevel)context.getService(startLevelRef));
         context.addBundleListener(logSupport);
         context.addFrameworkListener(logSupport);
         context.addServiceListener(logSupport);
@@ -66,6 +74,9 @@ public class Activator implements Bundle
      * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
      */
     public void stop(final BundleContext context) throws Exception {
+        if ( startLevelRef != null ) {
+            context.ungetService(startLevelRef);
+        }
         if (logSupport != null) {
             context.removeBundleListener(logSupport);
             context.removeFrameworkListener(logSupport);

Modified: sling/trunk/bundles/commons/logservice/src/main/java/org/apache/sling/commons/logservice/internal/LogSupport.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/logservice/src/main/java/org/apache/sling/commons/logservice/internal/LogSupport.java?rev=1672051&r1=1672050&r2=1672051&view=diff
==============================================================================
--- sling/trunk/bundles/commons/logservice/src/main/java/org/apache/sling/commons/logservice/internal/LogSupport.java (original)
+++ sling/trunk/bundles/commons/logservice/src/main/java/org/apache/sling/commons/logservice/internal/LogSupport.java Wed Apr  8 09:54:32 2015
@@ -70,7 +70,7 @@ public class LogSupport implements Synch
     // The loggers by bundle id used for logging messages originated from
     // specific bundles
     @SuppressWarnings("serial")
-    private Map<Long, Logger> loggers = new LinkedHashMap<Long, Logger>(16,
+    private final Map<Long, Logger> loggers = new LinkedHashMap<Long, Logger>(16,
         0.75f, true) {
         private static final int MAX_SIZE = 50;
 
@@ -81,11 +81,14 @@ public class LogSupport implements Synch
     };
 
     // the worker thread actually sending LogEvents to LogListeners
-    private LogEntryDispatcher logEntryDispatcher;
+    private final LogEntryDispatcher logEntryDispatcher;
 
-    /* package */LogSupport() {
+    private final StartLevel startLevelService;
+
+    /* package */LogSupport(final StartLevel startLevelService) {
         logEntryDispatcher = new LogEntryDispatcher(this);
         logEntryDispatcher.start();
+        this.startLevelService = startLevelService;
     }
 
     /* package */void shutdown() {
@@ -348,12 +351,7 @@ public class LogSupport implements Synch
                 message = "FrameworkEvent PACKAGES REFRESHED";
                 break;
             case FrameworkEvent.STARTLEVEL_CHANGED:
-                // bundle must be the system bundle
-                final Bundle bundle = event.getBundle();
-                // StartLevel service is always there
-                final ServiceReference slRef = bundle.getBundleContext().getServiceReference(StartLevel.class.getName());
-                final StartLevel sl = (StartLevel) bundle.getBundleContext().getService(slRef);
-                message = "FrameworkEvent STARTLEVEL CHANGED to " + sl.getStartLevel();
+                message = "FrameworkEvent STARTLEVEL CHANGED to " + this.startLevelService.getStartLevel();
                 break;
             case FrameworkEvent.WARNING:
                 message = "FrameworkEvent WARNING";

Modified: sling/trunk/bundles/commons/logservice/src/test/java/org/apache/sling/commons/logservice/internal/LogSupportTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/logservice/src/test/java/org/apache/sling/commons/logservice/internal/LogSupportTest.java?rev=1672051&r1=1672050&r2=1672051&view=diff
==============================================================================
--- sling/trunk/bundles/commons/logservice/src/test/java/org/apache/sling/commons/logservice/internal/LogSupportTest.java (original)
+++ sling/trunk/bundles/commons/logservice/src/test/java/org/apache/sling/commons/logservice/internal/LogSupportTest.java Wed Apr  8 09:54:32 2015
@@ -32,12 +32,14 @@ import org.osgi.framework.ServiceEvent;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.log.LogEntry;
 import org.osgi.service.log.LogService;
+import org.osgi.service.startlevel.StartLevel;
 import org.slf4j.Logger;
 
 public class LogSupportTest {
     @Test @SuppressWarnings("unchecked")
     public void testServiceEvent() throws Exception {
-        LogSupport ls = new LogSupport();
+        StartLevel startLevel = Mockito.mock(StartLevel.class);
+        LogSupport ls = new LogSupport(startLevel);
         Field lf = LogSupport.class.getDeclaredField("loggers");
         lf.setAccessible(true);
         Map<Long, Logger> loggers = (Map<Long, Logger>) lf.get(ls);
@@ -77,7 +79,8 @@ public class LogSupportTest {
         ServiceReference sr = Mockito.mock(ServiceReference.class);
         LogEntry le = new LogEntryImpl(b, sr, LogService.LOG_DEBUG, "test", null);
 
-        LogSupport ls = new LogSupport();
+        StartLevel startLevel = Mockito.mock(StartLevel.class);
+        LogSupport ls = new LogSupport(startLevel);
         Field lf = LogSupport.class.getDeclaredField("loggers");
         lf.setAccessible(true);
         Map<Long, Logger> loggers = (Map<Long, Logger>) lf.get(ls);
@@ -107,7 +110,8 @@ public class LogSupportTest {
         Exception e = new Exception();
         LogEntry le = new LogEntryImpl(b, null, LogService.LOG_ERROR, "my-error-msg", e);
 
-        LogSupport ls = new LogSupport();
+        StartLevel startLevel = Mockito.mock(StartLevel.class);
+        LogSupport ls = new LogSupport(startLevel);
         Field lf = LogSupport.class.getDeclaredField("loggers");
         lf.setAccessible(true);
         Map<Long, Logger> loggers = (Map<Long, Logger>) lf.get(ls);