You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2010/12/28 12:10:33 UTC

svn commit: r1053307 - in /felix/trunk/ipojo: composite/src/main/java/org/apache/felix/ipojo/composite/instance/ composite/src/main/java/org/apache/felix/ipojo/composite/service/instantiator/ tests/composite/service-instance/src/main/java/org/apache/fe...

Author: clement
Date: Tue Dec 28 11:10:32 2010
New Revision: 1053307

URL: http://svn.apache.org/viewvc?rev=1053307&view=rev
Log:
Fix FELIX-2746 Composite should support instance configuration

Composite configuration is now appended to component instance (<instance>) and service instance configuration (<service action="instantiate">).

Added:
    felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/ConfigurationTest.java
Modified:
    felix/trunk/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/instance/InstanceHandler.java
    felix/trunk/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/service/instantiator/ServiceDependencyHandler.java
    felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/ConfigurableInstantiation.java
    felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/InstantiatorTestSuite.java
    felix/trunk/ipojo/tests/composite/service-instance/src/main/resources/metadata.xml

Modified: felix/trunk/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/instance/InstanceHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/instance/InstanceHandler.java?rev=1053307&r1=1053306&r2=1053307&view=diff
==============================================================================
--- felix/trunk/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/instance/InstanceHandler.java (original)
+++ felix/trunk/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/instance/InstanceHandler.java Tue Dec 28 11:10:32 2010
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -20,6 +20,7 @@ package org.apache.felix.ipojo.composite
 
 import java.util.ArrayList;
 import java.util.Dictionary;
+import java.util.Enumeration;
 import java.util.List;
 import java.util.Properties;
 
@@ -48,17 +49,17 @@ public class InstanceHandler extends Com
      * Internal context.
      */
     private ServiceContext m_scope;
-    
+
     /**
      * Available factories.
      */
     private Factory[] m_factories;
-    
+
     /**
      * Handler description.
      */
     private InstanceHandlerDescription m_description;
-    
+
 
     /**
      * This structure aims to manage a configuration. It stores all necessary
@@ -79,7 +80,7 @@ public class InstanceHandler extends Com
          * Created instance.
          */
         private ComponentInstance m_instance;
-        
+
         /**
          * Desired Factory (can be the classname).
          */
@@ -87,7 +88,7 @@ public class InstanceHandler extends Com
 
         /**
          * Constructor.
-         * 
+         *
          * @param conf : the configuration to create.
          */
         ManagedConfiguration(Dictionary conf) {
@@ -110,7 +111,7 @@ public class InstanceHandler extends Com
         protected String getFactory() {
             return m_factoryName;
         }
-        
+
         protected String getNeededFactoryName() {
             return m_desiredFactory;
         }
@@ -125,7 +126,7 @@ public class InstanceHandler extends Com
 
         /**
          * Set the factory name.
-         * 
+         *
          * @param name : the factory name.
          */
         protected void setFactory(String name) {
@@ -134,7 +135,7 @@ public class InstanceHandler extends Com
 
         /**
          * Set the instance object.
-         * 
+         *
          * @param instance : the instance
          */
         protected void setInstance(ComponentInstance instance) {
@@ -149,7 +150,7 @@ public class InstanceHandler extends Com
 
     /**
      * Create an instance using the given factory and the given configuration.
-     * 
+     *
      * @param fact : the factory name to used.
      * @param config : the configuration.
      */
@@ -167,7 +168,7 @@ public class InstanceHandler extends Com
             error("The instance creation has failed, an error during the configuration has occured", e);
         }
     }
-    
+
     /**
      * A new valid factory appears.
      * @param factory : factory.
@@ -177,7 +178,9 @@ public class InstanceHandler extends Com
         String factName = factory.getName();
         String className = factory.getComponentDescription().getClassName();
         for (int i = 0; i < m_configurations.length; i++) {
-            if (m_configurations[i].getInstance() == null && (m_configurations[i].getNeededFactoryName().equals(factName) || m_configurations[i].getNeededFactoryName().equals(className))) {
+            if (m_configurations[i].getInstance() == null
+            		&& (m_configurations[i].getNeededFactoryName().equals(factName)
+            				|| m_configurations[i].getNeededFactoryName().equals(className))) {
                 createInstance(factory, m_configurations[i]);
                 implicated = true;
             }
@@ -186,7 +189,7 @@ public class InstanceHandler extends Com
             checkValidity();
         }
     }
-    
+
     /**
      * An existing factory disappears or becomes invalid.
      * @param factory : factory
@@ -226,24 +229,40 @@ public class InstanceHandler extends Com
      * Configure method.
      * @param metadata : component type metadata.
      * @param configuration : instance configuration.
-     * @throws ConfigurationException : occurs an instance cannot be parsed correctly. 
+     * @throws ConfigurationException : occurs an instance cannot be parsed correctly.
      * @see org.apache.felix.ipojo.CompositeHandler#configure(org.apache.felix.ipojo.CompositeManager, org.apache.felix.ipojo.metadata.Element, java.util.Dictionary)
      */
     public void configure(Element metadata, Dictionary configuration) throws ConfigurationException {
         m_scope = getCompositeManager().getServiceContext();
+
+        // Prepare the configuration to append.
+        Properties toAppend = new Properties();
+        Enumeration keys = configuration.keys();
+        while(keys.hasMoreElements()) {
+        	String key = (String) keys.nextElement();
+        	if (! key.equals("instance.name")
+        			|| key.equals("component")) { // Remove instance.name and component
+        		toAppend.put(key, configuration.get(key));
+        	}
+        }
+
         Element[] instances = metadata.getElements("instance");
         m_configurations = new ManagedConfiguration[instances.length];
         for (int i = 0; i < instances.length; i++) {
-            Dictionary conf = null;
+            Properties conf = null;
             try {
                 conf = parseInstance(instances[i]);
             } catch (ParseException e) {
                 error("An instance cannot be parsed correctly", e);
                 throw new ConfigurationException("An instance cannot be parsed correctly : " + e.getMessage());
             }
-            m_configurations[i] = new ManagedConfiguration(conf);
+
+        	Properties instanceConfiguration = new Properties();
+         	instanceConfiguration.putAll(conf);
+            instanceConfiguration.putAll(toAppend);
+            m_configurations[i] = new ManagedConfiguration(instanceConfiguration);
         }
-        
+
         m_description = new InstanceHandlerDescription(this, m_configurations);
     }
 
@@ -253,16 +272,16 @@ public class InstanceHandler extends Com
      * @return : the resulting dictionary
      * @throws ParseException : occurs when a configuration cannot be parse correctly.
      */
-    public static Dictionary parseInstance(Element instance) throws ParseException {
-        Dictionary dict = new Properties();
+    public static Properties parseInstance(Element instance) throws ParseException {
+    	Properties dict = new Properties();
         String name = instance.getAttribute("name");
         if (name != null) {
             dict.put("name", name);
         }
-        
+
         String comp = instance.getAttribute("component");
-        if (comp == null) { 
-            throw new ParseException("An instance does not have the 'component' attribute"); 
+        if (comp == null) {
+            throw new ParseException("An instance does not have the 'component' attribute");
         } else {
             dict.put("component", comp);
         }
@@ -306,10 +325,10 @@ public class InstanceHandler extends Com
      * Start method.
      * @see org.apache.felix.ipojo.CompositeHandler#start()
      */
-    public void start() { 
+    public void start() {
         for (int j = 0; j < m_factories.length; j++) {
             String factName = m_factories[j].getName();
-            String className = m_factories[j].getClassName(); 
+            String className = m_factories[j].getClassName();
             for (int i = 0; i < m_configurations.length; i++) {
                 if (m_configurations[i].getInstance() == null && (m_configurations[i].getNeededFactoryName().equals(factName) || m_configurations[i].getNeededFactoryName().equals(className))) {
                     createInstance(m_factories[j], m_configurations[i]);

Modified: felix/trunk/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/service/instantiator/ServiceDependencyHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/service/instantiator/ServiceDependencyHandler.java?rev=1053307&r1=1053306&r2=1053307&view=diff
==============================================================================
--- felix/trunk/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/service/instantiator/ServiceDependencyHandler.java (original)
+++ felix/trunk/ipojo/composite/src/main/java/org/apache/felix/ipojo/composite/service/instantiator/ServiceDependencyHandler.java Tue Dec 28 11:10:32 2010
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -21,6 +21,7 @@ package org.apache.felix.ipojo.composite
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Dictionary;
+import java.util.Enumeration;
 import java.util.List;
 import java.util.Properties;
 
@@ -42,7 +43,7 @@ import org.osgi.framework.InvalidSyntaxE
 /**
  * Service Instantiator Class. This handler allows to instantiate service
  * instance inside the composition.
- * 
+ *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 public class ServiceDependencyHandler extends CompositeHandler implements DependencyStateListener {
@@ -51,17 +52,17 @@ public class ServiceDependencyHandler ex
      * List of instances to manage.
      */
     private List/* <SvcInstance> */m_instances = new ArrayList();
-    
+
     /**
      * List of importers.
      */
     private List/* <ServiceImporter> */ m_importers = new ArrayList();
-    
+
     /**
      * Flag indicating if the handler has already finished the start method.
      */
     private boolean m_isStarted;
-    
+
     /**
      * The handler description.
      */
@@ -71,15 +72,27 @@ public class ServiceDependencyHandler ex
      * Source Managers.
      */
     private List m_sources;
-    
-    
+
+
     /**
      * Create a Service instance object form the given Element.
      * This method parse the given element and configure the service instance object.
      * @param service : the Element describing the service instance
+     * @param conf : the configuration from the composite instance
      * @throws ConfigurationException : the service instance cannot be created correctly
      */
-    private void createServiceInstance(Element service) throws ConfigurationException {
+    private void createServiceInstance(Element service, Dictionary conf) throws ConfigurationException {
+        // Prepare the configuration to append.
+        Properties toAppend = new Properties();
+        Enumeration keys = conf.keys();
+        while(keys.hasMoreElements()) {
+        	String key = (String) keys.nextElement();
+        	if (! key.equals("instance.name")
+        			|| key.equals("component")) { // Remove instance.name and component
+        		toAppend.put(key, conf.get(key));
+        	}
+        }
+
         String spec = service.getAttribute("specification");
         if (spec == null) {
             throw new ConfigurationException("Malformed service : the specification attribute is mandatory");
@@ -89,14 +102,14 @@ public class ServiceDependencyHandler ex
         if (givenFilter != null) {
             filter = "(&" + filter + givenFilter + ")"; //NOPMD
         }
-        
+
         Filter fil;
         try {
             fil = getCompositeManager().getGlobalContext().createFilter(filter);
         } catch (InvalidSyntaxException e) {
             throw new ConfigurationException("Malformed filter " + filter + " : " + e.getMessage());
         }
-        
+
         Properties prop = new Properties();
         Element[] props = service.getElements("property");
         for (int k = 0; props != null && k < props.length; k++) {
@@ -106,20 +119,24 @@ public class ServiceDependencyHandler ex
                 throw new ConfigurationException("An instance configuration is invalid : " + e.getMessage());
             }
         }
-        
+
+        Properties instanceConfiguration = new Properties();
+     	instanceConfiguration.putAll(prop);
+        instanceConfiguration.putAll(toAppend);
+
         String aggregate = service.getAttribute("aggregate");
         boolean agg = aggregate != null && aggregate.equalsIgnoreCase("true");
-        
+
         String optional = service.getAttribute("optional");
         boolean opt = optional != null && optional.equalsIgnoreCase("true");
-        
+
         int policy = DependencyModel.getPolicy(service);
-        
+
         Comparator cmp = DependencyModel.getComparator(service, getCompositeManager().getGlobalContext());
-        
-        SvcInstance inst = new SvcInstance(this, spec, prop, agg, opt, fil, cmp, policy);
+
+        SvcInstance inst = new SvcInstance(this, spec, instanceConfiguration, agg, opt, fil, cmp, policy);
         m_instances.add(inst);
-        
+
         String sources = service.getAttribute("context-source");
         if (sources != null) {
             SourceManager source = new SourceManager(sources, filter, inst, getCompositeManager());
@@ -129,7 +146,7 @@ public class ServiceDependencyHandler ex
             m_sources.add(source);
         }
     }
-    
+
     /**
      * Create a Service importer object from the given Element.
      * This method parse the given element and configure the service importer object.
@@ -142,7 +159,7 @@ public class ServiceDependencyHandler ex
         boolean aggregate = false;
         String specification = imp.getAttribute("specification");
 
-        if (specification == null) { 
+        if (specification == null) {
             // Malformed import
             error("Malformed import: the specification attribute is mandatory");
             throw new ConfigurationException("Malformed import : the specification attribute is mandatory");
@@ -194,7 +211,7 @@ public class ServiceDependencyHandler ex
 
             ServiceImporter importer = new ServiceImporter(spec, fil, aggregate, optional, cmp, policy, context, identitity, this);
             m_importers.add(importer);
-            
+
             String sources = imp.getAttribute("context-source");
             if (sources != null) {
                 SourceManager source = new SourceManager(sources, filter, importer, getCompositeManager());
@@ -203,7 +220,7 @@ public class ServiceDependencyHandler ex
                 }
                 m_sources.add(source);
             }
-            
+
         }
     }
 
@@ -221,20 +238,20 @@ public class ServiceDependencyHandler ex
         if (conf.get("requires.filters") != null) {
             confFilter = (Dictionary) conf.get("requires.filters");
         }
-        
+
         for (int i = 0; i < services.length; i++) {
             String action = services[i].getAttribute("action");
             if (action == null) {
                 throw new ConfigurationException("The action attribute must be set to 'instantiate' or 'import'");
             } else if ("instantiate".equalsIgnoreCase(action)) {
-                createServiceInstance(services[i]);
+                createServiceInstance(services[i], conf);
             } else if ("import".equalsIgnoreCase(action)) {
                 createServiceImport(services[i], confFilter);
             } else {
                 throw new ConfigurationException("Unknown action : " + action);
             }
         }
-        
+
         m_description = new ServiceInstantiatorDescription(this, m_instances, m_importers);
     }
 
@@ -248,12 +265,12 @@ public class ServiceDependencyHandler ex
             SourceManager source = (SourceManager) m_sources.get(i);
             source.start();
         }
-        
+
         for (int i = 0; i < m_importers.size(); i++) {
             ServiceImporter imp = (ServiceImporter) m_importers.get(i);
             imp.start();
         }
-        
+
         for (int i = 0; i < m_instances.size(); i++) {
             SvcInstance inst = (SvcInstance) m_instances.get(i);
             inst.start();
@@ -275,7 +292,7 @@ public class ServiceDependencyHandler ex
                 return;
             }
         }
-        
+
         for (int i = 0; i < m_instances.size(); i++) {
             SvcInstance inst = (SvcInstance) m_instances.get(i);
             if (inst.getState() != DependencyModel.RESOLVED) {
@@ -283,7 +300,7 @@ public class ServiceDependencyHandler ex
                 return;
             }
         }
-        
+
         setValidity(true);
     }
 
@@ -297,12 +314,12 @@ public class ServiceDependencyHandler ex
             SourceManager source = (SourceManager) m_sources.get(i);
             source.stop();
         }
-        
+
         for (int i = 0; i < m_instances.size(); i++) {
             SvcInstance inst = (SvcInstance) m_instances.get(i);
             inst.stop();
         }
-        
+
         for (int i = 0; i < m_importers.size(); i++) {
             ServiceImporter imp = (ServiceImporter) m_importers.get(i);
             imp.stop();
@@ -310,7 +327,7 @@ public class ServiceDependencyHandler ex
 
         m_isStarted = false;
     }
-    
+
     /**
      * State change callback.
      * This method is used to freeze the set of used provider if the static binding policy is used.
@@ -319,14 +336,14 @@ public class ServiceDependencyHandler ex
      */
     public void stateChanged(int newState) {
         // If we are becoming valid and started, check if we need to freeze importers.
-        if (m_isStarted && newState == ComponentInstance.VALID) { 
+        if (m_isStarted && newState == ComponentInstance.VALID) {
             for (int i = 0; i < m_importers.size(); i++) {
                 ServiceImporter imp = (ServiceImporter) m_importers.get(i);
                 if (imp.getBindingPolicy() == DependencyModel.STATIC_BINDING_POLICY) {
                     imp.freeze();
                 }
             }
-            
+
             for (int i = 0; i < m_instances.size(); i++) {
                 SvcInstance imp = (SvcInstance) m_instances.get(i);
                 if (imp.getBindingPolicy() == DependencyModel.STATIC_BINDING_POLICY) {
@@ -364,11 +381,11 @@ public class ServiceDependencyHandler ex
     public HandlerDescription getDescription() {
         return m_description;
     }
-    
+
     public List getInstances() {
         return m_instances;
     }
-    
+
     public List getRequirements() {
         return m_importers;
     }

Modified: felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/ConfigurableInstantiation.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/ConfigurableInstantiation.java?rev=1053307&r1=1053306&r2=1053307&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/ConfigurableInstantiation.java (original)
+++ felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/ConfigurableInstantiation.java Tue Dec 28 11:10:32 2010
@@ -23,7 +23,6 @@ import java.util.Properties;
 import org.apache.felix.ipojo.ComponentFactory;
 import org.apache.felix.ipojo.ComponentInstance;
 import org.apache.felix.ipojo.ServiceContext;
-import org.apache.felix.ipojo.architecture.Architecture;
 import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
 import org.apache.felix.ipojo.test.composite.service.FooService;
 import org.apache.felix.ipojo.test.composite.util.Utils;

Added: felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/ConfigurationTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/ConfigurationTest.java?rev=1053307&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/ConfigurationTest.java (added)
+++ felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/ConfigurationTest.java Tue Dec 28 11:10:32 2010
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.test.composite.instantiator;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.ServiceContext;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.composite.service.FooService;
+import org.apache.felix.ipojo.test.composite.util.Utils;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+public class ConfigurationTest extends OSGiTestCase {
+
+	private ComponentFactory compositeFactory;
+
+	public void setUp() {
+		compositeFactory = (ComponentFactory) Utils.getFactoryByName(getContext(), "CONF-MySuperComposite");
+	}
+
+	public void tearDown() {
+
+	}
+
+	public void testDefaultInstantiation() throws InvalidSyntaxException {
+		Properties props = new Properties();
+		props.put("instance.name","under");
+		ComponentInstance under = null;
+		try {
+			under = compositeFactory.createComponentInstance(props);
+		} catch(Exception e) {
+		    e.printStackTrace();
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		assertTrue("Check instance validity", under.getState() == ComponentInstance.VALID);
+		ServiceContext sc = Utils.getServiceContext(under);
+		ServiceReference[] refs = sc.getServiceReferences(FooService.class.getName(), null);
+		assertEquals(2, refs.length);
+		for (int i = 0; i < refs.length; i++) {
+			assertEquals(3, ((Integer) refs[i].getProperty("int")).intValue());
+			assertEquals("foo", (String) refs[i].getProperty("string"));
+		}
+		under.dispose();
+	}
+
+	public void testConfiguredInstantiation() throws InvalidSyntaxException {
+		Properties props = new Properties();
+		props.put("instance.name","under");
+		props.put("string", "bar");
+		props.put("int", "25");
+		ComponentInstance under = null;
+		try {
+			under = compositeFactory.createComponentInstance(props);
+		} catch(Exception e) {
+		    e.printStackTrace();
+			fail("Cannot instantiate under : " + e.getMessage());
+		}
+		assertTrue("Check instance validity", under.getState() == ComponentInstance.VALID);
+		ServiceContext sc = Utils.getServiceContext(under);
+		ServiceReference[] refs = sc.getServiceReferences(FooService.class.getName(), null);
+		assertEquals(2, refs.length);
+		for (int i = 0; i < refs.length; i++) {
+			assertEquals(25, ((Integer) refs[i].getProperty("int")).intValue());
+			assertEquals("bar", (String) refs[i].getProperty("string"));
+		}
+		under.dispose();
+	}
+
+
+
+}

Modified: felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/InstantiatorTestSuite.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/InstantiatorTestSuite.java?rev=1053307&r1=1053306&r2=1053307&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/InstantiatorTestSuite.java (original)
+++ felix/trunk/ipojo/tests/composite/service-instance/src/main/java/org/apache/felix/ipojo/test/composite/instantiator/InstantiatorTestSuite.java Tue Dec 28 11:10:32 2010
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -36,6 +36,7 @@ public class InstantiatorTestSuite {
 		ots.addTestSuite(ConfigurableInstantiation.class);
 		ots.addTestSuite(SimpleInstance.class);
 		ots.addTestSuite(InstanceScopeTest.class);
+		ots.addTestSuite(ConfigurationTest.class);
 		return ots;
 	}
 

Modified: felix/trunk/ipojo/tests/composite/service-instance/src/main/resources/metadata.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/composite/service-instance/src/main/resources/metadata.xml?rev=1053307&r1=1053306&r2=1053307&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/composite/service-instance/src/main/resources/metadata.xml (original)
+++ felix/trunk/ipojo/tests/composite/service-instance/src/main/resources/metadata.xml Tue Dec 28 11:10:32 2010
@@ -1,26 +1,26 @@
 <ipojo
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd 
+	xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd
 	    org.apache.felix.composite http://felix.apache.org/ipojo/schemas/SNAPSHOT/composite.xsd"
 	xmlns="org.apache.felix.ipojo"
 	xmlns:comp="org.apache.felix.ipojo.composite"
-	xmlns:cs="org.apache.felix.ipojo.test.composite.handler.CheckServiceHandler">	
+	xmlns:cs="org.apache.felix.ipojo.test.composite.handler.CheckServiceHandler">
 	<comp:composite name="composite.bar.1" architecture="true">
 		<subservice action="instantiate" specification="org.apache.felix.ipojo.test.composite.service.BarService"/>
 	</comp:composite>
-	
+
 	<comp:composite name="composite.bar.2" architecture="true">
 		<subservice action="instantiate" specification="org.apache.felix.ipojo.test.composite.service.BarService" aggregate="true"/>
 	</comp:composite>
-	
+
 	<comp:composite name="composite.bar.3" architecture="true">
 		<subservice action="instantiate" specification="org.apache.felix.ipojo.test.composite.service.BarService" optional="true"/>
 	</comp:composite>
-	
+
 	<comp:composite name="composite.bar.4" architecture="true">
 		<subservice action="instantiate" specification="org.apache.felix.ipojo.test.composite.service.FooService" aggregate="true" optional="true"/>
 	</comp:composite>
-	
+
 	<comp:composite name="composite.bar.5-accept" architecture="true">
 		<subservice action="instantiate" specification="org.apache.felix.ipojo.test.composite.service.FooService">
 			<property name="boolean" value="true"/>
@@ -29,7 +29,7 @@
 			<property name="int" value="5"/>
 		</subservice>
 	</comp:composite>
-	
+
 	<comp:composite name="composite.bar.5-refuse1" architecture="true">
 		<subservice action="instantiate" specification="org.apache.felix.ipojo.test.composite.service.BarService">
 			<property name="foo" value="bar"/>
@@ -39,7 +39,7 @@
 			<property name="int" value="5"/>
 		</subservice>
 	</comp:composite>
-	
+
 	<comp:composite name="composite.bar.5-refuse2" architecture="true">
 		<subservice action="instantiate" specification="org.apache.felix.ipojo.test.composite.service.BarService">
 			<property name="string" value="foo"/>
@@ -56,7 +56,7 @@
 			<property name="strAProp" value="{a,b,c}"/>
 		</instance>
 	</comp:composite>
-	
+
 	<!-- Scope test -->
 	<component name="SCOPE-provider" classname="org.apache.felix.ipojo.test.instance.ServiceProvider">
 		<provides/>
@@ -72,4 +72,18 @@
 	<comp:composite name="SCOPE-badscope">
 		<instance component="SCOPE-cons"/>
 	</comp:composite>
+
+	<!-- Instance configuration  -->
+	<comp:composite name="CONF-MySuperComposite">
+                <instance component="COMPO-FooProviderType-2">
+                               <property name="int" value="3"/>
+                </instance>
+                <subservice action="instantiate"
+					specification="org.apache.felix.ipojo.test.composite.service.FooService">
+					<property name="boolean" value="true"/>
+					<property name="string" value="foo"/>
+					<property name="strAprop" value="{foo, bar, baz}"/>
+					<property name="int" value="3"/>
+				</subservice>
+	</comp:composite>
 </ipojo>