Author: jsedding Date: Mon Jun 29 18:11:57 2015 New Revision: 1688279 URL: http://svn.apache.org/r1688279 Log: SLING-4845 - MockBundleContext is not thread-safe
Modified: sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java Modified: sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java?rev=1688279&r1=1688278&r2=1688279&view=diff ============================================================================== --- sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java (original) +++ sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java Mon Jun 29 18:11:57 2015 @@ -23,12 +23,12 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Dictionary; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; +import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.lang3.StringUtils; import org.apache.felix.framework.FilterImpl; @@ -47,19 +47,26 @@ import org.osgi.framework.ServiceFactory import org.osgi.framework.ServiceListener; import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceRegistration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.collect.ImmutableList; +import static java.util.Collections.synchronizedList; +import static java.util.Collections.synchronizedSortedSet; + /** * Mock {@link BundleContext} implementation. */ class MockBundleContext implements BundleContext { + private static final Logger LOG = LoggerFactory.getLogger(MockBundleContext.class); + private final MockBundle bundle; - private final SortedSet<MockServiceRegistration> registeredServices = new TreeSet<MockServiceRegistration>(); - private final Map<ServiceListener, Filter> serviceListeners = new HashMap<ServiceListener, Filter>(); - private final List<BundleListener> bundleListeners = new ArrayList<BundleListener>(); - + private final SortedSet<MockServiceRegistration> registeredServices = synchronizedSortedSet(new TreeSet<MockServiceRegistration>()); + private final Map<ServiceListener, Filter> serviceListeners = new ConcurrentHashMap<ServiceListener, Filter>(); + private final List<BundleListener> bundleListeners = synchronizedList(new ArrayList<BundleListener>()); + public MockBundleContext() { this.bundle = new MockBundle(this); }