You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ro...@apache.org on 2018/09/20 19:34:36 UTC

svn commit: r1841503 [1/2] - in /aries/trunk/cdi: cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ cdi-extender/src/test/java/org/apache/aries/cdi/co...

Author: rotty3000
Date: Thu Sep 20 19:34:35 2018
New Revision: 1841503

URL: http://svn.apache.org/viewvc?rev=1841503&view=rev
Log:
[cdi] more testing and fixes

Added:
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/AbstractTestBase.java
    aries/trunk/cdi/cdi-itests/bnd/tb152_2.bnd
    aries/trunk/cdi/cdi-itests/bnd/tb152_2b.bnd
    aries/trunk/cdi/cdi-itests/bnd/tb152_3.bnd
    aries/trunk/cdi/cdi-itests/bnd/tb152_3_1.bnd
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/Test152_2.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/Test152_3.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/Test152_3_1.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_2/
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_2/One.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_2/Two.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_2b/
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_2b/One.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_2b/Two.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3/
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3/One.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3/Two.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1/
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1/One.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1/Three.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb152_3_1/Two.java
Removed:
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/EventsTest.java
Modified:
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CDIBundle.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionPhase.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceSync.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ContainerActivator.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ContainerComponent.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentInstanceDTO.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryComponent.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java
    aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleComponent.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_dynamic_greedy_Test2.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_dynamic_reluctant_Test.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_static_greedy_Test.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_static_reluctant_Test.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/MapsTest.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_PropertiesTest.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceReferenceTest.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceTest.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_TupleTest.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerReferencesTest.java
    aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/BaseCDIBundleTest.java
    aries/trunk/cdi/cdi-extender/src/test/resources/logback.xml
    aries/trunk/cdi/cdi-itests/bnd.bnd
    aries/trunk/cdi/cdi-itests/cdi-executable.bndrun
    aries/trunk/cdi/cdi-itests/itest.bndrun
    aries/trunk/cdi/cdi-itests/pom.xml
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedBundleScopedImpl.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedPrototypeScopedImpl.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceProperties.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/ServiceWithProperties.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/DisableComponentTests.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/EventsTests.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/FactoryComponentTests.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/JndiExtensionTests.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/OptionalReluctantReferenceTests.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb10/SingleReferenceEventHandler.java
    aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb9/ContainerReferenceEventHandler.java

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CDIBundle.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CDIBundle.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CDIBundle.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/CDIBundle.java Thu Sep 20 19:34:35 2018
@@ -16,6 +16,7 @@ package org.apache.aries.cdi.container.i
 
 import org.apache.aries.cdi.container.internal.CCR;
 import org.apache.aries.cdi.container.internal.container.Op.Mode;
+import org.apache.aries.cdi.container.internal.util.Syncro;
 import org.apache.felix.utils.extender.Extension;
 import org.osgi.service.log.Logger;
 
@@ -29,23 +30,25 @@ public class CDIBundle extends Phase imp
 
 	@Override
 	public boolean close() {
-		containerState.closing();
+		try (Syncro open = syncro.open()) {
+			containerState.closing();
 
-		return next.map(
-			next -> {
-				submit(next.closeOp(), next::close).onFailure(
-					f -> {
-						_log.error(l -> l.error("CCR Error in cdibundle CLOSE on {}", bundle(), f));
+			return next.map(
+					next -> {
+						submit(next.closeOp(), next::close).onFailure(
+								f -> {
+									_log.error(l -> l.error("CCR Error in cdibundle CLOSE on {}", bundle(), f));
+
+									error(f);
+								}
+								);
 
-						error(f);
-					}
-				);
-
-				_ccr.remove(bundle());
+						_ccr.remove(bundle());
 
-				return true;
-			}
-		).orElse(true);
+						return true;
+					}
+					).orElse(true);
+		}
 	}
 
 	@Override
@@ -60,21 +63,23 @@ public class CDIBundle extends Phase imp
 
 	@Override
 	public boolean open() {
-		return next.map(
-			next -> {
-				_ccr.add(containerState.bundle(), containerState);
-
-				submit(next.openOp(), next::open).onFailure(
-					f -> {
-						_log.error(l -> l.error("CCR Error in cdibundle OPEN on {}", bundle(), f));
-
-						error(f);
-					}
-				);
-
-				return true;
-			}
-		).orElse(true);
+		try (Syncro open = syncro.open()) {
+			return next.map(
+				next -> {
+					_ccr.add(containerState.bundle(), containerState);
+
+					submit(next.openOp(), next::open).onFailure(
+						f -> {
+							_log.error(l -> l.error("CCR Error in cdibundle OPEN on {}", bundle(), f));
+
+							error(f);
+						}
+					);
+
+					return true;
+				}
+			).orElse(true);
+		}
 	}
 
 	@Override

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java Thu Sep 20 19:34:35 2018
@@ -27,6 +27,7 @@ import org.apache.aries.cdi.container.in
 import org.apache.aries.cdi.container.internal.model.ExtendedConfigurationDTO;
 import org.apache.aries.cdi.container.internal.util.Maps;
 import org.apache.aries.cdi.container.internal.util.Predicates;
+import org.apache.aries.cdi.container.internal.util.Syncro;
 import org.apache.aries.cdi.container.internal.util.Throw;
 import org.jboss.weld.exceptions.IllegalArgumentException;
 import org.osgi.framework.ServiceRegistration;
@@ -71,24 +72,26 @@ public class ConfigurationListener exten
 
 	@Override
 	public boolean close() {
-		if (_listenerService != null) {
-			_listenerService.unregister();
-			_listenerService = null;
-		}
+		try (Syncro open = syncro.open()) {
+			if (_listenerService != null) {
+				_listenerService.unregister();
+				_listenerService = null;
+			}
 
-		return next.map(
-			next -> {
-				submit(next.closeOp(), next::close).onFailure(
-					f -> {
-						_log.error(l -> l.error("CCR Failure in configuration listener close on {}", next, f));
+			return next.map(
+				next -> {
+					submit(next.closeOp(), next::close).onFailure(
+						f -> {
+							_log.error(l -> l.error("CCR Failure in configuration listener close on {}", next, f));
 
-						error(f);
-					}
-				);
+							error(f);
+						}
+					);
 
-				return true;
-			}
-		).orElse(true);
+					return true;
+				}
+			).orElse(true);
+		}
 	}
 
 	@Override
@@ -127,62 +130,67 @@ public class ConfigurationListener exten
 
 	@Override
 	public boolean open() {
-		Dictionary<String, Object> properties = new Hashtable<>();
-		properties.put("name", toString());
-		_listenerService = containerState.bundleContext().registerService(
-			org.osgi.service.cm.ConfigurationListener.class, this, properties);
-
-		return next.map(next -> (Component)next).map(
-			component -> {
-				submit(component.openOp(), component::open).then(
-					s -> {
-						component.configurationTemplates().stream().filter(
-							ct -> Objects.nonNull(ct.pid)
-						).forEach(
-							template -> {
-								if (template.maximumCardinality == MaximumCardinality.ONE) {
-									containerState.findConfig(template.pid).ifPresent(
-										c -> processEvent(
-											component,
-											template,
-											new ConfigurationEvent(
-												containerState.caTracker().getServiceReference(),
-												ConfigurationEvent.CM_UPDATED,
-												null,
-												c.getPid())
-										)
-									);
-								}
-								else {
-									containerState.findConfigs(template.pid, true).ifPresent(
-										arr -> Arrays.stream(arr).forEach(
+		try (Syncro open = syncro.open()) {
+			if (containerState.bundleContext() == null) {
+				// this bundle was already removed
+				return false;
+			}
+
+			Dictionary<String, Object> properties = new Hashtable<>();
+			properties.put("name", toString());
+			_listenerService = containerState.bundleContext().registerService(
+					org.osgi.service.cm.ConfigurationListener.class, this, properties);
+
+			return next.map(next -> (Component)next).map(
+				component -> {
+					submit(component.openOp(), component::open).then(
+						s -> {
+							component.configurationTemplates().stream().filter(
+								ct -> Objects.nonNull(ct.pid)
+							).forEach(
+								template -> {
+									if (template.maximumCardinality == MaximumCardinality.ONE) {
+										containerState.findConfig(template.pid).ifPresent(
 											c -> processEvent(
 												component,
 												template,
 												new ConfigurationEvent(
 													containerState.caTracker().getServiceReference(),
 													ConfigurationEvent.CM_UPDATED,
-													c.getFactoryPid(),
-													c.getPid())
+													null,
+													c.getPid()))
+										);
+									}
+									else {
+										containerState.findConfigs(template.pid, true).ifPresent(
+											arr -> Arrays.stream(arr).forEach(
+												c -> processEvent(
+													component,
+													template,
+													new ConfigurationEvent(
+														containerState.caTracker().getServiceReference(),
+														ConfigurationEvent.CM_UPDATED,
+														c.getFactoryPid(),
+														c.getPid()))
 											)
-										)
-									);
+										);
+									}
 								}
-							}
-						);
+							);
 
-						return s;
-					},
-					f -> {
-						_log.error(l -> l.error("CCR Failure during configuration start on {}", next, f.getFailure()));
+							return s;
+						},
+						f -> {
+							_log.error(l -> l.error("CCR Failure during configuration start on {}", next, f.getFailure()));
 
-						error(f.getFailure());
-					}
-				);
+							error(f.getFailure());
+						}
+					);
 
-				return true;
-			}
-		).orElse(true);
+					return true;
+				}
+			).orElse(true);
+		}
 	}
 
 	@Override

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java Thu Sep 20 19:34:35 2018
@@ -74,6 +74,11 @@ public class ContainerBootstrap extends
 	@Override
 	public boolean open() {
 		try (Syncro syncro = _lock.open()) {
+			if (containerState.bundleContext() == null) {
+				// this bundle was already removed
+				return false;
+			}
+
 			if (_bootstrap != null) {
 				return true;
 			}

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java Thu Sep 20 19:34:35 2018
@@ -24,6 +24,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
@@ -242,7 +243,9 @@ public class ContainerState {
 	}
 
 	public BundleContext bundleContext() {
-		return _bundle.getBundleContext();
+		BundleContext bundleContext = _bundle.getBundleContext();
+		Objects.requireNonNull(bundleContext);
+		return bundleContext;
 	}
 
 	public ServiceTracker<ConfigurationAdmin, ConfigurationAdmin> caTracker() {

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionPhase.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionPhase.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionPhase.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ExtensionPhase.java Thu Sep 20 19:34:35 2018
@@ -29,6 +29,7 @@ import org.apache.aries.cdi.container.in
 import org.apache.aries.cdi.container.internal.model.ExtendedExtensionTemplateDTO;
 import org.apache.aries.cdi.container.internal.util.Conversions;
 import org.apache.aries.cdi.container.internal.util.SRs;
+import org.apache.aries.cdi.container.internal.util.Syncro;
 import org.apache.aries.cdi.container.internal.util.Throw;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Filter;
@@ -49,29 +50,31 @@ public class ExtensionPhase extends Phas
 
 	@Override
 	public boolean close() {
-		if (!extensionTemplates().isEmpty()) {
-			if (_extensionTracker != null) {
-				_extensionTracker.close();
+		try (Syncro open = syncro.open()) {
+			if (!extensionTemplates().isEmpty()) {
+				if (_extensionTracker != null) {
+					_extensionTracker.close();
 
-				_extensionTracker = null;
-			}
-
-			return true;
-		}
-		else {
-			return next.map(
-				next -> {
-					submit(next.closeOp(), next::close).onFailure(
-						f -> {
-							_log.error(l -> l.error("CCR Error in extension CLOSE on {}", bundle(), f));
-
-							error(f);
-						}
-					);
-
-					return true;
+					_extensionTracker = null;
 				}
-			).orElse(true);
+
+				return true;
+			}
+			else {
+				return next.map(
+					next -> {
+						submit(next.closeOp(), next::close).onFailure(
+							f -> {
+								_log.error(l -> l.error("CCR Error in extension CLOSE on {}", bundle(), f));
+
+								error(f);
+							}
+						);
+
+						return true;
+					}
+				).orElse(true);
+			}
 		}
 	}
 
@@ -82,28 +85,35 @@ public class ExtensionPhase extends Phas
 
 	@Override
 	public boolean open() {
-		if (!extensionTemplates().isEmpty()) {
-			_extensionTracker = new ServiceTracker<>(
-				containerState.bundleContext(), createExtensionFilter(), new ExtensionPhaseCustomizer());
+		try (Syncro open = syncro.open()) {
+			if (containerState.bundleContext() == null) {
+				// this bundle was already removed
+				return false;
+			}
 
-			_extensionTracker.open();
+			if (!extensionTemplates().isEmpty()) {
+				_extensionTracker = new ServiceTracker<>(
+						containerState.bundleContext(), createExtensionFilter(), new ExtensionPhaseCustomizer());
 
-			return true;
-		}
-		else {
-			return next.map(
-				next -> {
-					submit(next.openOp(), next::open).onFailure(
-						f -> {
-							_log.error(l -> l.error("CCR Error in extension OPEN on {}", bundle(), f));
+				_extensionTracker.open();
 
-							error(f);
-						}
-					);
+				return true;
+			}
+			else {
+				return next.map(
+						next -> {
+							submit(next.openOp(), next::open).onFailure(
+									f -> {
+										_log.error(l -> l.error("CCR Error in extension OPEN on {}", bundle(), f));
+
+										error(f);
+									}
+									);
 
-					return true;
-				}
-			).orElse(true);
+							return true;
+						}
+						).orElse(true);
+			}
 		}
 	}
 

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Phase.java Thu Sep 20 19:34:35 2018
@@ -17,11 +17,14 @@ package org.apache.aries.cdi.container.i
 import java.util.Optional;
 import java.util.concurrent.Callable;
 
+import org.apache.aries.cdi.container.internal.util.Syncro;
 import org.osgi.framework.Bundle;
 import org.osgi.util.promise.Promise;
 
 public abstract class Phase {
 
+	protected final Syncro syncro = new Syncro(true);
+
 	public Phase(ContainerState containerState, Phase next) {
 		this.containerState = containerState;
 		this.next = Optional.ofNullable(next);

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceSync.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceSync.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceSync.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ReferenceSync.java Thu Sep 20 19:34:35 2018
@@ -128,10 +128,10 @@ public class ReferenceSync implements Se
 		boolean dynamic = (_templateDTO.policy == ReferencePolicy.DYNAMIC);
 		boolean reluctant = (_templateDTO.policyOption == ReferencePolicyOption.RELUCTANT);
 		CollectionType collectionType = _templateDTO.collectionType;
-		boolean requiresUpdate = false;
+		boolean requiresUpdate = true;
 
-		if (resolved && reluctant && active && !dynamic) {
-			requiresUpdate = true;
+		if (resolved && active && dynamic) {
+			requiresUpdate = false;
 		}
 
 		_referenceDTO.matches.removeIf(d -> d.id == SRs.id(reference));

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java Thu Sep 20 19:34:35 2018
@@ -122,13 +122,6 @@ public class RuntimeExtension implements
 
 		_containerState.beanManager(bm);
 
-		Dictionary<String, Object> properties = new Hashtable<>();
-		properties.put(CDIConstants.CDI_CONTAINER_ID, _containerState.id());
-
-		registerService(
-			new String[] {BeanManager.class.getName()}, bm,
-			properties);
-
 		ComponentDTO componentDTO = _containerState.containerDTO().components.get(0);
 
 		_containerState.submit(
@@ -136,6 +129,16 @@ public class RuntimeExtension implements
 			() -> registerServices(componentDTO, bm)
 		).then(
 			s -> initComponents()
+		).then(s -> {
+				Dictionary<String, Object> properties = new Hashtable<>();
+				properties.put(CDIConstants.CDI_CONTAINER_ID, _containerState.id());
+
+				registerService(
+					new String[] {BeanManager.class.getName()}, bm,
+					properties);
+
+				return s;
+			}
 		);
 	}
 

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ContainerActivator.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ContainerActivator.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ContainerActivator.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ContainerActivator.java Thu Sep 20 19:34:35 2018
@@ -19,6 +19,7 @@ import org.apache.aries.cdi.container.in
 import org.apache.aries.cdi.container.internal.container.Op;
 import org.apache.aries.cdi.container.internal.container.Op.Mode;
 import org.apache.aries.cdi.container.internal.container.Op.Type;
+import org.apache.aries.cdi.container.internal.util.Syncro;
 import org.osgi.service.log.Logger;
 
 public class ContainerActivator extends InstanceActivator {
@@ -36,6 +37,8 @@ public class ContainerActivator extends
 
 	}
 
+	private final Syncro syncro = new Syncro(true);
+
 	private ContainerActivator(Builder builder) {
 		super(builder);
 		_log = containerState.containerLogs().getLogger(getClass());
@@ -43,21 +46,23 @@ public class ContainerActivator extends
 
 	@Override
 	public boolean close() {
-		boolean result = next.map(
-			next -> {
-				submit(next.closeOp(), next::close).onFailure(
-					f -> {
-						_log.error(l -> l.error("CCR Failure in container activator close on {}", next, f));
-					}
-				);
+		try (Syncro open = syncro.open()) {
+			boolean result = next.map(
+					next -> {
+						submit(next.closeOp(), next::close).onFailure(
+								f -> {
+									_log.error(l -> l.error("CCR Failure in container activator close on {}", next, f));
+								}
+								);
 
-				return true;
-			}
-		).orElse(true);
+						return true;
+					}
+					).orElse(true);
 
-		instance.active = false;
+			instance.active = false;
 
-		return result;
+			return result;
+		}
 	}
 
 	@Override
@@ -67,29 +72,31 @@ public class ContainerActivator extends
 
 	@Override
 	public boolean open() {
-		if (!instance.referencesResolved()) {
-			return false;
-		}
+		try (Syncro open = syncro.open()) {
+			if (!instance.referencesResolved()) {
+				return false;
+			}
 
-		boolean result = next.map(
-			next -> {
-				submit(next.openOp(), next::open).onFailure(
-					f -> {
-						_log.error(l -> l.error("CCR Failure in container activator open on {}", next, f));
+			boolean result = next.map(
+					next -> {
+						submit(next.openOp(), next::open).onFailure(
+								f -> {
+									_log.error(l -> l.error("CCR Failure in container activator open on {}", next, f));
+
+									containerState.error(f);
+								}
+								);
 
-						containerState.error(f);
+						return true;
 					}
-				);
+					).orElse(true);
 
-				return true;
+			if (result) {
+				instance.active = true;
 			}
-		).orElse(true);
 
-		if (result) {
-			instance.active = true;
+			return result;
 		}
-
-		return result;
 	}
 
 	@Override

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ContainerComponent.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ContainerComponent.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ContainerComponent.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ContainerComponent.java Thu Sep 20 19:34:35 2018
@@ -22,6 +22,7 @@ import org.apache.aries.cdi.container.in
 import org.apache.aries.cdi.container.internal.container.Op;
 import org.apache.aries.cdi.container.internal.container.Op.Mode;
 import org.apache.aries.cdi.container.internal.container.Op.Type;
+import org.apache.aries.cdi.container.internal.util.Syncro;
 import org.apache.aries.cdi.container.internal.util.Throw;
 import org.osgi.service.cdi.runtime.dto.ComponentDTO;
 import org.osgi.service.cdi.runtime.dto.ComponentInstanceDTO;
@@ -57,33 +58,35 @@ public class ContainerComponent extends
 
 	@Override
 	public boolean close() {
-		if (_snapshot == null) {
-			return true;
-		}
+		try (Syncro open = syncro.open()) {
+			if (_snapshot == null) {
+				return true;
+			}
 
-		_snapshot.instances.removeIf(
-			instance -> {
-				ExtendedComponentInstanceDTO einstance = (ExtendedComponentInstanceDTO)instance;
+			_snapshot.instances.removeIf(
+				instance -> {
+					ExtendedComponentInstanceDTO einstance = (ExtendedComponentInstanceDTO)instance;
+
+					Promise<Boolean> result = submit(einstance.closeOp(), einstance::close).onFailure(
+						f -> {
+							_log.error(l -> l.error("CCR Error in container component close for {} on {}", einstance.ident(), bundle(), f));
+						}
+					);
 
-				Promise<Boolean> result = submit(einstance.closeOp(), einstance::close).onFailure(
-					f -> {
-						_log.error(l -> l.error("CCR Error in container component close for {} on {}", einstance.ident(), bundle(), f));
+					try {
+						return result.getValue();
+					}
+					catch (InvocationTargetException | InterruptedException e) {
+						return Throw.exception(e);
 					}
-				);
-
-				try {
-					return result.getValue();
-				}
-				catch (InvocationTargetException | InterruptedException e) {
-					return Throw.exception(e);
 				}
-			}
-		);
+			);
 
-		containerState.containerDTO().components.remove(_snapshot);
-		_snapshot = null;
+			containerState.containerDTO().components.remove(_snapshot);
+			_snapshot = null;
 
-		return true;
+			return true;
+		}
 	}
 
 	@Override
@@ -103,29 +106,31 @@ public class ContainerComponent extends
 
 	@Override
 	public boolean open() {
-		_snapshot = new ComponentDTO();
-		_snapshot.instances = new CopyOnWriteArrayList<>();
-		_snapshot.template = _template;
+		try (Syncro open = syncro.open()) {
+			_snapshot = new ComponentDTO();
+			_snapshot.instances = new CopyOnWriteArrayList<>();
+			_snapshot.template = _template;
 
-		containerState.containerDTO().components.add(_snapshot);
+			containerState.containerDTO().components.add(_snapshot);
 
-		ExtendedComponentInstanceDTO instanceDTO = new ExtendedComponentInstanceDTO(
-			containerState, _activatorBuilder);
+			ExtendedComponentInstanceDTO instanceDTO = new ExtendedComponentInstanceDTO(
+					containerState, _activatorBuilder);
 
-		instanceDTO.activations = new CopyOnWriteArrayList<>();
-		instanceDTO.configurations = new CopyOnWriteArrayList<>();
-		instanceDTO.references = new CopyOnWriteArrayList<>();
-		instanceDTO.template = _template;
+			instanceDTO.activations = new CopyOnWriteArrayList<>();
+			instanceDTO.configurations = new CopyOnWriteArrayList<>();
+			instanceDTO.references = new CopyOnWriteArrayList<>();
+			instanceDTO.template = _template;
 
-		_snapshot.instances.add(instanceDTO);
+			_snapshot.instances.add(instanceDTO);
 
-		submit(instanceDTO.openOp(), instanceDTO::open).onFailure(
-			f -> {
-				_log.error(l -> l.error("CCR Error in container component open for {} on {}", _template.name, containerState.bundle()));
-			}
-		);
+			submit(instanceDTO.openOp(), instanceDTO::open).onFailure(
+					f -> {
+						_log.error(l -> l.error("CCR Error in container component open for {} on {}", _template.name, containerState.bundle()));
+					}
+					);
 
-		return true;
+			return true;
+		}
 	}
 
 	@Override

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentInstanceDTO.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentInstanceDTO.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentInstanceDTO.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ExtendedComponentInstanceDTO.java Thu Sep 20 19:34:35 2018
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicLong;
@@ -31,6 +32,7 @@ import org.apache.aries.cdi.container.in
 import org.apache.aries.cdi.container.internal.container.Op.Type;
 import org.apache.aries.cdi.container.internal.container.ReferenceSync;
 import org.apache.aries.cdi.container.internal.util.Conversions;
+import org.apache.aries.cdi.container.internal.util.Syncro;
 import org.osgi.framework.Constants;
 import org.osgi.service.cdi.ConfigurationPolicy;
 import org.osgi.service.cdi.runtime.dto.ComponentDTO;
@@ -54,6 +56,7 @@ public class ExtendedComponentInstanceDT
 	private final ContainerState _containerState;
 	private final Logger _log;
 	private final AtomicReference<InstanceActivator> _noRequiredDependenciesActivator = new AtomicReference<>();
+	private final Syncro sync = new Syncro(true);
 
 	public ExtendedComponentInstanceDTO(
 		ContainerState containerState,
@@ -66,40 +69,42 @@ public class ExtendedComponentInstanceDT
 	}
 
 	public boolean close() {
-		_containerState.submit(Op.of(Mode.CLOSE, Type.REFERENCES, ident()),
-			() -> {
-				references.removeIf(
-					r -> {
-						ExtendedReferenceDTO referenceDTO = (ExtendedReferenceDTO)r;
-						referenceDTO.serviceTracker.close();
-						return true;
-					}
-				);
-
-				if (_noRequiredDependenciesActivator.get() != null) {
-					_containerState.submit(
-						_noRequiredDependenciesActivator.get().closeOp(),
-						() -> _noRequiredDependenciesActivator.get().close()
-					).onFailure(
-						f -> {
-							_log.error(l -> l.error("CCR Error in CLOSE on {}", ident(), f));
-
-							_containerState.error(f);
+		try (Syncro open = sync.open()) {
+			_containerState.submit(Op.of(Mode.CLOSE, Type.REFERENCES, ident()),
+				() -> {
+					references.removeIf(
+						r -> {
+							ExtendedReferenceDTO referenceDTO = (ExtendedReferenceDTO)r;
+							referenceDTO.serviceTracker.close();
+							return true;
 						}
 					);
-				}
 
-				return true;
-			}
-		).onFailure(
-			f -> {
-				_log.error(l -> l.error("CCR Error in component instance stop on {}", this, f));
-			}
-		);
+					if (_noRequiredDependenciesActivator.get() != null) {
+						_containerState.submit(
+							_noRequiredDependenciesActivator.get().closeOp(),
+							() -> _noRequiredDependenciesActivator.get().close()
+						).onFailure(
+							f -> {
+								_log.error(l -> l.error("CCR Error in CLOSE on {}", ident(), f));
+
+								_containerState.error(f);
+							}
+						);
+					}
 
-		properties = null;
+					return true;
+				}
+			).onFailure(
+				f -> {
+					_log.error(l -> l.error("CCR Error in component instance stop on {}", this, f));
+				}
+			);
 
-		return true;
+			properties = null;
+
+			return true;
+		}
 	}
 
 	public Op closeOp() {
@@ -150,93 +155,95 @@ public class ExtendedComponentInstanceDT
 	}
 
 	public boolean open() {
-		if (!configurationsResolved() || (properties != null)) {
-			return false;
-		}
-
-		ConfigurationDTO containerConfiguration = containerConfiguration();
-
-		if (containerConfiguration != null) {
-			Boolean enabled = Conversions.convert(
-				containerConfiguration.properties.get(
-					template.name.concat(".enabled"))
-			).defaultValue(Boolean.TRUE).to(Boolean.class);
-
-			if (!enabled) {
-				_containerState.containerDTO().components.stream().filter(
-					c -> c.template == template
-				).forEach(c -> c.enabled = false);
-
+		try (Syncro open = sync.open()) {
+			if (!configurationsResolved() || (properties != null)) {
 				return false;
 			}
-			else {
-				_containerState.containerDTO().components.stream().filter(
-					c -> c.template == template
-				).forEach(c -> c.enabled = true);
-			}
-		}
 
-		properties = componentProperties(null);
+			ConfigurationDTO containerConfiguration = containerConfiguration();
 
-		template.references.stream().map(ExtendedReferenceTemplateDTO.class::cast).forEach(
-			t -> {
-				ExtendedReferenceDTO referenceDTO = new ExtendedReferenceDTO();
+			if (containerConfiguration != null) {
+				Boolean enabled = Conversions.convert(
+					containerConfiguration.properties.get(
+						template.name.concat(".enabled"))
+				).defaultValue(Boolean.TRUE).to(Boolean.class);
+
+				if (!enabled) {
+					_containerState.containerDTO().components.stream().filter(
+						c -> c.template == template
+					).forEach(c -> c.enabled = false);
 
-				if (t.collectionType == CollectionType.BINDER_SERVICE) {
-					referenceDTO.binder = new BindServiceImpl<>(_containerState);
-				}
-				else if (t.collectionType == CollectionType.BINDER_REFERENCE) {
-					referenceDTO.binder = new BindServiceReferenceImpl<>(_containerState);
+					return false;
 				}
-				else if (t.collectionType == CollectionType.BINDER_BEAN_SERVICE_OBJECTS) {
-					referenceDTO.binder = new BindBeanServiceObjectsImpl<>(_containerState);
+				else {
+					_containerState.containerDTO().components.stream().filter(
+						c -> c.template == template
+					).forEach(c -> c.enabled = true);
 				}
+			}
 
-				referenceDTO.matches = new CopyOnWriteArrayList<>();
-				referenceDTO.minimumCardinality = minimumCardinality(t.name, t.minimumCardinality);
-				referenceDTO.targetFilter = targetFilter(t.serviceType, t.name, t.targetFilter);
-				referenceDTO.template = t;
-				referenceDTO.serviceTracker = new ServiceTracker<>(
-					_containerState.bundleContext(),
-					asFilter(referenceDTO.targetFilter),
-					new ReferenceSync(_containerState, referenceDTO, this, _builder));
+			properties = componentProperties(null);
 
-				references.add(referenceDTO);
-			}
-		);
+			template.references.stream().map(ExtendedReferenceTemplateDTO.class::cast).forEach(
+				t -> {
+					ExtendedReferenceDTO referenceDTO = new ExtendedReferenceDTO();
 
-		_containerState.submit(
-			Op.of(Mode.OPEN, Type.REFERENCES, ident()),
-			() -> {
-				references.stream().map(ExtendedReferenceDTO.class::cast).forEach(
-					r -> r.serviceTracker.open()
-				);
+					if (t.collectionType == CollectionType.BINDER_SERVICE) {
+						referenceDTO.binder = new BindServiceImpl<>(_containerState);
+					}
+					else if (t.collectionType == CollectionType.BINDER_REFERENCE) {
+						referenceDTO.binder = new BindServiceReferenceImpl<>(_containerState);
+					}
+					else if (t.collectionType == CollectionType.BINDER_BEAN_SERVICE_OBJECTS) {
+						referenceDTO.binder = new BindBeanServiceObjectsImpl<>(_containerState);
+					}
 
-				return referencesResolved();
-			}
-		).then(
-			s -> {
-				if (s.getValue()) {
-					// none of the reference dependencies are required
-					_noRequiredDependenciesActivator.set(_builder.setInstance(this).build());
-
-					return _containerState.submit(
-						_noRequiredDependenciesActivator.get().openOp(),
-						() -> _noRequiredDependenciesActivator.get().open()
-					).onFailure(
-						f -> {
-							_log.error(l -> l.error("CCR Error in OPEN on {}", ident(), f));
+					referenceDTO.matches = new CopyOnWriteArrayList<>();
+					referenceDTO.minimumCardinality = minimumCardinality(t.name, t.minimumCardinality);
+					referenceDTO.targetFilter = targetFilter(t.serviceType, t.name, t.targetFilter);
+					referenceDTO.template = t;
+					referenceDTO.serviceTracker = new ServiceTracker<>(
+						_containerState.bundleContext(),
+						asFilter(referenceDTO.targetFilter),
+						new ReferenceSync(_containerState, referenceDTO, this, _builder));
 
-							_containerState.error(f);
-						}
+					references.add(referenceDTO);
+				}
+			);
+
+			_containerState.submit(
+				Op.of(Mode.OPEN, Type.REFERENCES, ident()),
+				() -> {
+					references.stream().map(ExtendedReferenceDTO.class::cast).forEach(
+						r -> r.serviceTracker.open()
 					);
+
+					return referencesResolved();
 				}
+			).then(
+				s -> {
+					if (s.getValue()) {
+						// none of the reference dependencies are required
+						_noRequiredDependenciesActivator.set(_builder.setInstance(this).build());
+
+						return _containerState.submit(
+							_noRequiredDependenciesActivator.get().openOp(),
+							() -> _noRequiredDependenciesActivator.get().open()
+						).onFailure(
+							f -> {
+								_log.error(l -> l.error("CCR Error in OPEN on {}", ident(), f));
+
+								_containerState.error(f);
+							}
+						);
+					}
 
-				return s;
-			}
-		);
+					return s;
+				}
+			);
 
-		return true;
+			return true;
+		}
 	}
 
 	private ConfigurationDTO containerConfiguration() {
@@ -309,6 +316,8 @@ public class ExtendedComponentInstanceDT
 	}
 
 	private int minimumCardinality(String componentName, int minimumCardinality) {
+		Objects.requireNonNull(properties);
+		Objects.requireNonNull(componentName);
 		return Optional.ofNullable(
 			properties.get(componentName.concat(".cardinality.minimum"))
 		).map(
@@ -319,6 +328,10 @@ public class ExtendedComponentInstanceDT
 	}
 
 	private String targetFilter(String serviceType, String componentName, String targetFilter) {
+		Objects.requireNonNull(properties);
+		Objects.requireNonNull(serviceType);
+		Objects.requireNonNull(componentName);
+		Objects.requireNonNull(targetFilter);
 		String base = "(objectClass=".concat(serviceType).concat(")");
 		String extraFilter = Optional.ofNullable(
 			properties.get(componentName.concat(".target"))

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryActivator.java Thu Sep 20 19:34:35 2018
@@ -103,6 +103,11 @@ public class FactoryActivator extends In
 	@SuppressWarnings({ "unchecked", "rawtypes" })
 	public boolean open() {
 		try (Syncro synchro = _lock.open()) {
+			if (containerState.bundleContext() == null) {
+				// this bundle was already removed
+				return false;
+			}
+
 			if (!instance.referencesResolved() || instance.active) {
 				return false;
 			}

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryComponent.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryComponent.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryComponent.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/FactoryComponent.java Thu Sep 20 19:34:35 2018
@@ -22,6 +22,7 @@ import org.apache.aries.cdi.container.in
 import org.apache.aries.cdi.container.internal.container.Op;
 import org.apache.aries.cdi.container.internal.container.Op.Mode;
 import org.apache.aries.cdi.container.internal.container.Op.Type;
+import org.apache.aries.cdi.container.internal.util.Syncro;
 import org.apache.aries.cdi.container.internal.util.Throw;
 import org.osgi.service.cdi.runtime.dto.ComponentDTO;
 import org.osgi.service.cdi.runtime.dto.ComponentInstanceDTO;
@@ -54,34 +55,36 @@ public class FactoryComponent extends Co
 
 	@Override
 	public boolean close() {
-		if (_snapshot == null) {
-			return true;
-		}
+		try (Syncro open = syncro.open()) {
+			if (_snapshot == null) {
+				return true;
+			}
 
-		_snapshot.instances.removeIf(
-			instance -> {
-				ExtendedComponentInstanceDTO einstance = (ExtendedComponentInstanceDTO)instance;
-
-				Promise<Boolean> result = submit(einstance.closeOp(), einstance::close).onFailure(
-					f -> {
-						_log.error(l -> l.error("CCR Error in factory component close for {} on {}", einstance.ident(), bundle(), f));
-					}
-				);
+			_snapshot.instances.removeIf(
+				instance -> {
+					ExtendedComponentInstanceDTO einstance = (ExtendedComponentInstanceDTO)instance;
+
+					Promise<Boolean> result = submit(einstance.closeOp(), einstance::close).onFailure(
+						f -> {
+							_log.error(l -> l.error("CCR Error in factory component close for {} on {}", einstance.ident(), bundle(), f));
+						}
+					);
 
-				try {
-					return result.getValue();
-				}
-				catch (InvocationTargetException | InterruptedException e) {
-					return Throw.exception(e);
+					try {
+						return result.getValue();
+					}
+					catch (InvocationTargetException | InterruptedException e) {
+						return Throw.exception(e);
+					}
 				}
-			}
-		);
+			);
 
-		containerState.containerDTO().components.remove(_snapshot);
+			containerState.containerDTO().components.remove(_snapshot);
 
-		_snapshot = null;
+			_snapshot = null;
 
-		return true;
+			return true;
+		}
 	}
 
 	@Override
@@ -106,13 +109,15 @@ public class FactoryComponent extends Co
 
 	@Override
 	public boolean open() {
-		_snapshot = new ComponentDTO();
-		_snapshot.instances = new CopyOnWriteArrayList<>();
-		_snapshot.template = _template;
+		try (Syncro open = syncro.open()) {
+			_snapshot = new ComponentDTO();
+			_snapshot.instances = new CopyOnWriteArrayList<>();
+			_snapshot.template = _template;
 
-		containerState.containerDTO().components.add(_snapshot);
+			containerState.containerDTO().components.add(_snapshot);
 
-		return true;
+			return true;
+		}
 	}
 
 	@Override

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/ReferenceModel.java Thu Sep 20 19:34:35 2018
@@ -41,11 +41,14 @@ import javax.inject.Named;
 import javax.inject.Provider;
 import javax.inject.Qualifier;
 
+import org.apache.aries.cdi.container.internal.util.Conversions;
+import org.apache.aries.cdi.container.internal.util.Maps;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.cdi.MaximumCardinality;
 import org.osgi.service.cdi.ReferencePolicy;
 import org.osgi.service.cdi.ReferencePolicyOption;
+import org.osgi.service.cdi.annotations.BeanPropertyType;
 import org.osgi.service.cdi.annotations.PrototypeRequired;
 import org.osgi.service.cdi.annotations.Reference;
 import org.osgi.service.cdi.annotations.Reluctant;
@@ -53,6 +56,7 @@ import org.osgi.service.cdi.reference.Be
 import org.osgi.service.cdi.reference.BindBeanServiceObjects;
 import org.osgi.service.cdi.reference.BindService;
 import org.osgi.service.cdi.reference.BindServiceReference;
+import org.osgi.util.converter.TypeReference;
 
 public class ReferenceModel {
 
@@ -115,6 +119,8 @@ public class ReferenceModel {
 		BUNDLE, PROTOTYPE, SINGLETON
 	}
 
+	private static final TypeReference<Map<String, String>> _mapType = new TypeReference<Map<String, String>>(){};
+
 	private ReferenceModel(
 		Type injectionPointType,
 		Class<?> declaringClass,
@@ -260,12 +266,23 @@ public class ReferenceModel {
 			filterValid = true;
 		}
 
+		List<Annotation> beanPropertyTypes = _annotated.getAnnotations().stream().filter(
+			ann -> ann.annotationType().getAnnotation(BeanPropertyType.class) != null
+		).collect(Collectors.toList());
+
 		StringBuilder sb = new StringBuilder();
 
-		if (_prototype && filterValid) {
+		if (_prototype && filterValid || !beanPropertyTypes.isEmpty()) {
 			sb.append("(&");
 		}
 
+		beanPropertyTypes.forEach(
+			ann -> {
+				Map<String, String> map = Conversions.convert(ann).to(_mapType);
+				Maps.appendFilter(sb, map);
+			}
+		);
+
 		if (_prototype) {
 			sb.append("(");
 			sb.append(Constants.SERVICE_SCOPE);
@@ -278,7 +295,7 @@ public class ReferenceModel {
 			sb.append(targetFilter);
 		}
 
-		if (_prototype && filterValid) {
+		if (_prototype && filterValid || !beanPropertyTypes.isEmpty()) {
 			sb.append(")");
 		}
 

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleActivator.java Thu Sep 20 19:34:35 2018
@@ -102,6 +102,11 @@ public class SingleActivator extends Ins
 	@SuppressWarnings({ "unchecked", "rawtypes" })
 	public boolean open() {
 		try (Syncro synchro = _lock.open()) {
+			if (containerState.bundleContext() == null) {
+				// this bundle was already removed
+				return false;
+			}
+
 			if (!instance.referencesResolved() || instance.active) {
 				return false;
 			}

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleComponent.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleComponent.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleComponent.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/SingleComponent.java Thu Sep 20 19:34:35 2018
@@ -21,6 +21,7 @@ import java.util.concurrent.CopyOnWriteA
 import org.apache.aries.cdi.container.internal.container.ContainerState;
 import org.apache.aries.cdi.container.internal.container.Op;
 import org.apache.aries.cdi.container.internal.container.Op.Mode;
+import org.apache.aries.cdi.container.internal.util.Syncro;
 import org.apache.aries.cdi.container.internal.util.Throw;
 import org.osgi.service.cdi.runtime.dto.ComponentDTO;
 import org.osgi.service.cdi.runtime.dto.ComponentInstanceDTO;
@@ -54,34 +55,36 @@ public class SingleComponent extends Com
 
 	@Override
 	public boolean close() {
-		if (_snapshot == null) {
-			return true;
-		}
+		try (Syncro open = syncro.open()) {
+			if (_snapshot == null) {
+				return true;
+			}
 
-		_snapshot.instances.removeIf(
-			instance -> {
-				ExtendedComponentInstanceDTO einstance = (ExtendedComponentInstanceDTO)instance;
-
-				Promise<Boolean> result = submit(einstance.closeOp(), einstance::close).onFailure(
-					f -> {
-						_log.error(l -> l.error("CCR Error in single component close for {} on {}", einstance.ident(), bundle(), f));
-					}
-				);
+			_snapshot.instances.removeIf(
+				instance -> {
+					ExtendedComponentInstanceDTO einstance = (ExtendedComponentInstanceDTO)instance;
+
+					Promise<Boolean> result = submit(einstance.closeOp(), einstance::close).onFailure(
+						f -> {
+							_log.error(l -> l.error("CCR Error in single component close for {} on {}", einstance.ident(), bundle(), f));
+						}
+					);
 
-				try {
-					return result.getValue();
-				}
-				catch (InvocationTargetException | InterruptedException e) {
-					return Throw.exception(e);
+					try {
+						return result.getValue();
+					}
+					catch (InvocationTargetException | InterruptedException e) {
+						return Throw.exception(e);
+					}
 				}
-			}
-		);
+			);
 
-		containerState.containerDTO().components.remove(_snapshot);
+			containerState.containerDTO().components.remove(_snapshot);
 
-		_snapshot = null;
+			_snapshot = null;
 
-		return true;
+			return true;
+		}
 	}
 
 	@Override
@@ -106,28 +109,30 @@ public class SingleComponent extends Com
 
 	@Override
 	public boolean open() {
-		_snapshot = new ComponentDTO();
-		_snapshot.instances = new CopyOnWriteArrayList<>();
-		_snapshot.template = _template;
-
-		containerState.containerDTO().components.add(_snapshot);
-
-		ExtendedComponentInstanceDTO instanceDTO = new ExtendedComponentInstanceDTO(
-			containerState, _activatorBuilder);
-		instanceDTO.activations = new CopyOnWriteArrayList<>();
-		instanceDTO.configurations = new CopyOnWriteArrayList<>();
-		instanceDTO.references = new CopyOnWriteArrayList<>();
-		instanceDTO.template = _template;
-
-		_snapshot.instances.add(instanceDTO);
-
-		submit(instanceDTO.openOp(), instanceDTO::open).onFailure(
-			f -> {
-				_log.error(l -> l.error("CCR Error in single component open for {} on {}", instanceDTO.ident(), containerState.bundle()));
-			}
-		);
+		try (Syncro open = syncro.open()) {
+			_snapshot = new ComponentDTO();
+			_snapshot.instances = new CopyOnWriteArrayList<>();
+			_snapshot.template = _template;
+
+			containerState.containerDTO().components.add(_snapshot);
+
+			ExtendedComponentInstanceDTO instanceDTO = new ExtendedComponentInstanceDTO(
+					containerState, _activatorBuilder);
+			instanceDTO.activations = new CopyOnWriteArrayList<>();
+			instanceDTO.configurations = new CopyOnWriteArrayList<>();
+			instanceDTO.references = new CopyOnWriteArrayList<>();
+			instanceDTO.template = _template;
+
+			_snapshot.instances.add(instanceDTO);
+
+			submit(instanceDTO.openOp(), instanceDTO::open).onFailure(
+				f -> {
+					_log.error(l -> l.error("CCR Error in single component open for {} on {}", instanceDTO.ident(), containerState.bundle(), f));
+				}
+			);
 
-		return true;
+			return true;
+		}
 	}
 
 	@Override

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_dynamic_greedy_Test2.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_dynamic_greedy_Test2.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_dynamic_greedy_Test2.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_dynamic_greedy_Test2.java Thu Sep 20 19:34:35 2018
@@ -21,6 +21,7 @@ import java.util.Collection;
 
 import org.apache.aries.cdi.container.internal.model.BeansModel;
 import org.apache.aries.cdi.container.internal.model.OSGiBean;
+import org.apache.aries.cdi.container.test.AbstractTestBase;
 import org.apache.aries.cdi.container.test.MockCdiContainerAndComponents;
 import org.apache.aries.cdi.container.test.beans.Bar;
 import org.apache.aries.cdi.container.test.beans.Foo;
@@ -38,7 +39,7 @@ import org.osgi.service.cdi.ReferencePol
 import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
 import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
 
-public class Discovery_Ctor_dynamic_greedy_Test2 {
+public class Discovery_Ctor_dynamic_greedy_Test2 extends AbstractTestBase {
 
 	@Test
 	public void test_CtorCollectionFoo() throws Exception {

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_dynamic_reluctant_Test.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_dynamic_reluctant_Test.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_dynamic_reluctant_Test.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_dynamic_reluctant_Test.java Thu Sep 20 19:34:35 2018
@@ -21,6 +21,7 @@ import java.util.Collection;
 
 import org.apache.aries.cdi.container.internal.model.BeansModel;
 import org.apache.aries.cdi.container.internal.model.OSGiBean;
+import org.apache.aries.cdi.container.test.AbstractTestBase;
 import org.apache.aries.cdi.container.test.MockCdiContainerAndComponents;
 import org.apache.aries.cdi.container.test.beans.Bar;
 import org.apache.aries.cdi.container.test.beans.Foo;
@@ -38,7 +39,7 @@ import org.osgi.service.cdi.ReferencePol
 import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
 import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
 
-public class Discovery_Ctor_dynamic_reluctant_Test {
+public class Discovery_Ctor_dynamic_reluctant_Test extends AbstractTestBase {
 
 	@Test
 	public void test_CtorCollectionFoo() throws Exception {

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_static_greedy_Test.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_static_greedy_Test.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_static_greedy_Test.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_static_greedy_Test.java Thu Sep 20 19:34:35 2018
@@ -21,6 +21,7 @@ import java.util.Collection;
 
 import org.apache.aries.cdi.container.internal.model.BeansModel;
 import org.apache.aries.cdi.container.internal.model.OSGiBean;
+import org.apache.aries.cdi.container.test.AbstractTestBase;
 import org.apache.aries.cdi.container.test.MockCdiContainerAndComponents;
 import org.apache.aries.cdi.container.test.beans.Bar;
 import org.apache.aries.cdi.container.test.beans.Foo;
@@ -38,7 +39,7 @@ import org.osgi.service.cdi.ReferencePol
 import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
 import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
 
-public class Discovery_Ctor_static_greedy_Test {
+public class Discovery_Ctor_static_greedy_Test extends AbstractTestBase {
 
 	@Test
 	public void test_CtorListFoo() throws Exception {

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_static_reluctant_Test.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_static_reluctant_Test.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_static_reluctant_Test.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/container/Discovery_Ctor_static_reluctant_Test.java Thu Sep 20 19:34:35 2018
@@ -21,6 +21,7 @@ import java.util.Collection;
 
 import org.apache.aries.cdi.container.internal.model.BeansModel;
 import org.apache.aries.cdi.container.internal.model.OSGiBean;
+import org.apache.aries.cdi.container.test.AbstractTestBase;
 import org.apache.aries.cdi.container.test.MockCdiContainerAndComponents;
 import org.apache.aries.cdi.container.test.beans.Bar;
 import org.apache.aries.cdi.container.test.beans.Foo;
@@ -38,7 +39,7 @@ import org.osgi.service.cdi.ReferencePol
 import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
 import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
 
-public class Discovery_Ctor_static_reluctant_Test {
+public class Discovery_Ctor_static_reluctant_Test extends AbstractTestBase {
 
 	@Test
 	public void test_CtorListFoo() throws Exception {

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/MapsTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/MapsTest.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/MapsTest.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/MapsTest.java Thu Sep 20 19:34:35 2018
@@ -22,12 +22,13 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.aries.cdi.container.internal.util.Maps;
+import org.apache.aries.cdi.container.test.AbstractTestBase;
 import org.junit.Assert;
 import org.junit.Test;
 import org.osgi.service.cdi.annotations.BeanPropertyType;
 import org.osgi.service.cdi.annotations.Service;
 
-public class MapsTest {
+public class MapsTest extends AbstractTestBase {
 
 	@Retention(RetentionPolicy.RUNTIME)
 	@BeanPropertyType

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_BeanServiceObjectsTest.java Thu Sep 20 19:34:35 2018
@@ -24,6 +24,7 @@ import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.inject.Inject;
 
+import org.apache.aries.cdi.container.test.AbstractTestBase;
 import org.apache.aries.cdi.container.test.MockInjectionPoint;
 import org.apache.aries.cdi.container.test.beans.Foo;
 import org.junit.Test;
@@ -31,7 +32,7 @@ import org.osgi.service.cdi.annotations.
 import org.osgi.service.cdi.reference.BeanServiceObjects;
 import org.osgi.util.converter.TypeReference;
 
-public class ReferenceModel_BeanServiceObjectsTest {
+public class ReferenceModel_BeanServiceObjectsTest extends AbstractTestBase {
 
 	@Test(expected = IllegalArgumentException.class)
 	public void withoutServiceDefined_raw() throws Exception {

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_PropertiesTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_PropertiesTest.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_PropertiesTest.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_PropertiesTest.java Thu Sep 20 19:34:35 2018
@@ -14,9 +14,7 @@
 
 package org.apache.aries.cdi.container.internal.model;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 import java.lang.reflect.Type;
 import java.util.Collection;
@@ -27,14 +25,13 @@ import java.util.Optional;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.inject.Inject;
 
-import org.apache.aries.cdi.container.internal.model.CollectionType;
-import org.apache.aries.cdi.container.internal.model.ReferenceModel;
+import org.apache.aries.cdi.container.test.AbstractTestBase;
 import org.apache.aries.cdi.container.test.MockInjectionPoint;
 import org.junit.Test;
 import org.osgi.service.cdi.annotations.Reference;
 import org.osgi.util.converter.TypeReference;
 
-public class ReferenceModel_PropertiesTest {
+public class ReferenceModel_PropertiesTest extends AbstractTestBase {
 
 	@Test(expected = IllegalArgumentException.class)
 	public void withoutServiceDefined() throws Exception {

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceReferenceTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceReferenceTest.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceReferenceTest.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceReferenceTest.java Thu Sep 20 19:34:35 2018
@@ -14,9 +14,7 @@
 
 package org.apache.aries.cdi.container.internal.model;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 import java.lang.reflect.Type;
 import java.util.Collection;
@@ -25,8 +23,7 @@ import java.util.List;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.inject.Inject;
 
-import org.apache.aries.cdi.container.internal.model.CollectionType;
-import org.apache.aries.cdi.container.internal.model.ReferenceModel;
+import org.apache.aries.cdi.container.test.AbstractTestBase;
 import org.apache.aries.cdi.container.test.MockInjectionPoint;
 import org.apache.aries.cdi.container.test.beans.Foo;
 import org.junit.Test;
@@ -34,7 +31,7 @@ import org.osgi.framework.ServiceReferen
 import org.osgi.service.cdi.annotations.Reference;
 import org.osgi.util.converter.TypeReference;
 
-public class ReferenceModel_ServiceReferenceTest {
+public class ReferenceModel_ServiceReferenceTest extends AbstractTestBase {
 
 	@Test(expected = IllegalArgumentException.class)
 	public void withoutServiceDefined_raw() throws Exception {

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceTest.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceTest.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_ServiceTest.java Thu Sep 20 19:34:35 2018
@@ -14,9 +14,7 @@
 
 package org.apache.aries.cdi.container.internal.model;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 import java.lang.reflect.Type;
 import java.util.Collection;
@@ -27,15 +25,14 @@ import java.util.concurrent.Callable;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.inject.Inject;
 
-import org.apache.aries.cdi.container.internal.model.CollectionType;
-import org.apache.aries.cdi.container.internal.model.ReferenceModel;
+import org.apache.aries.cdi.container.test.AbstractTestBase;
 import org.apache.aries.cdi.container.test.MockInjectionPoint;
 import org.apache.aries.cdi.container.test.beans.Foo;
 import org.junit.Test;
 import org.osgi.service.cdi.annotations.Reference;
 import org.osgi.util.converter.TypeReference;
 
-public class ReferenceModel_ServiceTest {
+public class ReferenceModel_ServiceTest extends AbstractTestBase {
 
 	@Test
 	public void withoutServiceDefined_raw() throws Exception {

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_TupleTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_TupleTest.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_TupleTest.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ReferenceModel_TupleTest.java Thu Sep 20 19:34:35 2018
@@ -14,9 +14,7 @@
 
 package org.apache.aries.cdi.container.internal.model;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 import java.lang.reflect.Type;
 import java.util.Collection;
@@ -27,15 +25,14 @@ import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.inject.Inject;
 
-import org.apache.aries.cdi.container.internal.model.CollectionType;
-import org.apache.aries.cdi.container.internal.model.ReferenceModel;
+import org.apache.aries.cdi.container.test.AbstractTestBase;
 import org.apache.aries.cdi.container.test.MockInjectionPoint;
 import org.apache.aries.cdi.container.test.beans.Foo;
 import org.junit.Test;
 import org.osgi.service.cdi.annotations.Reference;
 import org.osgi.util.converter.TypeReference;
 
-public class ReferenceModel_TupleTest {
+public class ReferenceModel_TupleTest extends AbstractTestBase {
 
 	@Test(expected = IllegalArgumentException.class)
 	public void withoutServiceType_raw() throws Exception {

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerReferencesTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerReferencesTest.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerReferencesTest.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/phase/ContainerReferencesTest.java Thu Sep 20 19:34:35 2018
@@ -383,7 +383,11 @@ public class ContainerReferencesTest ext
 		assertEquals(SRs.id(sr3.getReference()), SRs.id(extendedReferenceDTO.serviceTracker.getServiceReference()));
 		assertEquals(foo, extendedReferenceDTO.serviceTracker.getService());
 
-		assertTrue(p1.timeout(200).getValue());
+		p1.timeout(200).then(s -> {
+				assertTrue(s.getValue());
+				return s;
+			},
+			f -> fail(f.getFailure().getMessage()));
 	}
 
 	@Test

Added: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/AbstractTestBase.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/AbstractTestBase.java?rev=1841503&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/AbstractTestBase.java (added)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/AbstractTestBase.java Thu Sep 20 19:34:35 2018
@@ -0,0 +1,22 @@
+package org.apache.aries.cdi.container.test;
+
+import org.junit.Rule;
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
+
+public class AbstractTestBase {
+
+	@Rule
+	public TestWatcher watchman= new TestWatcher() {
+		@Override
+		protected void failed(Throwable e, Description description) {
+			System.out.printf("--------- TEST: %s#%s [%s]%n", description.getTestClass(), description.getMethodName(), "FAILED");
+		}
+
+		@Override
+		protected void succeeded(Description description) {
+			System.out.printf("--------- TEST: %s#%s [%s]%n", description.getTestClass(), description.getMethodName(), "PASSED");
+		}
+	};
+
+}

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/BaseCDIBundleTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/BaseCDIBundleTest.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/BaseCDIBundleTest.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/test/BaseCDIBundleTest.java Thu Sep 20 19:34:35 2018
@@ -37,7 +37,7 @@ import org.osgi.namespace.extender.Exten
 import org.osgi.service.cdi.CDIConstants;
 import org.osgi.util.promise.PromiseFactory;
 
-public class BaseCDIBundleTest {
+public class BaseCDIBundleTest extends AbstractTestBase {
 
 	protected Bundle bundle;
 	protected CCR ccr;

Modified: aries/trunk/cdi/cdi-extender/src/test/resources/logback.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/resources/logback.xml?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/resources/logback.xml (original)
+++ aries/trunk/cdi/cdi-extender/src/test/resources/logback.xml Thu Sep 20 19:34:35 2018
@@ -25,7 +25,7 @@
 		</encoder>
 	</appender>
 
-	<logger name="org.apache.aries.cdi.container" level="DEBUG"/>
+	<logger name="org.apache.aries.cdi.container" level="ERROR"/>
 
 	<root level="ERROR">
 		<appender-ref ref="STDOUT" />

Modified: aries/trunk/cdi/cdi-itests/bnd.bnd
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd.bnd?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd.bnd (original)
+++ aries/trunk/cdi/cdi-itests/bnd.bnd Thu Sep 20 19:34:35 2018
@@ -46,8 +46,11 @@ p = org.apache.aries.cdi.test
 	tb8.jar,\
 	tb9.jar,\
 	tb10.jar,\
-	tb11.jar
-
+	tb11.jar,\
+	tb152_2.jar,\
+	tb152_2b.jar,\
+	tb152_3.jar,\
+	tb152_3_1.jar
 # Don't forget that we had to coax the `maven-jar-plugin` NOT to include the `sub-bundle` packages in
 # the root bundle:
 #

Added: aries/trunk/cdi/cdi-itests/bnd/tb152_2.bnd
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/tb152_2.bnd?rev=1841503&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/tb152_2.bnd (added)
+++ aries/trunk/cdi/cdi-itests/bnd/tb152_2.bnd Thu Sep 20 19:34:35 2018
@@ -0,0 +1,2 @@
+Export-Package: ${p}.tb152_2.*;-split-package:=first
+-cdiannotations: *
\ No newline at end of file

Added: aries/trunk/cdi/cdi-itests/bnd/tb152_2b.bnd
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/tb152_2b.bnd?rev=1841503&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/tb152_2b.bnd (added)
+++ aries/trunk/cdi/cdi-itests/bnd/tb152_2b.bnd Thu Sep 20 19:34:35 2018
@@ -0,0 +1,2 @@
+Export-Package: ${p}.tb152_2b.*;-split-package:=first
+-cdiannotations: *
\ No newline at end of file

Added: aries/trunk/cdi/cdi-itests/bnd/tb152_3.bnd
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/tb152_3.bnd?rev=1841503&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/tb152_3.bnd (added)
+++ aries/trunk/cdi/cdi-itests/bnd/tb152_3.bnd Thu Sep 20 19:34:35 2018
@@ -0,0 +1,2 @@
+Export-Package: ${p}.tb152_3.*;-split-package:=first
+-cdiannotations: *
\ No newline at end of file

Added: aries/trunk/cdi/cdi-itests/bnd/tb152_3_1.bnd
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/tb152_3_1.bnd?rev=1841503&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/tb152_3_1.bnd (added)
+++ aries/trunk/cdi/cdi-itests/bnd/tb152_3_1.bnd Thu Sep 20 19:34:35 2018
@@ -0,0 +1,2 @@
+Export-Package: ${p}.tb152_3_1.*;-split-package:=first
+-cdiannotations: *
\ No newline at end of file

Modified: aries/trunk/cdi/cdi-itests/cdi-executable.bndrun
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/cdi-executable.bndrun?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/cdi-executable.bndrun (original)
+++ aries/trunk/cdi/cdi-itests/cdi-executable.bndrun Thu Sep 20 19:34:35 2018
@@ -46,7 +46,7 @@
 	org.apache.felix.gogo.command;version='[1.0.2,1.0.3)',\
 	org.apache.felix.gogo.jline;version='[1.0.2,1.0.3)',\
 	org.apache.felix.gogo.runtime;version='[1.0.2,1.0.3)',\
-	org.apache.felix.http.jetty;version='[3.4.2,3.4.3)',\
+	org.apache.felix.http.jetty;version='[4.0.4,4.0.5)',\
 	org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\
 	org.apache.geronimo.specs.geronimo-annotation_1.3_spec;version='[1.1.0,1.1.1)',\
 	org.apache.geronimo.specs.geronimo-atinject_1.0_spec;version='[1.1.0,1.1.1)',\
@@ -57,7 +57,6 @@
 	org.jboss.weld.osgi-bundle;version='[3.0.5,3.0.6)',\
 	org.jline;version='[3.0.0,3.0.1)',\
 	org.osgi.service.cdi;version='[1.0.0,1.0.1)',\
-	org.osgi.service.event;version='[1.3.1,1.3.2)',\
 	org.osgi.util.function;version='[1.1.0,1.1.1)',\
 	org.osgi.util.promise;version='[1.1.0,1.1.1)'
 

Modified: aries/trunk/cdi/cdi-itests/itest.bndrun
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/itest.bndrun?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/itest.bndrun (original)
+++ aries/trunk/cdi/cdi-itests/itest.bndrun Thu Sep 20 19:34:35 2018
@@ -37,6 +37,7 @@
 	sun.misc
 
 -runbundles: \
+	biz.aQute.junit;version='[4.1.0,4.1.1)',\
 	javax.ejb-api;version='[3.2.0,3.2.1)',\
 	javax.transaction-api;version='[1.2.0,1.2.1)',\
 	jboss-classfilewriter;version='[1.2.3,1.2.4)',\
@@ -53,7 +54,7 @@
 	org.apache.felix.gogo.command;version='[1.0.2,1.0.3)',\
 	org.apache.felix.gogo.runtime;version='[1.0.2,1.0.3)',\
 	org.apache.felix.gogo.shell;version='[1.0.0,1.0.1)',\
-	org.apache.felix.http.jetty;version='[3.4.2,3.4.3)',\
+	org.apache.felix.http.jetty;version='[4.0.4,4.0.5)',\
 	org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\
 	org.apache.felix.scr;version='[2.1.0,2.1.1)',\
 	org.apache.geronimo.specs.geronimo-annotation_1.3_spec;version='[1.1.0,1.1.1)',\
@@ -66,11 +67,8 @@
 	org.jboss.logging.jboss-logging;version='[3.3.2,3.3.3)',\
 	org.jboss.weld.osgi-bundle;version='[3.0.5,3.0.6)',\
 	org.osgi.service.cdi;version='[1.0.0,1.0.1)',\
-	org.osgi.service.event;version='[1.3.1,1.3.2)',\
 	org.osgi.util.function;version='[1.1.0,1.1.1)',\
-	org.osgi.util.promise;version='[1.1.0,1.1.1)',\
-	osgi.enroute.hamcrest.wrapper;version='[1.3.0,1.3.1)',\
-	osgi.enroute.junit.wrapper;version='[4.12.0,4.12.1)'
+	org.osgi.util.promise;version='[1.1.0,1.1.1)'
 
 -resolve.effective: resolve, active
 -runee: JavaSE-1.8

Modified: aries/trunk/cdi/cdi-itests/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/pom.xml?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/pom.xml (original)
+++ aries/trunk/cdi/cdi-itests/pom.xml Thu Sep 20 19:34:35 2018
@@ -191,7 +191,7 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.http.jetty</artifactId>
-			<version>3.4.2</version>
+			<version>4.0.4</version>
 			<scope>runtime</scope>
 			<exclusions>
 				<exclusion>
@@ -239,14 +239,9 @@
 			<scope>runtime</scope>
 		</dependency>
 		<dependency>
-			<groupId>org.osgi</groupId>
-			<artifactId>osgi.enroute.junit.wrapper</artifactId>
-			<version>4.12.0</version>
-		</dependency>
-		<dependency>
-			<groupId>org.osgi</groupId>
-			<artifactId>osgi.enroute.hamcrest.wrapper</artifactId>
-			<version>1.3.0</version>
+			<groupId>biz.aQute.bnd</groupId>
+			<artifactId>biz.aQute.junit</artifactId>
+			<version>${bnd.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.osgi</groupId>

Modified: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedBundleScopedImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedBundleScopedImpl.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedBundleScopedImpl.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedBundleScopedImpl.java Thu Sep 20 19:34:35 2018
@@ -26,6 +26,7 @@ import org.osgi.framework.ServiceReferen
 import org.osgi.service.cdi.annotations.Reference;
 import org.osgi.service.cdi.annotations.Service;
 import org.osgi.service.cdi.annotations.SingleComponent;
+import org.osgi.service.log.Logger;
 
 @SingleComponent
 @Service({FieldInjectedBundleScopedImpl.class, FieldInjectedReference.class})
@@ -69,14 +70,17 @@ public class FieldInjectedBundleScopedIm
 		return service;
 	}
 
+	@Inject
+	Logger logger;
+
 	@PostConstruct
 	private void postConstructed() {
-		System.out.println("PostConstructed " + this);
+		logger.info("PostConstructed {}", this);
 	}
 
 	@PreDestroy
 	private void preDestroyed() {
-		System.out.println("PreDestroyed " + this);
+		logger.info("PreDestroyed {}", this);
 	}
 
 }
\ No newline at end of file

Modified: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedPrototypeScopedImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedPrototypeScopedImpl.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedPrototypeScopedImpl.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/FieldInjectedPrototypeScopedImpl.java Thu Sep 20 19:34:35 2018
@@ -26,6 +26,7 @@ import org.osgi.framework.ServiceReferen
 import org.osgi.service.cdi.annotations.Reference;
 import org.osgi.service.cdi.annotations.Service;
 import org.osgi.service.cdi.annotations.SingleComponent;
+import org.osgi.service.log.Logger;
 
 @SingleComponent
 @Service({FieldInjectedPrototypeScopedImpl.class, FieldInjectedReference.class})
@@ -69,14 +70,17 @@ public class FieldInjectedPrototypeScope
 		return service;
 	}
 
+	@Inject
+	Logger logger;
+
 	@PostConstruct
 	private void postConstructed() {
-		System.out.println("PostConstructed " + this);
+		logger.info("PostConstructed {}", this);
 	}
 
 	@PreDestroy
 	private void preDestroyed() {
-		System.out.println("PreDestroyed " + this);
+		logger.info("PreDestroyed {}", this);
 	}
 
 }
\ No newline at end of file

Modified: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceProperties.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceProperties.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceProperties.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceProperties.java Thu Sep 20 19:34:35 2018
@@ -26,6 +26,7 @@ import org.apache.aries.cdi.test.interfa
 import org.osgi.service.cdi.annotations.Reference;
 import org.osgi.service.cdi.annotations.Service;
 import org.osgi.service.cdi.annotations.SingleComponent;
+import org.osgi.service.log.Logger;
 
 @SingleComponent
 @Service({BeanService.class, Instance_ServiceProperties.class})
@@ -48,14 +49,17 @@ public class Instance_ServiceProperties
 	@Reference(Integer.class)
 	List<Map<String, Object>> _instance;
 
+	@Inject
+	Logger logger;
+
 	@PostConstruct
 	private void postConstructed() {
-		System.out.println("PostConstructed " + this);
+		logger.info("PostConstructed {}", this);
 	}
 
 	@PreDestroy
 	private void preDestroyed() {
-		System.out.println("PreDestroyed " + this);
+		logger.info("PreDestroyed {}", this);
 	}
 
 }

Modified: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/ServiceWithProperties.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/ServiceWithProperties.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/ServiceWithProperties.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/ServiceWithProperties.java Thu Sep 20 19:34:35 2018
@@ -29,6 +29,7 @@ import org.apache.aries.cdi.test.interfa
 import org.osgi.service.cdi.annotations.BeanPropertyType;
 import org.osgi.service.cdi.annotations.Service;
 import org.osgi.service.cdi.annotations.SingleComponent;
+import org.osgi.service.log.Logger;
 
 @SingleComponent
 @Service({ServiceWithProperties.class, BeanService.class})
@@ -81,14 +82,17 @@ public class ServiceWithProperties imple
 	@Inject
 	private PojoImpl _pojo;
 
+	@Inject
+	Logger logger;
+
 	@PostConstruct
 	private void postConstructed() {
-		System.out.println("PostConstructed " + this);
+		logger.info("PostConstructed {}", this);
 	}
 
 	@PreDestroy
 	private void preDestroyed() {
-		System.out.println("PreDestroyed " + this);
+		logger.info("PreDestroyed {}", this);
 	}
 
 }

Modified: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java?rev=1841503&r1=1841502&r2=1841503&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/AbstractTestCase.java Thu Sep 20 19:34:35 2018
@@ -36,7 +36,8 @@ import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Rule;
-import org.junit.rules.TestName;
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
 import org.osgi.annotation.bundle.Requirement;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -71,7 +72,18 @@ import org.osgi.util.tracker.ServiceTrac
 )
 public class AbstractTestCase {
 
-	@Rule public TestName testName = new TestName();
+	@Rule
+	public TestWatcher watchman= new TestWatcher() {
+		@Override
+		protected void failed(Throwable e, Description description) {
+			System.out.printf("--------- TEST: %s#%s [%s]%n", description.getTestClass(), description.getMethodName(), "FAILED");
+		}
+
+		@Override
+		protected void succeeded(Description description) {
+			System.out.printf("--------- TEST: %s#%s [%s]%n", description.getTestClass(), description.getMethodName(), "PASSED");
+		}
+	};
 
 	@BeforeClass
 	public static void beforeClass() throws Exception {
@@ -88,14 +100,8 @@ public class AbstractTestCase {
 		servicesBundle.uninstall();
 	}
 
-	void testHeader() {
-		System.out.println("--------- TEST: " + getClass().getSimpleName() + "#" +testName.getMethodName());
-	}
-
 	@Before
 	public void setUp() throws Exception {
-		testHeader();
-
 		cdiRuntime = runtimeTracker.waitForService(timeout);
 		cdiBundle = installBundle("basic-beans.jar");
 		cdiBundle.start();