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 2017/05/04 18:42:00 UTC

svn commit: r1793847 [3/3] - in /aries/trunk/cdi: cdi-extender/ cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/ cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/bean/ cdi-extender/src/main/java/org/apache/aries/cdi...

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ModelTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ModelTest.java?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ModelTest.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/model/ModelTest.java Thu May  4 18:41:59 2017
@@ -1,23 +1,23 @@
 package org.apache.aries.cdi.container.internal.model;
 
-import java.lang.reflect.Type;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
 import java.net.URL;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import org.osgi.service.cdi.CdiExtenderConstants;
-import org.osgi.service.cdi.annotations.PropertyType;
-import org.osgi.service.cdi.annotations.ServiceProperty;
-import org.osgi.util.converter.Converter;
-import org.osgi.util.converter.StandardConverter;
-
-import junit.framework.TestCase;
+import org.junit.Test;
+import org.osgi.service.cdi.CdiConstants;
 
-public class ModelTest extends TestCase {
+public class ModelTest {
 
+	@Test
 	public void testModelWithBeansOnly() throws Exception {
 		AbstractModelBuilder builder = getBuilder("OSGI-INF/cdi/beans-only.xml");
 		BeansModel beansModel = builder.build();
@@ -28,6 +28,7 @@ public class ModelTest extends TestCase
 		assertEquals("com.foo.FooImpl", beanClassNames.iterator().next());
 	}
 
+	@Test
 	public void testModelWithConfiguration() throws Exception {
 		AbstractModelBuilder builder = getBuilder("OSGI-INF/cdi/beans-configuration.xml");
 		BeansModel beansModel = builder.build();
@@ -38,11 +39,25 @@ public class ModelTest extends TestCase
 		assertEquals("com.foo.FooImpl", beanClassNames.iterator().next());
 
 		Collection<ConfigurationModel> configurationModels = beansModel.getConfigurationModels();
-		assertEquals(2, configurationModels.size());
-		ConfigurationModel configurationModel = configurationModels.iterator().next();
-		assertEquals("com.foo.FooImpl", configurationModel.getPid());
+		assertEquals(3, configurationModels.size());
+		Iterator<ConfigurationModel> iterator = configurationModels.iterator();
+
+		ConfigurationModel configurationModel = iterator.next();
+		assertArrayEquals(new String[] {"com.foo.FooImpl"}, configurationModel.pids());
+		assertEquals("com.foo.Config", configurationModel.beanClass());
+		assertEquals(true, configurationModel.required());
+
+		configurationModel = iterator.next();
+		assertArrayEquals(new String[] {"com.foo.other", "and.another"}, configurationModel.pids());
+		assertEquals("com.foo.Baz", configurationModel.beanClass());
+		assertEquals(true, configurationModel.required());
+
+		configurationModel = iterator.next();
+		assertArrayEquals(new String[] {"an.optional.configuration"}, configurationModel.pids());
+		assertEquals(false, configurationModel.required());
 	}
 
+	@Test
 	public void testModelWithReferences() throws Exception {
 		AbstractModelBuilder builder = getBuilder("OSGI-INF/cdi/beans-references.xml");
 		BeansModel beansModel = builder.build();
@@ -59,6 +74,7 @@ public class ModelTest extends TestCase
 		assertEquals("(objectClass=java.util.concurrent.Callable)", referenceModel.getTarget());
 	}
 
+	@Test
 	public void testModelWithServices() throws Exception {
 		AbstractModelBuilder builder = getBuilder("OSGI-INF/cdi/beans-services.xml");
 		BeansModel beansModel = builder.build();
@@ -74,88 +90,66 @@ public class ModelTest extends TestCase
 		List<String> provides = serviceModel.getProvides();
 		assertEquals(2, provides.size());
 		assertEquals("com.foo.Foo", provides.get(0));
-		ServiceProperty[] serviceProperties = serviceModel.getProperties();
-		assertEquals(18, serviceProperties.length);
+		String[] serviceProperties = serviceModel.getProperties();
+		assertEquals(33, serviceProperties.length);
+
+		assertEquals("foo:String=fum", serviceProperties[0]);
+		assertEquals("foo1:String=baz", serviceProperties[1]);
+		assertEquals("foo2:Long=345987643", serviceProperties[2]);
+		assertEquals("foo3:Double=3459.87643", serviceProperties[3]);
+		assertEquals("foo4:Float=3459.87", serviceProperties[4]);
+		assertEquals("foo5:Integer=724559", serviceProperties[5]);
+		assertEquals("foo6:Byte=127", serviceProperties[6]);
+		assertEquals("foo7:Character=X", serviceProperties[7]);
+		assertEquals("foo8:Boolean=true", serviceProperties[8]);
+		assertEquals("foo9:Short=32767", serviceProperties[9]);
+		assertEquals("foo11:String=frog", serviceProperties[10]);
+		assertEquals("foo11:String=drum", serviceProperties[11]);
+		assertEquals("foo12:Long=345987643", serviceProperties[12]);
+		assertEquals("foo12:Long=34", serviceProperties[13]);
+		assertEquals("foo13:Double=3459.87643", serviceProperties[14]);
+		assertEquals("foo13:Double=34.3456", serviceProperties[15]);
+		assertEquals("foo14:Float=3459.87", serviceProperties[16]);
+		assertEquals("foo14:Float=35.23", serviceProperties[17]);
+		assertEquals("foo15:Integer=724559", serviceProperties[18]);
+		assertEquals("foo15:Integer=345", serviceProperties[19]);
+		assertEquals("foo16:Byte=127", serviceProperties[20]);
+		assertEquals("foo16:Byte=23", serviceProperties[21]);
+		assertEquals("foo17:Character=X", serviceProperties[22]);
+		assertEquals("foo17:Character=t", serviceProperties[23]);
+		assertEquals("foo18:Boolean=true", serviceProperties[24]);
+		assertEquals("foo18:Boolean=false", serviceProperties[25]);
+		assertEquals("foo19:Short=32767", serviceProperties[26]);
+		assertEquals("foo19:Short=2345", serviceProperties[27]);
+		assertEquals("foo20:String=bar", serviceProperties[28]);
+		assertEquals("foo21:List<Short>=32767", serviceProperties[29]);
+		assertEquals("foo21:List<Short>=2345", serviceProperties[30]);
+		assertEquals("foo22:Set<Short>=32767", serviceProperties[31]);
+		assertEquals("foo22:Set<Short>=2345", serviceProperties[32]);
+	}
+
+	@Test
+	public void testModelWithAllDescriptors() throws Exception {
+		AbstractModelBuilder builder = getBuilder(null);
+		BeansModel beansModel = builder.build();
+		assertNotNull(beansModel);
 
-		assertEquals("foo", serviceProperties[0].key());
-		assertEquals(PropertyType.String, serviceProperties[0].type());
-		assertEquals("fum", getValue(serviceProperties[0]));
-
-		assertEquals("foo2", serviceProperties[1].key());
-		assertEquals(PropertyType.Long, serviceProperties[1].type());
-		assertEquals(345987643L, getValue(serviceProperties[1]));
-
-		assertEquals("foo3", serviceProperties[2].key());
-		assertEquals(PropertyType.Double, serviceProperties[2].type());
-		assertEquals(3459.87643D, getValue(serviceProperties[2]));
-
-		assertEquals("foo4", serviceProperties[3].key());
-		assertEquals(PropertyType.Float, serviceProperties[3].type());
-		assertEquals(3459.87F, getValue(serviceProperties[3]));
-
-		assertEquals("foo5", serviceProperties[4].key());
-		assertEquals(PropertyType.Integer, serviceProperties[4].type());
-		assertEquals(724559, getValue(serviceProperties[4]));
-
-		assertEquals("foo6", serviceProperties[5].key());
-		assertEquals(PropertyType.Byte, serviceProperties[5].type());
-		assertEquals(new Byte("127"), getValue(serviceProperties[5]));
-
-		assertEquals("foo7", serviceProperties[6].key());
-		assertEquals(PropertyType.Character, serviceProperties[6].type());
-		assertEquals(new Character('X'), getValue(serviceProperties[6]));
-
-		assertEquals("foo8", serviceProperties[7].key());
-		assertEquals(PropertyType.Boolean, serviceProperties[7].type());
-		assertEquals(true, getValue(serviceProperties[7]));
-
-		assertEquals("foo9", serviceProperties[8].key());
-		assertEquals(PropertyType.Short, serviceProperties[8].type());
-		assertEquals(new Short("32767"), getValue(serviceProperties[8]));
-
-		assertEquals("foo11", serviceProperties[9].key());
-		assertEquals(PropertyType.String_Array, serviceProperties[9].type());
-		assertTrue(Arrays.equals(new String[] {"frog", "drum"}, (String[])getValue(serviceProperties[9])));
-
-		assertEquals("foo12", serviceProperties[10].key());
-		assertEquals(PropertyType.Long_Array, serviceProperties[10].type());
-		assertTrue(Arrays.equals(new Long[] {345987643L, 34L}, (Long[])getValue(serviceProperties[10])));
-
-		assertEquals("foo13", serviceProperties[11].key());
-		assertEquals(PropertyType.Double_Array, serviceProperties[11].type());
-		assertTrue(Arrays.equals(new Double[] {3459.87643D, 34.3456D}, (Double[])getValue(serviceProperties[11])));
-
-		assertEquals("foo14", serviceProperties[12].key());
-		assertEquals(PropertyType.Float_Array, serviceProperties[12].type());
-		assertTrue(Arrays.equals(new Float[] {3459.87F, 35.23F}, (Float[])getValue(serviceProperties[12])));
-
-		assertEquals("foo15", serviceProperties[13].key());
-		assertEquals(PropertyType.Integer_Array, serviceProperties[13].type());
-		assertTrue(Arrays.equals(new Integer[] {724559, 345}, (Integer[])getValue(serviceProperties[13])));
-
-		assertEquals("foo16", serviceProperties[14].key());
-		assertEquals(PropertyType.Byte_Array, serviceProperties[14].type());
-		assertTrue(Arrays.equals(new Byte[] {127, 23}, (Byte[])getValue(serviceProperties[14])));
-
-		assertEquals("foo17", serviceProperties[15].key());
-		assertEquals(PropertyType.Character_Array, serviceProperties[15].type());
-		assertTrue(Arrays.equals(new Character[] {'X', 't'}, (Character[])getValue(serviceProperties[15])));
-
-		assertEquals("foo18", serviceProperties[16].key());
-		assertEquals(PropertyType.Boolean_Array, serviceProperties[16].type());
-		assertTrue(Arrays.equals(new Boolean[] {true, false}, (Boolean[])getValue(serviceProperties[16])));
-
-		assertEquals("foo19", serviceProperties[17].key());
-		assertEquals(PropertyType.Short_Array, serviceProperties[17].type());
-		assertTrue(Arrays.equals(new Short[] {32767, 2345}, (Short[])getValue(serviceProperties[17])));
+		Collection<String> beanClassNames = beansModel.getBeanClassNames();
+		assertEquals(2, beanClassNames.size());
+		assertEquals("com.foo.FooImpl", beanClassNames.iterator().next());
 	}
 
 	AbstractModelBuilder getBuilder(final String osgiBeansFile) {
 		return new AbstractModelBuilder() {
 
 			@Override
-			Collection<String> getResources(String descriptorString) {
-				return null;
+			List<String> getDefaultResources() {
+				return Arrays.asList(
+						"OSGI-INF/cdi/beans-configuration.xml",
+						"OSGI-INF/cdi/beans-only.xml",
+						"OSGI-INF/cdi/beans-references.xml",
+						"OSGI-INF/cdi/beans-services.xml"
+					);
 			}
 
 			@Override
@@ -170,18 +164,14 @@ public class ModelTest extends TestCase
 
 			@Override
 			Map<String, Object> getAttributes() {
+				if (osgiBeansFile == null) {
+					return Collections.emptyMap();
+				}
+
 				return Collections.singletonMap(
-					CdiExtenderConstants.REQUIREMENT_OSGI_BEANS_ATTRIBUTE, osgiBeansFile);
+					CdiConstants.REQUIREMENT_OSGI_BEANS_ATTRIBUTE, Arrays.asList(osgiBeansFile));
 			}
 		};
 	}
 
-	Object getValue(ServiceProperty serviceProperty) {
-		Type type = serviceProperty.type().getType();
-		String[] value = serviceProperty.value();
-		return _converter.convert(value).to(type);
-	}
-
-	private static final Converter _converter = new StandardConverter();
-
 }

Modified: aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-configuration.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-configuration.xml?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-configuration.xml (original)
+++ aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-configuration.xml Thu May  4 18:41:59 2017
@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<cdi:beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
-	<bean class="com.foo.FooImpl" />
-	<bean class="com.foo.BarImpl" />
-	<configuration pid="com.foo.FooImpl" />
-	<configuration pid="com.foo.other" />
-</cdi:beans>
\ No newline at end of file
+<beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
+	<cdi:bean class="com.foo.FooImpl" />
+	<cdi:bean class="com.foo.BarImpl" />
+	<cdi:configuration beanClass="com.foo.Config" pid="com.foo.FooImpl" />
+	<cdi:configuration beanClass="com.foo.Baz" pid="com.foo.other and.another" />
+	<cdi:configuration beanClass="com.foo.Fum" required="false" pid="an.optional.configuration" />
+</beans>
\ No newline at end of file

Modified: aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-only.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-only.xml?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-only.xml (original)
+++ aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-only.xml Thu May  4 18:41:59 2017
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<cdi:beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
-	<bean class="com.foo.FooImpl" />
-	<bean class="com.foo.BarImpl" />
-</cdi:beans>
\ No newline at end of file
+<beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
+	<cdi:bean class="com.foo.FooImpl" />
+	<cdi:bean class="com.foo.BarImpl" />
+</beans>
\ No newline at end of file

Modified: aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-references.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-references.xml?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-references.xml (original)
+++ aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-references.xml Thu May  4 18:41:59 2017
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<cdi:beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
-	<bean class="com.foo.FooImpl" />
-	<bean class="com.foo.BarImpl" />
-	<reference beanClass="java.util.concurrent.Callable" target="(objectClass=java.util.concurrent.Callable)" />
-	<reference beanClass="java.util.Map" target="(objectClass=java.util.Map)" />
-</cdi:beans>
\ No newline at end of file
+<beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
+	<cdi:bean class="com.foo.FooImpl" />
+	<cdi:bean class="com.foo.BarImpl" />
+	<cdi:reference beanClass="java.util.concurrent.Callable" target="(objectClass=java.util.concurrent.Callable)" />
+	<cdi:reference beanClass="java.util.Map" target="(objectClass=java.util.Map)" />
+</beans>
\ No newline at end of file

Modified: aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-services.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-services.xml?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-services.xml (original)
+++ aries/trunk/cdi/cdi-extender/src/test/resources/OSGI-INF/cdi/beans-services.xml Thu May  4 18:41:59 2017
@@ -1,56 +1,90 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<cdi:beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
-	<bean class="com.foo.FooImpl">
+<beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
+	<cdi:bean class="com.foo.FooImpl">
 		<service>
 			<provide interface="com.foo.Foo" />
 			<provide interface="java.lang.Clonable" />
-			<property name="foo" type="String" value="fum" />
-			<property name="foo2" type="Long" value="345987643" />
-			<property name="foo3" type="Double" value="3459.87643" />
-			<property name="foo4" type="Float" value="3459.87" />
-			<property name="foo5" type="Integer" value="724559" />
-			<property name="foo6" type="Byte" value="127" />
-			<property name="foo7" type="Character" value="X" />
-			<property name="foo8" type="Boolean" value="true" />
-			<property name="foo9" type="Short" value="32767" />
-			<property name="foo11" type="String">
-				frog
-				drum
-			</property>
-			<property name="foo12" type="Long">
-				345987643
-				34
-			</property>
-			<property name="foo13" type="Double">
-				3459.87643
-				34.3456
-			</property>
-			<property name="foo14" type="Float">
-				3459.87
-				35.23
-			</property>
-			<property name="foo15" type="Integer">
-				724559
-				345
-			</property>
-			<property name="foo16" type="Byte">
-				127
-				23
-			</property>
-			<property name="foo17" type="Character">
-				X
-				t
-			</property>
-			<property name="foo18" type="Boolean">
-				true
-				false
-			</property>
-			<property name="foo19" type="Short">
-				32767
-				2345
+			<property name="foo" value-type="String" value="fum" />
+			<property name="foo1" value="baz" />
+			<property name="foo2" value-type="Long" value="345987643" />
+			<property name="foo3" value-type="Double" value="3459.87643" />
+			<property name="foo4" value-type="Float" value="3459.87" />
+			<property name="foo5" value-type="Integer" value="724559" />
+			<property name="foo6" value-type="Byte" value="127" />
+			<property name="foo7" value-type="Character" value="X" />
+			<property name="foo8" value-type="Boolean" value="true" />
+			<property name="foo9" value-type="Short" value="32767" />
+			<property name="foo11">
+				<array>
+					<value>frog</value>
+					<value>drum</value>
+				</array>
+			</property>
+			<property name="foo12" value-type="Long">
+				<array>
+					<value>345987643</value>
+					<value>34</value>
+				</array>
+			</property>
+			<property name="foo13" value-type="Double">
+				<array>
+					<value>3459.87643</value>
+					<value>34.3456</value>
+				</array>
+			</property>
+			<property name="foo14" value-type="Float">
+				<array>
+					<value>3459.87</value>
+					<value>35.23</value>
+				</array>
+			</property>
+			<property name="foo15" value-type="Integer">
+				<array>
+					<value>724559</value>
+					<value>345</value>
+				</array>
+			</property>
+			<property name="foo16" value-type="Byte">
+				<array>
+					<value>127</value>
+					<value>23</value>
+				</array>
+			</property>
+			<property name="foo17" value-type="Character">
+				<array>
+					<value>X</value>
+					<value>t</value>
+				</array>
+			</property>
+			<property name="foo18" value-type="Boolean">
+				<array>
+					<value>true</value>
+					<value>false</value>
+				</array>
+			</property>
+			<property name="foo19" value-type="Short">
+				<array>
+					<value>32767</value>
+					<value>2345</value>
+				</array>
+			</property>
+			<property name="foo20" value-type="String">
+				bar
+			</property>
+			<property name="foo21" value-type="Short">
+				<list>
+					<value>32767</value>
+					<value>2345</value>
+				</list>
+			</property>
+			<property name="foo22" value-type="Short">
+				<set>
+					<value>32767</value>
+					<value>2345</value>
+				</set>
 			</property>
 		</service>
-	</bean>
-	<bean class="com.foo.BarImpl" />
-</cdi:beans>
\ No newline at end of file
+	</cdi:bean>
+	<cdi:bean class="com.foo.BarImpl" />
+</beans>
\ No newline at end of file

Modified: aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/Activator.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/Activator.java?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/Activator.java (original)
+++ aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/Activator.java Thu May  4 18:41:59 2017
@@ -23,7 +23,7 @@ import javax.naming.spi.ObjectFactory;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.cdi.CdiExtenderConstants;
+import org.osgi.service.cdi.CdiConstants;
 import org.osgi.service.jndi.JNDIConstants;
 
 public class Activator implements BundleActivator {
@@ -31,27 +31,20 @@ public class Activator implements Bundle
 	@Override
 	public void start(BundleContext bundleContext) throws Exception {
 		Dictionary<String, Object> properties = new Hashtable<>();
-		properties.put(CdiExtenderConstants.CDI_EXTENSION, "jndi");
 
-		JndiExtensionFactory jndiExtensionFactory = new JndiExtensionFactory();
-
-		_jndiExtensionFactoryRegistration = bundleContext.registerService(
-			Extension.class, jndiExtensionFactory, properties);
-
-		properties = new Hashtable<>();
+		properties.put(CdiConstants.CDI_EXTENSION_NAMESPACE, "jndi");
 		properties.put(JNDIConstants.JNDI_URLSCHEME, "java");
 
-		_objectFactoryRegistration = bundleContext.registerService(
-			ObjectFactory.class, new JndiObjectFactory(jndiExtensionFactory), properties);
+		_serviceRegistration = bundleContext.registerService(
+			new String[] {Extension.class.getName(), ObjectFactory.class.getName()},
+			new JndiExtensionFactory(), properties);
 	}
 
 	@Override
 	public void stop(BundleContext bundleContext) throws Exception {
-		_objectFactoryRegistration.unregister();
-		_jndiExtensionFactoryRegistration.unregister();
+		_serviceRegistration.unregister();
 	}
 
-	private ServiceRegistration<?> _jndiExtensionFactoryRegistration;
-	private ServiceRegistration<?> _objectFactoryRegistration;
+	private ServiceRegistration<?> _serviceRegistration;
 
 }

Modified: aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtension.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtension.java?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtension.java (original)
+++ aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtension.java Thu May  4 18:41:59 2017
@@ -1,20 +1,32 @@
 package org.apache.aries.cdi.extension.jndi;
 
+import java.util.Hashtable;
+
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.spi.AfterDeploymentValidation;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.Extension;
+import javax.naming.Name;
+import javax.naming.spi.ObjectFactory;
+
+public class JndiExtension implements Extension, ObjectFactory {
+
+	@Override
+	public Object getObjectInstance(
+			Object obj, Name name, javax.naming.Context context, Hashtable<?, ?> environment)
+		throws Exception {
 
-public class JndiExtension implements Extension {
+		if (obj == null) {
+			return _jndiContext;
+		}
 
-	public BeanManager getBeanManager() {
-		return _beanManager;
+		return null;
 	}
 
 	void afterDeploymentValidation(@Observes AfterDeploymentValidation adv, BeanManager beanManager) {
-		_beanManager = beanManager;
+		_jndiContext = new JndiContext(beanManager);
 	}
 
-	private BeanManager _beanManager;
+	private JndiContext _jndiContext;
 
 }

Modified: aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtensionFactory.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtensionFactory.java?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtensionFactory.java (original)
+++ aries/trunk/cdi/cdi-extension-jndi/src/main/java/org/apache/aries/cdi/extension/jndi/JndiExtensionFactory.java Thu May  4 18:41:59 2017
@@ -1,65 +1,19 @@
 package org.apache.aries.cdi.extension.jndi;
 
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import javax.enterprise.inject.spi.Extension;
-import javax.naming.Name;
-import javax.naming.spi.ObjectFactory;
-
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceFactory;
 import org.osgi.framework.ServiceRegistration;
 
-public class JndiExtensionFactory implements ServiceFactory<Extension> {
+public class JndiExtensionFactory implements ServiceFactory {
 
 	@Override
-	public Extension getService(Bundle bundle, ServiceRegistration<Extension> registration) {
-		JndiExtension jndiExtension = new JndiExtension();
-		_map.put(bundle, jndiExtension);
-		return jndiExtension;
+	public Object getService(Bundle bundle, ServiceRegistration registration) {
+		return new JndiExtension();
 	}
 
 	@Override
 	public void ungetService(
-		Bundle bundle, ServiceRegistration<Extension> registration, Extension extension) {
-
-		_map.remove(bundle);
-	}
-
-	ObjectFactory getObjectFactory(Bundle bundle) {
-		JndiExtension jndiExtension = _map.get(bundle);
-
-		if (jndiExtension == null) {
-			return null;
-		}
-
-		return new InnerObjectFactory(new JndiContext(jndiExtension.getBeanManager()));
-	}
-
-	private final Map<Bundle, JndiExtension> _map = new ConcurrentHashMap<>();
-
-	private class InnerObjectFactory implements ObjectFactory {
-
-		public InnerObjectFactory(JndiContext jndiContext) {
-			_jndiContext = jndiContext;
-		}
-
-		@Override
-		public Object getObjectInstance(
-				Object obj, Name name, javax.naming.Context context, Hashtable<?, ?> environment)
-			throws Exception {
-
-			if (obj == null) {
-				return _jndiContext;
-			}
-
-			return null;
-		}
-
-		private final JndiContext _jndiContext;
-
+		Bundle bundle, ServiceRegistration registration, Object extension) {
 	}
 
 }

Modified: aries/trunk/cdi/cdi-itests/bnd.bnd
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd.bnd?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd.bnd (original)
+++ aries/trunk/cdi/cdi-itests/bnd.bnd Thu May  4 18:41:59 2017
@@ -25,7 +25,8 @@ p = org.apache.aries.cdi.test
 	tb1.jar,\
 	tb2.jar,\
 	tb3.jar,\
-	tb4.jar
+	tb4.jar,\
+	tb5.jar
 
 # Don't forget that we had to coax the `maven-jar-plugin` NOT to include the `sub-bundle` packages in
 # the root bundle:

Modified: aries/trunk/cdi/cdi-itests/bnd/basic-beans.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/basic-beans.xml?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/basic-beans.xml (original)
+++ aries/trunk/cdi/cdi-itests/bnd/basic-beans.xml Thu May  4 18:41:59 2017
@@ -1,19 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<cdi:beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
-	<bean class="org.apache.aries.cdi.test.beans.BeanWithReference" />
-	<bean class="org.apache.aries.cdi.test.beans.BundleContextBean" />
-	<bean class="org.apache.aries.cdi.test.beans.CdiEventObserver" />
-	<bean class="org.apache.aries.cdi.test.beans.ConstructorInjectedService" />
-	<bean class="org.apache.aries.cdi.test.beans.FieldInjectedBundleScopedImpl" />
-	<bean class="org.apache.aries.cdi.test.beans.FieldInjectedPrototypeScopedImpl" />
-	<bean class="org.apache.aries.cdi.test.beans.FieldInjectedService" />
-	<bean class="org.apache.aries.cdi.test.beans.InstanceBean" />
-	<bean class="org.apache.aries.cdi.test.beans.InstanceCardinality0Bean" />
-	<bean class="org.apache.aries.cdi.test.beans.InstanceOrderBean" />
-	<bean class="org.apache.aries.cdi.test.beans.InstancePropertiesBean" />
-	<bean class="org.apache.aries.cdi.test.beans.InstanceServiceReferenceBean" />
-	<bean class="org.apache.aries.cdi.test.beans.MethodInjectedService" />
-	<bean class="org.apache.aries.cdi.test.beans.PojoImpl" />
-	<bean class="org.apache.aries.cdi.test.beans.ServiceWithProperties" />
-</cdi:beans>
\ No newline at end of file
+<beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
+	<cdi:bean class="org.apache.aries.cdi.test.beans.BeanWithReference" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.BundleContextBean" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.CdiEventObserver" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.ConstructorInjectedService" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.FieldInjectedBundleScopedImpl" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.FieldInjectedPrototypeScopedImpl" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.FieldInjectedService" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.Instance_Optional" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.Instance_ServiceProperties" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.Instance_ServiceReference" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.MethodInjectedService" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.PojoImpl" />
+	<cdi:bean class="org.apache.aries.cdi.test.beans.ServiceWithProperties" />
+</beans>
\ No newline at end of file

Modified: aries/trunk/cdi/cdi-itests/bnd/tb1-beans.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/tb1-beans.xml?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/tb1-beans.xml (original)
+++ aries/trunk/cdi/cdi-itests/bnd/tb1-beans.xml Thu May  4 18:41:59 2017
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<cdi:beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
-	<bean class="org.apache.aries.cdi.test.tb1.BeanImpl" />
-	<reference
+<beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
+	<cdi:bean class="org.apache.aries.cdi.test.tb1.BeanImpl" />
+	<cdi:reference
 		beanClass="org.apache.aries.cdi.test.interfaces.Pojo"
 		target="(objectClass=org.apache.aries.cdi.test.interfaces.Pojo)" />
-</cdi:beans>
\ No newline at end of file
+</beans>
\ No newline at end of file

Modified: aries/trunk/cdi/cdi-itests/bnd/tb2-beans.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/tb2-beans.xml?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/tb2-beans.xml (original)
+++ aries/trunk/cdi/cdi-itests/bnd/tb2-beans.xml Thu May  4 18:41:59 2017
@@ -1,9 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<cdi:beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
-	<bean class="org.apache.aries.cdi.test.tb2.PojoImpl">
-		<service>
-			<provide interface="org.apache.aries.cdi.test.interfaces.Pojo" />
-		</service>
-	</bean>
-</cdi:beans>
\ No newline at end of file
+<cdi:bean class="org.apache.aries.cdi.test.tb2.PojoImpl" xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
+	<service>
+		<provide interface="org.apache.aries.cdi.test.interfaces.Pojo" />
+	</service>
+</cdi:bean>

Modified: aries/trunk/cdi/cdi-itests/bnd/tb3-beans.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/tb3-beans.xml?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/tb3-beans.xml (original)
+++ aries/trunk/cdi/cdi-itests/bnd/tb3-beans.xml Thu May  4 18:41:59 2017
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<cdi:beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
-	<bean class="org.apache.aries.cdi.test.tb3.ConfigurationBeanA" />
-</cdi:beans>
\ No newline at end of file
+<beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
+	<cdi:bean class="org.apache.aries.cdi.test.tb3.ConfigurationBeanA" />
+	<cdi:bean class="org.apache.aries.cdi.test.tb3.ConfigurationBeanB" />
+</beans>

Modified: aries/trunk/cdi/cdi-itests/bnd/tb4-beans.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/tb4-beans.xml?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/tb4-beans.xml (original)
+++ aries/trunk/cdi/cdi-itests/bnd/tb4-beans.xml Thu May  4 18:41:59 2017
@@ -1,10 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<cdi:beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
-	<bean class="org.apache.aries.cdi.test.tb4.CallableImpl">
-		<service>
-			<provide interface="java.util.concurrent.Callable" />
-			<property name="a.service.property" value="The Value" type="String"/>
-		</service>
-	</bean>
-</cdi:beans>
\ No newline at end of file
+<cdi:bean class="org.apache.aries.cdi.test.tb4.CallableImpl" xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
+	<service>
+		<property name="a.service.property" value="The Value" type="String"/>
+		<provide interface="java.util.concurrent.Callable" />
+	</service>
+</cdi:bean>

Added: aries/trunk/cdi/cdi-itests/bnd/tb5-beans.xml
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/tb5-beans.xml?rev=1793847&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/tb5-beans.xml (added)
+++ aries/trunk/cdi/cdi-itests/bnd/tb5-beans.xml Thu May  4 18:41:59 2017
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<beans xmlns:cdi="http://www.osgi.org/xmlns/cdi/v1.0.0">
+	<cdi:bean class="org.apache.aries.cdi.test.tb5.ConfigurationBeanC" />
+</beans>

Added: aries/trunk/cdi/cdi-itests/bnd/tb5.bnd
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/bnd/tb5.bnd?rev=1793847&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/bnd/tb5.bnd (added)
+++ aries/trunk/cdi/cdi-itests/bnd/tb5.bnd Thu May  4 18:41:59 2017
@@ -0,0 +1,3 @@
+Export-Package: ${p}.tb5.*
+Require-Capability: osgi.extender;filter:='(osgi.extender=osgi.cdi)'
+-includeresource: OSGI-INF/cdi/osgi-beans.xml=bnd/tb5-beans.xml
\ No newline at end of file

Modified: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/BeanWithReference.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/BeanWithReference.java?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/BeanWithReference.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/BeanWithReference.java Thu May  4 18:41:59 2017
@@ -5,17 +5,16 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import javax.enterprise.inject.Default;
 import javax.inject.Inject;
 import javax.inject.Qualifier;
 
 import org.apache.aries.cdi.test.interfaces.BundleScoped;
 import org.osgi.service.cdi.annotations.Reference;
-import org.osgi.service.cdi.annotations.ReferenceFilter;
 
 public class BeanWithReference {
 
 	@Qualifier
-	@ReferenceFilter
 	@Retention(value = RetentionPolicy.RUNTIME)
 	@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR })
 	public @interface ComplexEnoughKey {
@@ -23,7 +22,6 @@ public class BeanWithReference {
 	}
 
 	@Qualifier
-	@ReferenceFilter
 	@Retention(value = RetentionPolicy.RUNTIME)
 	@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR })
 	public @interface ComplexAnnotation {
@@ -31,10 +29,19 @@ public class BeanWithReference {
 		int fo_fum();
 	}
 
+	@Qualifier
+	@Retention(value = RetentionPolicy.RUNTIME)
+	@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR })
+	public @interface SimpleAnnotation {
+		String value();
+	}
+
 	@ComplexEnoughKey(complex_enough_key= "fum")
 	@ComplexAnnotation(fee_fi = "fee", fo_fum = 23)
+	@SimpleAnnotation("blah")
 	@Inject
 	@Reference
+	@Default
 	BundleScoped bundleScoped;
 
 }

Copied: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_Optional.java (from r1792762, aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/InstanceCardinality0Bean.java)
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_Optional.java?p2=aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_Optional.java&p1=aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/InstanceCardinality0Bean.java&r1=1792762&r2=1793847&rev=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/InstanceCardinality0Bean.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_Optional.java Thu May  4 18:41:59 2017
@@ -8,13 +8,12 @@ import javax.inject.Inject;
 import javax.inject.Singleton;
 
 import org.apache.aries.cdi.test.interfaces.BeanService;
-import org.osgi.service.cdi.annotations.MinCardinality;
 import org.osgi.service.cdi.annotations.Reference;
 import org.osgi.service.cdi.annotations.Service;
 
-@Service(type = {BeanService.class, InstanceCardinality0Bean.class})
+@Service(type = {BeanService.class, Instance_Optional.class})
 @Singleton
-public class InstanceCardinality0Bean implements BeanService<Callable<String>> {
+public class Instance_Optional implements BeanService<Callable<String>> {
 
 	@Override
 	public String doSomething() {
@@ -33,7 +32,6 @@ public class InstanceCardinality0Bean im
 	}
 
 	@Inject
-	@MinCardinality(0)
 	@Reference
 	Instance<Callable<String>> _instance;
 

Copied: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceProperties.java (from r1792762, aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/InstancePropertiesBean.java)
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceProperties.java?p2=aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceProperties.java&p1=aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/InstancePropertiesBean.java&r1=1792762&r2=1793847&rev=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/InstancePropertiesBean.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceProperties.java Thu May  4 18:41:59 2017
@@ -12,9 +12,9 @@ import org.apache.aries.cdi.test.interfa
 import org.osgi.service.cdi.annotations.Reference;
 import org.osgi.service.cdi.annotations.Service;
 
-@Service(type = {BeanService.class, InstancePropertiesBean.class})
+@Service(type = {BeanService.class, Instance_ServiceProperties.class})
 @Singleton
-public class InstancePropertiesBean implements BeanService<Map<String, Object>> {
+public class Instance_ServiceProperties implements BeanService<Map<String, Object>> {
 
 	@Override
 	public String doSomething() {

Copied: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceReference.java (from r1792762, aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/InstanceServiceReferenceBean.java)
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceReference.java?p2=aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceReference.java&p1=aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/InstanceServiceReferenceBean.java&r1=1792762&r2=1793847&rev=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/InstanceServiceReferenceBean.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/beans/Instance_ServiceReference.java Thu May  4 18:41:59 2017
@@ -12,10 +12,10 @@ import org.osgi.framework.ServiceReferen
 import org.osgi.service.cdi.annotations.Reference;
 import org.osgi.service.cdi.annotations.Service;
 
-@Service(type = {BeanService.class, InstanceServiceReferenceBean.class})
+@Service(type = {BeanService.class, Instance_ServiceReference.class})
 @Singleton
 @SuppressWarnings("rawtypes")
-public class InstanceServiceReferenceBean implements BeanService<ServiceReference> {
+public class Instance_ServiceReference implements BeanService<ServiceReference> {
 
 	@Override
 	public String doSomething() {

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=1793847&r1=1793846&r2=1793847&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 May  4 18:41:59 2017
@@ -12,51 +12,119 @@ import javax.inject.Singleton;
 import org.apache.aries.cdi.test.beans.ServiceWithProperties.MoreProperties;
 import org.apache.aries.cdi.test.interfaces.BeanService;
 import org.apache.aries.cdi.test.interfaces.Pojo;
-import org.osgi.service.cdi.annotations.PropertyType;
 import org.osgi.service.cdi.annotations.Service;
-import org.osgi.service.cdi.annotations.ServiceProperty;
 
 @Service(
-	properties = {
-		@ServiceProperty(key = "test.key.b1", value = "test.value.b1"),
-		@ServiceProperty(key = "test.key.b2", value = "test.value.b2"),
-
-		@ServiceProperty(key = "p.Boolean", value = "true", type = PropertyType.Boolean),
-		@ServiceProperty(key = "p.Boolean.array", value = {"true","false"}, type = PropertyType.Boolean_Array),
-		@ServiceProperty(key = "p.Boolean.list", value = {"false","true"}, type = PropertyType.Boolean_List),
-		@ServiceProperty(key = "p.Boolean.set", value = {"true", "true", "false"}, type = PropertyType.Boolean_Set),
-		@ServiceProperty(key = "p.Byte", value = "2", type = PropertyType.Byte),
-		@ServiceProperty(key = "p.Byte.array", value = {"2","34"}, type = PropertyType.Byte_Array),
-		@ServiceProperty(key = "p.Byte.list", value = {"34","2"}, type = PropertyType.Byte_List),
-		@ServiceProperty(key = "p.Byte.set", value = {"34","34","2"}, type = PropertyType.Byte_Set),
-		@ServiceProperty(key = "p.Character", value = "C", type = PropertyType.Character),
-		@ServiceProperty(key = "p.Character.array", value = {"C","D"}, type = PropertyType.Character_Array),
-		@ServiceProperty(key = "p.Character.list", value = {"D","C"}, type = PropertyType.Character_List),
-		@ServiceProperty(key = "p.Character.set", value = {"D","D","C"}, type = PropertyType.Character_Set),
-		@ServiceProperty(key = "p.Double", value = "2.5", type = PropertyType.Double),
-		@ServiceProperty(key = "p.Double.array", value = {"2.5","45.678"}, type = PropertyType.Double_Array),
-		@ServiceProperty(key = "p.Double.list", value = {"45.678","2.5"}, type = PropertyType.Double_List),
-		@ServiceProperty(key = "p.Double.set", value = {"45.678","45.678","2.5"}, type = PropertyType.Double_Set),
-		@ServiceProperty(key = "p.Float", value = "3.4", type = PropertyType.Float),
-		@ServiceProperty(key = "p.Float.array", value = {"3.4","78.9"}, type = PropertyType.Float_Array),
-		@ServiceProperty(key = "p.Float.list", value = {"78.9","3.4"}, type = PropertyType.Float_List),
-		@ServiceProperty(key = "p.Float.set", value = {"78.9","78.9","3.4"}, type = PropertyType.Float_Set),
-		@ServiceProperty(key = "p.Integer", value = "5", type = PropertyType.Integer),
-		@ServiceProperty(key = "p.Integer.array", value = {"5","34567"}, type = PropertyType.Integer_Array),
-		@ServiceProperty(key = "p.Integer.list", value = {"34567","5"}, type = PropertyType.Integer_List),
-		@ServiceProperty(key = "p.Integer.set", value = {"34567","34567","5"}, type = PropertyType.Integer_Set),
-		@ServiceProperty(key = "p.Long", value = "7", type = PropertyType.Long),
-		@ServiceProperty(key = "p.Long.array", value = {"7","7789654"}, type = PropertyType.Long_Array),
-		@ServiceProperty(key = "p.Long.list", value = {"7789654","7"}, type = PropertyType.Long_List),
-		@ServiceProperty(key = "p.Long.set", value = {"7789654","7789654","7"}, type = PropertyType.Long_Set),
-		@ServiceProperty(key = "p.Short", value = "25", type = PropertyType.Short),
-		@ServiceProperty(key = "p.Short.array", value = {"25","196"}, type = PropertyType.Short_Array),
-		@ServiceProperty(key = "p.Short.list", value = {"196","25"}, type = PropertyType.Short_List),
-		@ServiceProperty(key = "p.Short.set", value = {"196","196","25"}, type = PropertyType.Short_Set),
-		@ServiceProperty(key = "p.String", value = "black", type = PropertyType.String),
-		@ServiceProperty(key = "p.String.array", value = {"black","green"}, type = PropertyType.String_Array),
-		@ServiceProperty(key = "p.String.list", value = {"green","black"}, type = PropertyType.String_List),
-		@ServiceProperty(key = "p.String.set", value = {"green","green","black"}, type = PropertyType.String_Set)
+	property = {
+		"test.key.b1=test.value.b1",
+		"test.key.b2=test.value.b2",
+
+		"p.Boolean:Boolean=true",
+		"p.Boolean.array:Boolean=true",
+		"p.Boolean.array:Boolean=false",
+
+		"p.Boolean.list:List<Boolean>=false",
+		"p.Boolean.list:List<Boolean>=true",
+
+		"p.Boolean.set:Set<Boolean>=true",
+		"p.Boolean.set:Set<Boolean>=true",
+		"p.Boolean.set:Set<Boolean>=false",
+
+		"p.Byte:Byte=2",
+
+		"p.Byte.array:Byte=2",
+		"p.Byte.array:Byte=34",
+
+		"p.Byte.list:List<Byte>=34",
+		"p.Byte.list:List<Byte>=2",
+
+		"p.Byte.set:Set<Byte>=34",
+		"p.Byte.set:Set<Byte>=34",
+		"p.Byte.set:Set<Byte>=2",
+
+		"p.Character:Character=C",
+
+		"p.Character.array:Character=C",
+		"p.Character.array:Character=D",
+
+		"p.Character.list:List<Character>=D",
+		"p.Character.list:List<Character>=C",
+
+		"p.Character.set:Set<Character>=D",
+		"p.Character.set:Set<Character>=D",
+		"p.Character.set:Set<Character>=C",
+
+		"p.Double:Double=2.5",
+
+		"p.Double.array:Double=2.5",
+		"p.Double.array:Double=45.678",
+
+		"p.Double.list:List<Double>=45.678",
+		"p.Double.list:List<Double>=2.5",
+
+		"p.Double.set:Set<Double>=45.678",
+		"p.Double.set:Set<Double>=45.678",
+		"p.Double.set:Set<Double>=2.5",
+
+		"p.Float:Float=3.4",
+
+		"p.Float.array:Float=3.4",
+		"p.Float.array:Float=78.9",
+
+		"p.Float.list:List<Float>=78.9",
+		"p.Float.list:List<Float>=3.4",
+
+		"p.Float.set:Set<Float>=78.9",
+		"p.Float.set:Set<Float>=78.9",
+		"p.Float.set:Set<Float>=3.4",
+
+		"p.Integer:Integer=5",
+
+		"p.Integer.array:Integer=5",
+		"p.Integer.array:Integer=34567",
+
+		"p.Integer.list:List<Integer>=34567",
+		"p.Integer.list:List<Integer>=5",
+
+		"p.Integer.set:Set<Integer>=34567",
+		"p.Integer.set:Set<Integer>=34567",
+		"p.Integer.set:Set<Integer>=5",
+
+		"p.Long:Long=7",
+
+		"p.Long.array:Long=7",
+		"p.Long.array:Long=7789654",
+
+		"p.Long.list:List<Long>=7789654",
+		"p.Long.list:List<Long>=7",
+
+		"p.Long.set:Set<Long>=7789654",
+		"p.Long.set:Set<Long>=7789654",
+		"p.Long.set:Set<Long>=7",
+
+		"p.Short:Short=25",
+
+		"p.Short.array:Short=25",
+		"p.Short.array:Short=196",
+
+		"p.Short.list:List<Short>=196",
+		"p.Short.list:List<Short>=25",
+
+		"p.Short.set:Set<Short>=196",
+		"p.Short.set:Set<Short>=196",
+		"p.Short.set:Set<Short>=25",
+
+		"p.String=black",
+
+		"p.String.array=black",
+		"p.String.array=green",
+
+		"p.String.list:List<String>=green",
+		"p.String.list:List<String>=black",
+
+		"p.String.set:Set<String>=green",
+		"p.String.set:Set<String>=green",
+		"p.String.set:Set<String>=black"
 	},
 	type = {ServiceWithProperties.class, BeanService.class}
 )

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=1793847&r1=1793846&r2=1793847&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 May  4 18:41:59 2017
@@ -21,9 +21,9 @@ import org.osgi.framework.InvalidSyntaxE
 import org.osgi.framework.wiring.BundleWire;
 import org.osgi.framework.wiring.BundleWiring;
 import org.osgi.namespace.extender.ExtenderNamespace;
+import org.osgi.service.cdi.CdiConstants;
 import org.osgi.service.cdi.CdiContainer;
 import org.osgi.service.cdi.CdiEvent;
-import org.osgi.service.cdi.CdiExtenderConstants;
 import org.osgi.util.tracker.ServiceTracker;
 
 import junit.framework.TestCase;
@@ -76,7 +76,7 @@ public class AbstractTestCase extends Te
 			Map<String, Object> attributes = wire.getCapability().getAttributes();
 			String extender = (String)attributes.get(ExtenderNamespace.EXTENDER_NAMESPACE);
 
-			if (CdiExtenderConstants.CDI_EXTENDER.equals(extender)) {
+			if (CdiConstants.CDI_CAPABILITY_NAME.equals(extender)) {
 				return wire.getProvider().getBundle();
 			}
 		}
@@ -87,7 +87,7 @@ public class AbstractTestCase extends Te
 	ServiceTracker<CdiContainer, CdiContainer> getServiceTracker(long bundleId) throws InvalidSyntaxException {
 		Filter filter = bundleContext.createFilter(
 			"(&(objectClass=" + CdiContainer.class.getName() + ")(service.bundleid=" + bundleId + ")(" +
-				CdiExtenderConstants.CDI_EXTENDER_CONTAINER_STATE + "=" + CdiEvent.Type.CREATED + "))");
+				CdiConstants.CDI_CONTAINER_STATE + "=" + CdiEvent.Type.CREATED + "))");
 
 		ServiceTracker<CdiContainer, CdiContainer> serviceTracker = new ServiceTracker<>(bundleContext, filter, null);
 

Modified: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/CdiBeanTests.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/CdiBeanTests.java?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/CdiBeanTests.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/CdiBeanTests.java Thu May  4 18:41:59 2017
@@ -14,7 +14,6 @@ import javax.enterprise.util.AnnotationL
 import org.apache.aries.cdi.test.interfaces.BeanService;
 import org.apache.aries.cdi.test.interfaces.BundleContextBeanQualifier;
 import org.apache.aries.cdi.test.interfaces.FieldInjectedReference;
-import org.apache.aries.cdi.test.interfaces.SingletonScoped;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
@@ -234,28 +233,9 @@ public class CdiBeanTests extends Abstra
 		assertTrue(bti.get() instanceof BundleContext);
 	}
 
-	public void testInstance() throws Exception {
-		Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
-			BeanService.class, String.format("(objectClass=*.%s)","InstanceBean")).iterator();
-
-		assertTrue(iterator.hasNext());
-
-		ServiceReference<BeanService> serviceReference = iterator.next();
-
-		assertNotNull(serviceReference);
-
-		@SuppressWarnings("unchecked")
-		BeanService<SingletonScoped<?>> bean = bundleContext.getService(serviceReference);
-
-		assertNotNull(bean);
-		assertEquals(3, Integer.decode(bean.doSomething()).intValue());
-		SingletonScoped<?> singletonScoped = bean.get();
-		assertNotNull(singletonScoped);
-	}
-
 	public void testInstanceProperties() throws Exception {
 		Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
-			BeanService.class, String.format("(objectClass=*.%s)","InstancePropertiesBean")).iterator();
+			BeanService.class, String.format("(objectClass=*.%s)","Instance_ServiceProperties")).iterator();
 
 		assertTrue(iterator.hasNext());
 
@@ -274,7 +254,7 @@ public class CdiBeanTests extends Abstra
 
 	public void testInstanceServiceReference() throws Exception {
 		Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
-			BeanService.class, String.format("(objectClass=*.%s)","InstanceServiceReferenceBean")).iterator();
+			BeanService.class, String.format("(objectClass=*.%s)","Instance_ServiceReference")).iterator();
 
 		assertTrue(iterator.hasNext());
 
@@ -291,31 +271,9 @@ public class CdiBeanTests extends Abstra
 		assertNotNull(sr);
 	}
 
-	public void testInstanceOrdering() throws Exception {
-		Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
-			BeanService.class, String.format("(objectClass=*.%s)","InstanceOrderBean")).iterator();
-
-		assertTrue(iterator.hasNext());
-
-		ServiceReference<BeanService> serviceReference = iterator.next();
-
-		assertNotNull(serviceReference);
-
-		@SuppressWarnings("unchecked")
-		BeanService<List<ServiceReference<?>>> bean = bundleContext.getService(serviceReference);
-
-		assertNotNull(bean);
-		assertEquals(3, Integer.decode(bean.doSomething()).intValue());
-		List<ServiceReference<?>> sl = bean.get();
-		assertNotNull(sl);
-		// TODO fix ordering!
-//		assertEquals(1, sl.get(0).compareTo(sl.get(1)));
-//		assertEquals(1, sl.get(1).compareTo(sl.get(2)));
-	}
-
-	public void testInstanceCardinality0() throws Exception {
+	public void testInstance_Optional() throws Exception {
 		Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(
-			BeanService.class, String.format("(objectClass=*.%s)","InstanceCardinality0Bean")).iterator();
+			BeanService.class, String.format("(objectClass=*.%s)","Instance_Optional")).iterator();
 
 		assertTrue(iterator.hasNext());
 

Modified: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/ConfigurationTests.java Thu May  4 18:41:59 2017
@@ -1,30 +1,265 @@
 package org.apache.aries.cdi.test.cases;
 
+import static org.junit.Assert.assertArrayEquals;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Callable;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.TypeLiteral;
+
+import org.apache.aries.cdi.test.interfaces.BeanService;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Filter;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cdi.CdiConstants;
+import org.osgi.service.cdi.CdiContainer;
+import org.osgi.service.cdi.CdiEvent;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.util.tracker.ServiceTracker;
+
 public class ConfigurationTests extends AbstractTestCase {
 
 	@SuppressWarnings({ "rawtypes", "unchecked" })
 	public void testConfiguration() throws Exception {
-//		Bundle tb3Bundle = installBundle("tb3.jar");
-//
-//		ServiceTracker<BeanService, BeanService> st = new ServiceTracker<BeanService, BeanService>(
-//			bundleContext, BeanService.class, null);
-//		st.open(true);
-//
-//		try {
-//			BeanService<Callable<int[]>> beanService = st.waitForService(timeout);
-//			assertNotNull(beanService);
-//		}
-//		finally {
-//			tb3Bundle.uninstall();
-//		}
+		Bundle tb3Bundle = installBundle("tb3.jar");
+
+		Configuration configurationA = null, configurationB = null;
+
+		try {
+			Filter filter = bundleContext.createFilter(
+				"(&(objectClass=" + CdiContainer.class.getName() + ")(service.bundleid=" + tb3Bundle.getBundleId() + "))");
+
+			ServiceTracker<CdiContainer, CdiContainer> containerTracker = new ServiceTracker<>(
+				bundleContext, filter, null);
+
+			containerTracker.open();
+
+			containerTracker.waitForService(timeout);
+
+			ServiceReference<CdiContainer> serviceReference = containerTracker.getServiceReference();
+
+			assertNotNull(serviceReference);
+
+			assertEquals(
+				CdiEvent.Type.WAITING_FOR_CONFIGURATIONS,
+				serviceReference.getProperty(CdiConstants.CDI_CONTAINER_STATE));
+
+			configurationA = configurationAdmin.getConfiguration("configA", "?");
+
+			Dictionary<String, Object> properties = new Hashtable<>();
+			properties.put("ports", new int[] {12, 4567});
+			configurationA.update(properties);
+
+			configurationB = configurationAdmin.getConfiguration("configB", "?");
+
+			properties = new Hashtable<>();
+			properties.put("color", "green");
+			properties.put("ports", new int[] {80});
+			configurationB.update(properties);
+
+			containerTracker.close();
+
+			filter = bundleContext.createFilter(
+				"(&(objectClass=" + CdiContainer.class.getName() + ")(service.bundleid=" + tb3Bundle.getBundleId() +
+				")(" + CdiConstants.CDI_CONTAINER_STATE + "=CREATED))");
+
+			containerTracker = new ServiceTracker<>(bundleContext, filter, null);
+
+			containerTracker.open();
+
+			containerTracker.waitForService(timeout);
+
+			ServiceTracker<BeanService, BeanService> stA = new ServiceTracker<BeanService, BeanService>(
+				bundleContext, bundleContext.createFilter(
+					"(&(objectClass=org.apache.aries.cdi.test.interfaces.BeanService)(bean=A))"), null);
+			stA.open(true);
+
+			BeanService<Callable<int[]>> beanService = stA.waitForService(timeout);
+
+			assertNotNull(beanService);
+			assertEquals("blue", beanService.doSomething());
+			assertArrayEquals(new int[] {12, 4567}, beanService.get().call());
+
+			ServiceTracker<BeanService, BeanService> stB = new ServiceTracker<BeanService, BeanService>(
+				bundleContext, bundleContext.createFilter(
+					"(&(objectClass=org.apache.aries.cdi.test.interfaces.BeanService)(bean=B))"), null);
+			stB.open(true);
+
+			beanService = stB.waitForService(timeout);
+
+			assertNotNull(beanService);
+			assertEquals("green", beanService.doSomething());
+			assertArrayEquals(new int[] {80}, beanService.get().call());
+		}
+		finally {
+			if (configurationA != null)
+				configurationA.delete();
+			if (configurationB != null)
+				configurationB.delete();
+			tb3Bundle.uninstall();
+		}
+	}
+
+	@SuppressWarnings({ "unchecked", "serial" })
+	public void testNamedConfiguration() throws Exception {
+		Bundle tb3Bundle = installBundle("tb3.jar");
+
+		Configuration configurationA = null, configurationB = null;
+
+		try {
+			configurationA = configurationAdmin.getConfiguration("configA", "?");
+
+			Dictionary<String, Object> properties = new Hashtable<>();
+			properties.put("ports", new int[] {12, 4567});
+			configurationA.update(properties);
+
+			configurationB = configurationAdmin.getConfiguration("configB", "?");
+
+			properties = new Hashtable<>();
+			properties.put("color", "green");
+			properties.put("ports", new int[] {80});
+			configurationB.update(properties);
+
+			Filter filter = bundleContext.createFilter(
+				"(&(objectClass=" + CdiContainer.class.getName() + ")(service.bundleid=" + tb3Bundle.getBundleId() +
+				")(" + CdiConstants.CDI_CONTAINER_STATE + "=CREATED))");
+
+			ServiceTracker<CdiContainer, CdiContainer> serviceTracker = new ServiceTracker<>(bundleContext, filter, null);
+
+			serviceTracker.open();
+
+			CdiContainer container = serviceTracker.waitForService(timeout);
+
+			assertNotNull(container);
+
+			int trackerCount = serviceTracker.getTrackingCount();
+
+			BeanManager beanManager = container.getBeanManager();
+			Set<Bean<?>> beans = beanManager.getBeans("configB");
+			assertNotNull(beans);
+			Bean<? extends Object> bean = beanManager.resolve(beans);
+			CreationalContext<?> ctx = beanManager.createCreationalContext(bean);
+
+			Map<String, Object> config = (Map<String, Object>)beanManager.getReference(
+				bean, new TypeLiteral<Map<String, Object>>() {}.getType(), ctx);
+
+			assertNotNull(config);
+			assertEquals("green", config.get("color"));
+
+			assertArrayEquals(new int[] {80}, (int[])config.get("ports"));
+
+			configurationA.delete();
+
+			while (trackerCount == serviceTracker.getTrackingCount()) {
+				Thread.sleep(10);
+			}
+
+			assertTrue(serviceTracker.isEmpty());
+
+			serviceTracker.close();
+
+			filter = bundleContext.createFilter(
+				"(&(objectClass=" + CdiContainer.class.getName() + ")(service.bundleid=" + tb3Bundle.getBundleId() +
+				")(" + CdiConstants.CDI_CONTAINER_STATE + "=" + CdiEvent.Type.WAITING_FOR_CONFIGURATIONS + "))");
+
+			serviceTracker = new ServiceTracker<>(bundleContext, filter, null);
+
+			serviceTracker.open();
+
+			assertFalse(serviceTracker.isEmpty());
+		}
+		finally {
+			if (configurationB != null)
+				configurationB.delete();
+			tb3Bundle.uninstall();
+		}
+	}
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public void testOptionalConfiguration() throws Exception {
+		Bundle tb5Bundle = installBundle("tb5.jar");
+
+		Configuration configurationC = null;
+
+		try {
+			Filter filter = bundleContext.createFilter(
+				"(&(objectClass=" + CdiContainer.class.getName() + ")(service.bundleid=" + tb5Bundle.getBundleId() +
+				")(" + CdiConstants.CDI_CONTAINER_STATE + "=CREATED))");
+
+			ServiceTracker<CdiContainer, CdiContainer> containerTracker = new ServiceTracker<>(bundleContext, filter, null);
+
+			containerTracker.open();
+
+			containerTracker.waitForService(timeout);
+
+			ServiceTracker<BeanService, BeanService> stC = new ServiceTracker<BeanService, BeanService>(
+				bundleContext, bundleContext.createFilter(
+					"(&(objectClass=org.apache.aries.cdi.test.interfaces.BeanService)(bean=C))"), null);
+			stC.open(true);
+
+			BeanService<Callable<int[]>> beanService = stC.waitForService(timeout);
+
+			int trackingCount = stC.getTrackingCount();
+
+			assertNotNull(beanService);
+			assertEquals("blue", beanService.doSomething());
+			assertArrayEquals(new int[] {35777}, beanService.get().call());
+
+			configurationC = configurationAdmin.getConfiguration("foo.bar", "?");
+
+			Dictionary<String, Object> properties = new Hashtable<>();
+			properties.put("ports", new int[] {12, 4567});
+			configurationC.update(properties);
+
+			do {Thread.sleep(100);}
+			while (trackingCount == stC.getTrackingCount());
+
+			beanService = stC.waitForService(timeout);
+
+			trackingCount = stC.getTrackingCount();
+
+			assertNotNull(beanService);
+			assertEquals("blue", beanService.doSomething());
+			assertArrayEquals(new int[] {12, 4567}, beanService.get().call());
+
+			configurationC.delete();
+
+			do {Thread.sleep(100);}
+			while (trackingCount == stC.getTrackingCount());
+
+			beanService = stC.waitForService(timeout);
+
+			assertNotNull(beanService);
+			assertEquals("blue", beanService.doSomething());
+			assertArrayEquals(new int[] {35777}, beanService.get().call());
+		}
+		finally {
+			tb5Bundle.uninstall();
+		}
 	}
 
 	@Override
 	protected void setUp() throws Exception {
+		adminTracker = new ServiceTracker<>(bundleContext, ConfigurationAdmin.class, null);
+
+		adminTracker.open();
+
+		configurationAdmin = adminTracker.getService();
 	}
 
 	@Override
 	protected void tearDown() throws Exception {
+		adminTracker.close();
 	}
 
+	private ServiceTracker<ConfigurationAdmin, ConfigurationAdmin> adminTracker;
+	private ConfigurationAdmin configurationAdmin;
+
 }

Modified: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/JndiExtensionTests.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/JndiExtensionTests.java?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/JndiExtensionTests.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/JndiExtensionTests.java Thu May  4 18:41:59 2017
@@ -13,9 +13,9 @@ import org.osgi.framework.ServiceReferen
 import org.osgi.framework.wiring.BundleCapability;
 import org.osgi.framework.wiring.BundleWiring;
 import org.osgi.resource.Capability;
+import org.osgi.service.cdi.CdiConstants;
 import org.osgi.service.cdi.CdiContainer;
 import org.osgi.service.cdi.CdiEvent;
-import org.osgi.service.cdi.CdiExtenderConstants;
 import org.osgi.service.jndi.JNDIConstants;
 import org.osgi.util.tracker.BundleTracker;
 import org.osgi.util.tracker.BundleTrackerCustomizer;
@@ -46,7 +46,7 @@ public class JndiExtensionTests extends
 				@Override
 				public Bundle addingBundle(Bundle bundle, BundleEvent arg1) {
 					List<BundleCapability> capabilities = bundle.adapt(
-						BundleWiring.class).getCapabilities(CdiExtenderConstants.CDI_EXTENSION);
+						BundleWiring.class).getCapabilities(CdiConstants.CDI_EXTENSION_NAMESPACE);
 
 					if (capabilities.isEmpty()) {
 						return null;
@@ -87,21 +87,21 @@ public class JndiExtensionTests extends
 		ServiceReference<CdiContainer> serviceReference = serviceReferences.iterator().next();
 
 		CdiEvent.Type state = (CdiEvent.Type)serviceReference.getProperty(
-			CdiExtenderConstants.CDI_EXTENDER_CONTAINER_STATE);
+			CdiConstants.CDI_CONTAINER_STATE);
 
 		assertEquals(CdiEvent.Type.CREATED, state);
 
 		extensionBundle.stop();
 
 		state = (CdiEvent.Type)serviceReference.getProperty(
-			CdiExtenderConstants.CDI_EXTENDER_CONTAINER_STATE);
+			CdiConstants.CDI_CONTAINER_STATE);
 
 		assertEquals(CdiEvent.Type.WAITING_FOR_EXTENSIONS, state);
 
 		extensionBundle.start();
 
 		state = (CdiEvent.Type)serviceReference.getProperty(
-			CdiExtenderConstants.CDI_EXTENDER_CONTAINER_STATE);
+			CdiConstants.CDI_CONTAINER_STATE);
 
 		assertEquals(CdiEvent.Type.CREATED, state);
 	}

Modified: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/components/ServiceBundleScope.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/components/ServiceBundleScope.java?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/components/ServiceBundleScope.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/components/ServiceBundleScope.java Thu May  4 18:41:59 2017
@@ -9,7 +9,8 @@ import org.osgi.service.component.annota
 		"fee.fi=fee",
 		"fo.fum:Integer=23",
 		"complex.enough.key=fum",
-		"key=value"
+		"key=value",
+		"simple.annotation=blah"
 	},
 	scope = ServiceScope.BUNDLE
 )

Added: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/Config.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/Config.java?rev=1793847&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/Config.java (added)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/Config.java Thu May  4 18:41:59 2017
@@ -0,0 +1,9 @@
+package org.apache.aries.cdi.test.tb3;
+
+@interface Config {
+
+	String color() default "blue";
+
+	int[] ports() default 35777;
+
+}
\ No newline at end of file

Modified: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java?rev=1793847&r1=1793846&r2=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java Thu May  4 18:41:59 2017
@@ -3,12 +3,13 @@ package org.apache.aries.cdi.test.tb3;
 import java.util.concurrent.Callable;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import org.apache.aries.cdi.test.interfaces.BeanService;
 import org.osgi.service.cdi.annotations.Configuration;
 import org.osgi.service.cdi.annotations.Service;
 
-@Service
+@Service(property = "bean=A")
 public class ConfigurationBeanA implements BeanService<Callable<int[]>> {
 
 	@Override
@@ -28,14 +29,7 @@ public class ConfigurationBeanA implemen
 
 	@Configuration
 	@Inject
+	@Named("configA")
 	Config config;
 
 }
-
-@interface Config {
-
-	String color() default "blue";
-
-	int[] ports() default 35777;
-
-}

Copied: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanB.java (from r1792762, aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java)
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanB.java?p2=aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanB.java&p1=aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java&r1=1792762&r2=1793847&rev=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanB.java Thu May  4 18:41:59 2017
@@ -1,19 +1,21 @@
 package org.apache.aries.cdi.test.tb3;
 
+import java.util.Map;
 import java.util.concurrent.Callable;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import org.apache.aries.cdi.test.interfaces.BeanService;
 import org.osgi.service.cdi.annotations.Configuration;
 import org.osgi.service.cdi.annotations.Service;
 
-@Service
-public class ConfigurationBeanA implements BeanService<Callable<int[]>> {
+@Service(property = "bean=B")
+public class ConfigurationBeanB implements BeanService<Callable<int[]>> {
 
 	@Override
 	public String doSomething() {
-		return config.color();
+		return (String)config.get("color");
 	}
 
 	@Override
@@ -21,21 +23,14 @@ public class ConfigurationBeanA implemen
 		return new Callable<int[]>() {
 			@Override
 			public int[] call() throws Exception {
-				return config.ports();
+				return (int[])config.get("ports");
 			}
 		};
 	}
 
-	@Configuration
+	@Configuration({"$", "configA"})
 	@Inject
-	Config config;
-
-}
-
-@interface Config {
-
-	String color() default "blue";
-
-	int[] ports() default 35777;
+	@Named("configB")
+	Map<String, Object> config;
 
 }

Added: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/Config.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/Config.java?rev=1793847&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/Config.java (added)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/Config.java Thu May  4 18:41:59 2017
@@ -0,0 +1,9 @@
+package org.apache.aries.cdi.test.tb5;
+
+@interface Config {
+
+	String color() default "blue";
+
+	int[] ports() default 35777;
+
+}
\ No newline at end of file

Copied: aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/ConfigurationBeanC.java (from r1792762, aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java)
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/ConfigurationBeanC.java?p2=aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/ConfigurationBeanC.java&p1=aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java&r1=1792762&r2=1793847&rev=1793847&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb3/ConfigurationBeanA.java (original)
+++ aries/trunk/cdi/cdi-itests/src/main/java/org/apache/aries/cdi/test/tb5/ConfigurationBeanC.java Thu May  4 18:41:59 2017
@@ -1,15 +1,16 @@
-package org.apache.aries.cdi.test.tb3;
+package org.apache.aries.cdi.test.tb5;
 
 import java.util.concurrent.Callable;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import org.apache.aries.cdi.test.interfaces.BeanService;
 import org.osgi.service.cdi.annotations.Configuration;
 import org.osgi.service.cdi.annotations.Service;
 
-@Service
-public class ConfigurationBeanA implements BeanService<Callable<int[]>> {
+@Service(property = "bean=C")
+public class ConfigurationBeanC implements BeanService<Callable<int[]>> {
 
 	@Override
 	public String doSomething() {
@@ -26,16 +27,9 @@ public class ConfigurationBeanA implemen
 		};
 	}
 
-	@Configuration
+	@Configuration(required = false, value = "foo.bar")
 	@Inject
+	@Named("configC")
 	Config config;
 
 }
-
-@interface Config {
-
-	String color() default "blue";
-
-	int[] ports() default 35777;
-
-}