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);