[jboss-cvs] JBossAS SVN: r97040 - in projects/kernel/trunk/kernel: src/main/java/org/jboss/beans/metadata/plugins and 7 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Nov 26 11:31:56 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-11-26 11:31:56 -0500 (Thu, 26 Nov 2009)
New Revision: 97040

Added:
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithOptionalType.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithRequiredType.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testOptionalBeanQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleOptionalBeanQualifiers.xml
Removed:
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWantedType.xml
Modified:
   projects/kernel/trunk/kernel/pom.xml
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanQualifierMetaData.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectQualifierMetaData.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/QualifierType.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAndQualifierKey.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiersMdrUtil.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierTestCase.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/BeanQualifiersTestCase.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/InjectionPointQualifiersTestCase.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase.java
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeBeanQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndCompositeBeanQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndSimpleBeanQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleBeanQualifiers.xml
Log:
[JBKERNEL-63] Split bean level 'wanted' qualifiers to Optional and Required

Modified: projects/kernel/trunk/kernel/pom.xml
===================================================================
--- projects/kernel/trunk/kernel/pom.xml	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/pom.xml	2009-11-26 16:31:56 UTC (rev 97040)
@@ -31,8 +31,6 @@
           <!--testFailureIgnore>true</testFailureIgnore-->
           <excludes>
             <exclude>org/jboss/test/kernel/asynchronous/test/**</exclude>
-            <exclude>org/jboss/test/kernel/qualifiers/test/**</exclude>
-            <exclude>org/jboss/test/kernel/deployment/xml/test/Qualifier*TestCase.*</exclude>
           </excludes>          
         </configuration>
       </plugin>   	   

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanQualifierMetaData.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanQualifierMetaData.java	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanQualifierMetaData.java	2009-11-26 16:31:56 UTC (rev 97040)
@@ -54,7 +54,11 @@
       this.type = type;
       if (type == QualifierType.SUPPLIED)
          internalSetClassName(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY);
+      else if (type == QualifierType.OPTIONAL)
+         internalSetClassName(QualifiersMdrUtil.OPTIONAL_QUALIFIER_KEY);
+      else if (type == QualifierType.REQUIRED)
+         internalSetClassName(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY);
       else
-         internalSetClassName(QualifiersMdrUtil.WANTED_QUALIFIER_KEY);
+         throw new IllegalArgumentException("NYI " + type);
    }
 }

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectQualifierMetaData.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectQualifierMetaData.java	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectQualifierMetaData.java	2009-11-26 16:31:56 UTC (rev 97040)
@@ -38,7 +38,7 @@
    
    public AbstractInjectQualifierMetaData()
    {
-      internalSetClassName(QualifiersMdrUtil.WANTED_QUALIFIER_KEY);
+      internalSetClassName(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY);
    }
    
    @Override

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/QualifierType.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/QualifierType.java	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/QualifierType.java	2009-11-26 16:31:56 UTC (rev 97040)
@@ -29,6 +29,7 @@
  * @version $Revision: 1.1 $
  */
 public enum QualifierType {
-   @XmlEnumValue("Supplied") SUPPLIED, 
-   @XmlEnumValue("Wanted") WANTED
+   @XmlEnumValue("Supplied") SUPPLIED,
+   @XmlEnumValue("Required") REQUIRED,
+   @XmlEnumValue("Optional") OPTIONAL
 }

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java	2009-11-26 16:31:56 UTC (rev 97040)
@@ -1205,11 +1205,17 @@
    }
 
    @Override
-   public BeanMetaDataBuilder addWantedQualifiers(Object... qualifiers)
+   public BeanMetaDataBuilder addRequiredQualifiers(Object... qualifiers)
    {
-      return createQualifiers(QualifierType.WANTED, qualifiers);
+      return createQualifiers(QualifierType.REQUIRED, qualifiers);
    }
    
+   @Override
+   public BeanMetaDataBuilder addOptionalQualifiers(Object... qualifiers)
+   {
+      return createQualifiers(QualifierType.OPTIONAL, qualifiers);
+   }
+   
    protected BeanMetaDataBuilder createQualifiers(QualifierType type, Object...qualifiers)
    {
       Set<RelatedClassMetaData> relatedClassMetaDatas = beanMetaData.getRelated();

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java	2009-11-26 16:31:56 UTC (rev 97040)
@@ -1875,7 +1875,7 @@
    
    /**
     * Create qualifiers supplied by the bean. Beans using contextual injection by class
-    * that have qualifiers either at the injection point or 'wanted' qualifiers at bean
+    * that have qualifiers either at the injection point or required/optional qualifiers at bean
     * level will use these qualifiers to narrow down the set of beans of the required type
     * for injection. Note that these qualifiers are stored in the set of related classes so
     * take care not to call {@link #setRelated(Set)} after calling this method.  
@@ -1889,19 +1889,31 @@
 
    /**
     * Create the default set of qualifiers we want this bean to use when doing contextual
-    * injection. Only used if there are no qualifiers at the injection point. The qualifiers
-    * are used to narrow down the set of beans of the required type for injection. Note that these 
-    * qualifiers are stored in the set of related classes so take care not to call 
-    * {@link #setRelated(Set)} after calling this method. 
+    * injection. The qualifiers are used to narrow down the set of beans of the required 
+    * type for injection. Note that these qualifiers are stored in the set of related classes 
+    * so take care not to call {@link #setRelated(Set)} after calling this method. 
     * 
     * @see BeanMetaData#getRelated()
     * @see #createSuppliedQualifier(Object...)
     * @param qualifiers the default qualifiers we want this bean to require
     * @return this builder
     */
-   public abstract BeanMetaDataBuilder addWantedQualifiers(Object...qualifiers);
+   public abstract BeanMetaDataBuilder addRequiredQualifiers(Object...qualifiers);
 
    /**
+    * Create the default set of optional qualifiers we want this bean to use when doing contextual
+    * injection. The qualifiers are used to narrow down the set of beans of the required 
+    * type for injection. Note that these qualifiers are stored in the set of related classes 
+    * so take care not to call {@link #setRelated(Set)} after calling this method. 
+    * 
+    * @see BeanMetaData#getRelated()
+    * @see #createSuppliedQualifier(Object...)
+    * @param qualifiers the default qualifiers we want this bean to require
+    * @return this builder
+    */
+   public abstract BeanMetaDataBuilder addOptionalQualifiers(Object...qualifiers);
+
+   /**
     * Create a null value
     * 
     * @return the null value
@@ -2100,7 +2112,7 @@
     *
     * @see BeanMetaData#isAutowireCandidate()
     * @param the qualifiers to use to narrow down beans of the matching type. These will override the ones specified for the 
-    * whole bean in {@link #addWantedQualifiers(Object...)} 
+    * whole bean in {@link #addRequiredQualifiers(Object...)} 
     * @return the contextual injection
     */
    public ValueMetaData createContextualInject(Object...qualifiers)
@@ -2130,7 +2142,7 @@
     * @param whenRequired when the injection is required. If null {@link ControllerState#CONFIGURED} is used.
     * @param dependentState the required state of the injected bean. If null {@link ControllerState#INSTALLED} is used.
     * @param the qualifiers to use to narrow down beans of the matching type. These will override the ones specified for the 
-    * whole bean in {@link #addWantedQualifiers(Object...)} 
+    * whole bean in {@link #addRequiredQualifiers(Object...)} 
     * @return the contextual injection
     */
    public ValueMetaData createContextualInject(ControllerState whenRequired, ControllerState dependentState, Object...qualifiers)
@@ -2166,7 +2178,7 @@
     * @param autowire the autowire type. If null, the type is {@link AutowireType#BY_CLASS} 
     * @param option the inject option
     * @param the qualifiers to use to narrow down beans of the matching type. These will override the ones specified for the 
-    * whole bean in {@link #addWantedQualifiers(Object...)} 
+    * whole bean in {@link #addRequiredQualifiers(Object...)} 
     * @return the contextual injection
     */
    public ValueMetaData createContextualInject(ControllerState whenRequired, ControllerState dependentState, AutowireType autowire, InjectOption option, Object...qualifiers)
@@ -2185,7 +2197,7 @@
     * @param search the search info describing how to search for the injected bean if we have a hierarchy of 
     * {@link org.jboss.dependency.spi.Controller}s
     * @param the qualifiers to use to narrow down beans of the matching type. These will override the ones specified for the 
-    * whole bean in {@link #addWantedQualifiers(Object...)} 
+    * whole bean in {@link #addRequiredQualifiers(Object...)} 
     * @return the contextual injection
     */
    public abstract ValueMetaData createContextualInject(ControllerState whenRequired, ControllerState dependentState, AutowireType autowire, InjectOption option, SearchInfo search, Object...qualifiers);

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAndQualifierKey.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAndQualifierKey.java	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAndQualifierKey.java	2009-11-26 16:31:56 UTC (rev 97040)
@@ -23,6 +23,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -69,17 +70,13 @@
       if (contexts == null || contexts.size() == 0)
          return null;
 
-      List<ControllerContext> found;
-      if (injectionPointQualifiers != null)
-         found = getContextsWithAllQualifiers(injectionPointQualifiers, contexts);
-      else
-      {
-         Set<Object> qualifiers = QualifiersMdrUtil.mergeWantedQualifiersFromMdr(context);
-         if (qualifiers == null || qualifiers.size() == 0)
-            return getFirstContext(contexts);
+      Set<Object> requiredQualifiers = (injectionPointQualifiers != null) ? injectionPointQualifiers : QualifiersMdrUtil.mergeRequiredQualifiersFromMdr(context);
+      Set<Object> optionalQualifiers = QualifiersMdrUtil.mergeOptionalQualifiersFromMdr(context);
+      if ((requiredQualifiers == null || requiredQualifiers.size() == 0) && (optionalQualifiers == null || optionalQualifiers.size() == 0))
+         return getFirstContext(contexts);
          
-         found = getContextsWithMostQualifiers(qualifiers, contexts);
-      }
+      List<ControllerContext> found = getContextWithAllRequiredAndMostOptionalQualifiers(requiredQualifiers, optionalQualifiers, contexts);
+      
       return getFirstContext(found);
    }
    
@@ -147,7 +144,7 @@
       return found;
    }
    
-   private List<ControllerContext> getContextsWithMostQualifiers(Set<Object> qualifiers, Set<ControllerContext> contexts)
+   private List<ControllerContext> getContextsWithMostQualifiers(Set<Object> qualifiers, Collection<ControllerContext> contexts)
    {
       int max = 0;
       List<ControllerContext> found = new ArrayList<ControllerContext>();
@@ -198,6 +195,55 @@
       return found;
    }
 
+   private List<ControllerContext> getContextWithAllRequiredAndMostOptionalQualifiers(Set<Object> requiredQualifiers, Set<Object> optionalQualifiers, Collection<ControllerContext> contexts)
+   {
+      int max = 0;
+      List<ControllerContext> found = new ArrayList<ControllerContext>();
+      
+      for (ControllerContext context : contexts)
+      {
+         Set<Object> suppliedQualifiers = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(context);
+         
+         int matches = 0;
+         boolean allTargetQualifiersMatched = true;
+         HashSet<Object> required = requiredQualifiers != null ? new HashSet<Object>(requiredQualifiers) : null;
+         if (suppliedQualifiers != null)
+         {
+            allTargetQualifiersMatched = true;
+            
+            for (Object supplied : suppliedQualifiers)
+            {
+               if (required != null && required.remove(supplied))
+               {
+                  matches++;
+                  continue;
+               }
+               else if (optionalQualifiers != null && optionalQualifiers.contains(supplied))
+               {
+                  matches++;
+                  continue;
+               }
+               allTargetQualifiersMatched = false;
+               break;
+            }
+         }
+         
+         if (allTargetQualifiersMatched && (required == null || required.size() == 0))
+         {
+            if (matches > max)
+            {
+               found.clear();
+               found.add(context);
+               max = matches;
+            }
+            else if (matches == max)
+            {
+               found.add(context);
+            }
+         }
+      }
+      return found;
+   }
 
    @Override
    protected void toString(JBossStringBuilder buffer)
@@ -205,7 +251,7 @@
       buffer.append("class=");
       buffer.append(type);
       buffer.append(" qualifiers=");
-      buffer.append(QualifiersMdrUtil.mergeWantedQualifiersFromMdr(context));
+      buffer.append(QualifiersMdrUtil.mergeRequiredQualifiersFromMdr(context));
    }
 
    @Override
@@ -213,8 +259,4 @@
    {
       toString(buffer);
    }
-   
-   
-   
-   
 }

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiersMdrUtil.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiersMdrUtil.java	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiersMdrUtil.java	2009-11-26 16:31:56 UTC (rev 97040)
@@ -35,6 +35,7 @@
 import org.jboss.metadata.spi.retrieval.MetaDataItem;
 import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
 import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.util.JBossObject;
 import org.jboss.util.collection.ConcurrentSet;
 
 /**
@@ -50,8 +51,12 @@
    public final static String SUPPLIED_QUALIFIER_KEY = QualifiersMdrUtil.class.getSimpleName() + "#SUPPLIED_QUALIFIERS";
 
    /** The key under which we will store a contexts wanted qualifier metadata */
-   public final static String WANTED_QUALIFIER_KEY = QualifiersMdrUtil.class.getSimpleName() + "#WANTED_QUALIFIERS";
+   public final static String REQUIRED_QUALIFIER_KEY = QualifiersMdrUtil.class.getSimpleName() + "#REQUIRED_QUALIFIERS";
+   
+   /** The key under which we will store a contexts required qualifier metadata */
+   public final static String OPTIONAL_QUALIFIER_KEY = QualifiersMdrUtil.class.getSimpleName() + "#OPTIONAL_QUALIFIERS";
 
+
    /**
     * Get the wanted qualifiers defined from the bean's metadata or in the Mdr.
     * This method is used when creating dependency items, which is before the Mdr
@@ -61,7 +66,23 @@
     */
    public static boolean hasWantedQualifiersInParentMdrOrBeanMetaData(KernelControllerContext context)
    {
-      Set<RelatedClassMetaData> md = getQualifiersMetaData(context, WANTED_QUALIFIER_KEY);
+      Set<RelatedClassMetaData> related = context.getBeanMetaData().getRelated();
+      if (related == null)
+         return false;
+      if (related.size() == 0)
+         return false;
+      
+      Set<RelatedClassMetaData> md = null; 
+      for (RelatedClassMetaData rcmd : related)
+      {
+         if (rcmd.getClassName().equals(REQUIRED_QUALIFIER_KEY) || rcmd.getClassName().equals(OPTIONAL_QUALIFIER_KEY))
+         {
+            if (md == null)
+               md = new HashSet<RelatedClassMetaData>();
+            md.add(rcmd);
+         }
+      }
+      
       if (md != null && md.size() > 0)
          return true;
 
@@ -72,7 +93,7 @@
          MetaData metaData = repository.getMetaData(key);
          if (metaData != null)
          {
-            if (metaData.getMetaData(WANTED_QUALIFIER_KEY) != null)
+            if (metaData.getMetaData(REQUIRED_QUALIFIER_KEY) != null)
                return true;
          }
          key = key.getParent();
@@ -100,27 +121,30 @@
          }
 
          Set<Object> suppliedSet = null;
-         Set<Object> wantedSet = null;
+         Set<Object> requiredSet = null;
+         Set<Object> optionalSet = null;
          for (RelatedClassMetaData rcmd : qualifiers)
          {
-            if (rcmd.getClassName().equals(SUPPLIED_QUALIFIER_KEY))
-            {
-               if (suppliedSet == null)
-                  suppliedSet = getQualifiersSet(retrieval, SUPPLIED_QUALIFIER_KEY, true); 
-               for (Object qualifier : rcmd.getEnabled())
-                  suppliedSet.add(qualifier);
-            }
-            else if (rcmd.getClassName().equals(WANTED_QUALIFIER_KEY))
-            {
-               if (wantedSet == null)
-                  wantedSet = getQualifiersSet(retrieval, WANTED_QUALIFIER_KEY, true);
-               for (Object qualifier : rcmd.getEnabled())
-                  wantedSet.add(qualifier);
-            }
+            if (JBossObject.equals(SUPPLIED_QUALIFIER_KEY, rcmd.getClassName()))
+               suppliedSet = addQualifiersToSet(suppliedSet, SUPPLIED_QUALIFIER_KEY, retrieval, rcmd);
+            else if (JBossObject.equals(REQUIRED_QUALIFIER_KEY, rcmd.getClassName()))
+               requiredSet = addQualifiersToSet(requiredSet, REQUIRED_QUALIFIER_KEY, retrieval, rcmd);
+            else if (JBossObject.equals(OPTIONAL_QUALIFIER_KEY, rcmd.getClassName()))
+               optionalSet = addQualifiersToSet(optionalSet, OPTIONAL_QUALIFIER_KEY, retrieval, rcmd);
          }
       }
    }
    
+   private static Set<Object> addQualifiersToSet(Set<Object> qualifiers, String key, MetaDataRetrieval retrieval, RelatedClassMetaData rcmd)
+   {
+      if (qualifiers == null)
+         qualifiers = getQualifiersSet(retrieval, key, true); 
+      for (Object qualifier : rcmd.getEnabled())
+         qualifiers.add(qualifier);
+      
+      return qualifiers;
+   }
+   
    /**
     * Removes the qualifiers for a context's bean metadata from the context's MDR metadata. 
     * 
@@ -140,14 +164,17 @@
          }
          
          Set<Object> suppliedSet = getQualifiersSet(retrieval, SUPPLIED_QUALIFIER_KEY, false);
-         Set<Object> wantedSet = getQualifiersSet(retrieval, WANTED_QUALIFIER_KEY, false);
+         Set<Object> requiredSet = getQualifiersSet(retrieval, REQUIRED_QUALIFIER_KEY, false);
+         Set<Object> optionalSet = getQualifiersSet(retrieval, OPTIONAL_QUALIFIER_KEY, false);
          for (RelatedClassMetaData rcmd : qualifiers)
          {
             Set<Object> targetSet = null;
             if (rcmd.getClassName().equals(SUPPLIED_QUALIFIER_KEY) && suppliedSet != null)
                targetSet = suppliedSet;
-            else if (rcmd.getClassName().equals(WANTED_QUALIFIER_KEY) && wantedSet != null)
-               targetSet = wantedSet;
+            else if (rcmd.getClassName().equals(REQUIRED_QUALIFIER_KEY) && requiredSet != null)
+               targetSet = requiredSet;
+            else if (rcmd.getClassName().equals(OPTIONAL_QUALIFIER_KEY) && optionalSet != null)
+               targetSet = optionalSet;
             
             if (targetSet != null)
             {
@@ -157,8 +184,10 @@
          }
          if (suppliedSet != null && suppliedSet.size() == 0)
             ((MutableMetaData)retrieval).removeMetaData(SUPPLIED_QUALIFIER_KEY, Set.class);
-         if (wantedSet != null && wantedSet.size() == 0)
-            ((MutableMetaData)retrieval).removeMetaData(WANTED_QUALIFIER_KEY, Set.class);
+         if (requiredSet != null && requiredSet.size() == 0)
+            ((MutableMetaData)retrieval).removeMetaData(REQUIRED_QUALIFIER_KEY, Set.class);
+         if (optionalSet != null && optionalSet.size() == 0)
+            ((MutableMetaData)retrieval).removeMetaData(OPTIONAL_QUALIFIER_KEY, Set.class);
       }
    }
    
@@ -175,64 +204,29 @@
    }
    
    /**
-    * Gets all the wanted qualifiers for the context from the MDR. The returned set combines the qualifiers 
+    * Gets all the required qualifiers for the context from the MDR. The returned set combines the qualifiers 
     * found at all scope levels
     * 
     * @param context the context 
     * @return the found qualifiers
     */
-   public static Set<Object> mergeWantedQualifiersFromMdr(ControllerContext context)
+   public static Set<Object> mergeRequiredQualifiersFromMdr(ControllerContext context)
    {
-      return mergeQualifiersFromMdr(context, WANTED_QUALIFIER_KEY);
+      return mergeQualifiersFromMdr(context, REQUIRED_QUALIFIER_KEY);
    }
    
-   
-   private static Set<RelatedClassMetaData> getQualifiersMetaData(KernelControllerContext context, String key)
+   /**
+    * Gets all the optional qualifiers for the context from the MDR. The returned set combines the qualifiers 
+    * found at all scope levels
+    * 
+    * @param context the context 
+    * @return the found qualifiers
+    */
+   public static Set<Object> mergeOptionalQualifiersFromMdr(ControllerContext context)
    {
-      Set<RelatedClassMetaData> related = context.getBeanMetaData().getRelated();
-      if (related == null)
-         return null;
-      if (related.size() == 0)
-         return null;
-      
-      Set<RelatedClassMetaData> qualifiers = null; 
-      for (RelatedClassMetaData rcmd : related)
-      {
-         if (rcmd.getClassName().equals(key))
-         {
-            if (qualifiers == null)
-               qualifiers = new HashSet<RelatedClassMetaData>();
-            qualifiers.add(rcmd);
-         }
-      }
-      
-      return qualifiers;
+      return mergeQualifiersFromMdr(context, OPTIONAL_QUALIFIER_KEY);
    }
    
-   private static Set<Object> getQualifiersSet(MetaDataRetrieval retrieval, String key, boolean create)
-   {
-      MetaDataItem<?> item = retrieval.retrieveMetaData(key);
-      //TODO - The following is not threadsafe
-      Set<Object> set = null;
-      if (item == null)
-      {
-         if (create)
-         {
-            set = new ConcurrentSet<Object>();
-            ((MutableMetaData)retrieval).addMetaData(key, set, Set.class);
-         }
-         else
-         {
-            return null;
-         }
-      }
-      else
-      {
-         set = (Set<Object>)item.getValue();
-      }
-      return set;
-   }
-   
    private static Set<Object> mergeQualifiersFromMdr(ControllerContext context, String key)
    {
       if (context instanceof KernelControllerContext == false)
@@ -263,4 +257,29 @@
       }
       return set;
    }
+
+   private static Set<Object> getQualifiersSet(MetaDataRetrieval retrieval, String key, boolean create)
+   {
+      MetaDataItem<?> item = retrieval.retrieveMetaData(key);
+      //TODO - The following is not threadsafe
+      Set<Object> set = null;
+      if (item == null)
+      {
+         if (create)
+         {
+            set = new ConcurrentSet<Object>();
+            ((MutableMetaData)retrieval).addMetaData(key, set, Set.class);
+         }
+         else
+         {
+            return null;
+         }
+      }
+      else
+      {
+         set = (Set<Object>)item.getValue();
+      }
+      return set;
+   }
+   
 }

Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierTestCase.java	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierTestCase.java	2009-11-26 16:31:56 UTC (rev 97040)
@@ -108,16 +108,26 @@
       }
    }
 
-   public void testBeanQualifierWithWantedType() throws Exception
+   public void testBeanQualifierWithRequiredType() throws Exception
    {
-      RelatedClassMetaData related = getRelated("QualifierBeanWithWantedType.xml");
-      assertEquals(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, related.getClassName());
+      RelatedClassMetaData related = getRelated("QualifierBeanWithRequiredType.xml");
+      assertEquals(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, related.getClassName());
       Set<Object> enabled = related.getEnabled();
       assertNotNull(enabled);
       assertEquals(1, enabled.size());
       assertEquals("aop", enabled.iterator().next());
    }
    
+   public void testBeanQualifierWithOptionalType() throws Exception
+   {
+      RelatedClassMetaData related = getRelated("QualifierBeanWithOptionalType.xml");
+      assertEquals(QualifiersMdrUtil.OPTIONAL_QUALIFIER_KEY, related.getClassName());
+      Set<Object> enabled = related.getEnabled();
+      assertNotNull(enabled);
+      assertEquals(1, enabled.size());
+      assertEquals("aop", enabled.iterator().next());
+   }
+   
    public void testBeanQualifierWithSuppliedType() throws Exception
    {
       RelatedClassMetaData related = getRelated("QualifierBeanWithSuppliedType.xml");
@@ -152,7 +162,7 @@
             ValueMetaData valueMetaData = property.getValue();
             assertInstanceOf(valueMetaData, AbstractInjectionValueMetaData.class);
             RelatedClassMetaData related = checkRelated(((AbstractInjectionValueMetaData)valueMetaData).getQualifiers());
-            assertEquals(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, related.getClassName());
+            assertEquals(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, related.getClassName());
             Set<Object> enabled = related.getEnabled();
             assertNotNull(enabled);
             assertEquals(2, enabled.size());
@@ -173,7 +183,7 @@
       ValueMetaData valueMetaData = params.get(0).getValue();
       assertInstanceOf(valueMetaData, AbstractInjectionValueMetaData.class);
       RelatedClassMetaData related = checkRelated(((AbstractInjectionValueMetaData)valueMetaData).getQualifiers());
-      assertEquals(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, related.getClassName());
+      assertEquals(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, related.getClassName());
       Set<Object> enabled = related.getEnabled();
       assertNotNull(enabled);
       assertEquals(1, enabled.size());
@@ -191,7 +201,7 @@
       ValueMetaData valueMetaData = params.get(0).getValue();
       assertInstanceOf(valueMetaData, AbstractInjectionValueMetaData.class);
       RelatedClassMetaData related = checkRelated(((AbstractInjectionValueMetaData)valueMetaData).getQualifiers());
-      assertEquals(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, related.getClassName());
+      assertEquals(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, related.getClassName());
       Set<Object> enabled = related.getEnabled();
       assertNotNull(enabled);
       assertEquals(1, enabled.size());

Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/BeanQualifiersTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/BeanQualifiersTestCase.java	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/BeanQualifiersTestCase.java	2009-11-26 16:31:56 UTC (rev 97040)
@@ -55,15 +55,13 @@
 
    public void testContextsMDRHasQualifiers() throws Throwable
    {
-      MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
-      getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
-
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
-      bean2Builder.addSuppliedQualifiers("other", "other2");
-      bean2Builder.addWantedQualifiers("wanted1");
+      bean2Builder.addSuppliedQualifiers("supplied1", "supplied2");
+      bean2Builder.addRequiredQualifiers("required1");
+      bean2Builder.addOptionalQualifiers("optional1", "optional2", "optional3");
       KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
 
       try
@@ -74,41 +72,52 @@
          Set<Object> set = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(bean1Context);         
          assertNull(set);
        
+         set = QualifiersMdrUtil.mergeRequiredQualifiersFromMdr(bean1Context);         
+         assertNull(set);
+         
+         set = QualifiersMdrUtil.mergeOptionalQualifiersFromMdr(bean1Context);
+         assertNull(set);
+
          set = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(bean2Context);         
          assertNotNull(set);
-         assertTrue(set.contains("other"));
-         assertTrue(set.contains("other2"));
+         assertTrue(set.contains("supplied1"));
+         assertTrue(set.contains("supplied2"));
          assertEquals(2, set.size());
          
-         set = QualifiersMdrUtil.mergeWantedQualifiersFromMdr(bean1Context);         
-         assertNull(set);
+         set = QualifiersMdrUtil.mergeRequiredQualifiersFromMdr(bean2Context);         
+         assertNotNull(set);
+         assertTrue(set.contains("required1"));
+         assertEquals(1, set.size());
          
-         set = QualifiersMdrUtil.mergeWantedQualifiersFromMdr(bean2Context);         
+         set = QualifiersMdrUtil.mergeOptionalQualifiersFromMdr(bean2Context);
          assertNotNull(set);
-         assertTrue(set.contains("wanted1"));
-         assertEquals(1, set.size());
+         assertTrue(set.contains("optional1"));
+         assertTrue(set.contains("optional2"));
+         assertTrue(set.contains("optional3"));
+         assertEquals(3, set.size());
       }
       finally
       {
          undeploy(bean1Context);
          undeploy(bean2Context);
-         getMetaDataRepository().getMetaDataRepository().removeMetaDataRetrieval(ScopeKey.DEFAULT_SCOPE);
       }
    }
    
    public void testContextsMDRHasQualifiersFromAllLevels() throws Throwable
    {
       MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
-      loader.addMetaData(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, Collections.singleton("test"), Set.class);
-      loader.addMetaData(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, Collections.singleton("wanted1"), Set.class);
+      loader.addMetaData(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, Collections.singleton("supplied1"), Set.class);
+      loader.addMetaData(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, Collections.singleton("wanted1"), Set.class);
+      loader.addMetaData(QualifiersMdrUtil.OPTIONAL_QUALIFIER_KEY, Collections.singleton("optional1"), Set.class);
       getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
 
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
-      bean2Builder.addSuppliedQualifiers("other");
-      bean2Builder.addWantedQualifiers("wanted2");
+      bean2Builder.addSuppliedQualifiers("supplied2");
+      bean2Builder.addRequiredQualifiers("wanted2");
+      bean2Builder.addOptionalQualifiers("optional2");
       KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
 
       try
@@ -117,26 +126,37 @@
          assertBean("bean2", Bean.class);
          Set<Object> set = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(bean1Context);         
          assertNotNull(set);
-         assertTrue(set.contains("test"));
+         assertTrue(set.contains("supplied1"));
          assertEquals(1, set.size());
-       
+
+         set = QualifiersMdrUtil.mergeRequiredQualifiersFromMdr(bean1Context);         
+         assertNotNull(set);
+         assertTrue(set.contains("wanted1"));
+         assertEquals(1, set.size());
+
+         set = QualifiersMdrUtil.mergeOptionalQualifiersFromMdr(bean1Context);         
+         assertNotNull(set);
+         assertTrue(set.contains("optional1"));
+         assertEquals(1, set.size());
+
          set = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(bean2Context);         
          assertNotNull(set);
-         assertTrue(set.contains("other"));
-         assertTrue(set.contains("test"));
+         assertTrue(set.contains("supplied1"));
+         assertTrue(set.contains("supplied2"));
          assertEquals(2, set.size());
          
-         set = QualifiersMdrUtil.mergeWantedQualifiersFromMdr(bean1Context);         
-         assertNotNull(set);
-         assertTrue(set.contains("wanted1"));
-         assertEquals(1, set.size());
          
-         set = QualifiersMdrUtil.mergeWantedQualifiersFromMdr(bean2Context);         
+         set = QualifiersMdrUtil.mergeRequiredQualifiersFromMdr(bean2Context);         
          assertNotNull(set);
          assertTrue(set.contains("wanted1"));
          assertTrue(set.contains("wanted2"));
          assertEquals(2, set.size());
 
+         set = QualifiersMdrUtil.mergeOptionalQualifiersFromMdr(bean2Context);         
+         assertNotNull(set);
+         assertTrue(set.contains("optional1"));
+         assertTrue(set.contains("optional2"));
+         assertEquals(2, set.size());
       }
       finally
       {
@@ -157,7 +177,7 @@
 
       BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
       targetBuilder.setAutowireType(AutowireType.BY_CLASS);
-      targetBuilder.addWantedQualifiers("test");
+      targetBuilder.addRequiredQualifiers("test");
       KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
       try
       {
@@ -187,7 +207,7 @@
 
       BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
       targetBuilder.setAutowireType(AutowireType.BY_CLASS);
-      targetBuilder.addWantedQualifiers("test");
+      targetBuilder.addRequiredQualifiers("test");
       KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
       try
       {
@@ -203,7 +223,7 @@
       }
    }
 
-   public void testWantedQualifiersNotIncludingAllBeanQualifiers() throws Throwable
+   public void testRequiredQualifiersNotIncludingAllBeanQualifiers() throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
       bean1Builder.addSuppliedQualifiers("test", "other");
@@ -215,7 +235,7 @@
 
       BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
       targetBuilder.setAutowireType(AutowireType.BY_CLASS);
-      targetBuilder.addWantedQualifiers("test");
+      targetBuilder.addRequiredQualifiers("test");
       KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
       try
       {
@@ -231,9 +251,87 @@
       }
    }
    
-   public void testMoreWantedQualifiersThanBeanQualifiers() throws Throwable
+   public void testOptionalQualifiersOnly() throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      bean2Builder.addSuppliedQualifiers("test");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      targetBuilder.addOptionalQualifiers("test");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         assertBean("bean1", Bean.class);
+         Bean bean2 = assertBean("bean2", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean2, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testNoopOptionalQualifiers() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      targetBuilder.addOptionalQualifiers("test", "mock");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testNoopOptionalQualifiersAndAmbiguity() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      targetBuilder.addOptionalQualifiers("test", "mock");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         assertNoBean("target");
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testMoreRequiredQualifiersThanBeanQualifiers() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
       bean1Builder.addSuppliedQualifiers("test");
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
@@ -243,10 +341,38 @@
 
       BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
       targetBuilder.setAutowireType(AutowireType.BY_CLASS);
-      targetBuilder.addWantedQualifiers("test", "mock");
+      targetBuilder.addRequiredQualifiers("test", "mock");
       KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
       try
       {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         assertNoBean("target");
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testMoreOptionalQualifiersThanBeanQualifiers() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      bean1Builder.addSuppliedQualifiers("test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      bean2Builder.addSuppliedQualifiers("other");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      targetBuilder.addOptionalQualifiers("test", "mock");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
          Bean bean1 = assertBean("bean1", Bean.class);
          assertBean("bean2", Bean.class);
          TargetBean target = assertBean("target", TargetBean.class);
@@ -261,22 +387,52 @@
       }
    }
    
-   public void testMoreWantedQualifiersThanBeanQualifiersMostSelected() throws Throwable
+   public void testRequiredQualifierNotMatchedOptionalMatched() throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
-      bean1Builder.addSuppliedQualifiers("test", "other");
+      bean1Builder.addSuppliedQualifiers("test");
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
-      bean2Builder.addSuppliedQualifiers("test");
+      bean2Builder.addSuppliedQualifiers("other");
       KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
 
       BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
       targetBuilder.setAutowireType(AutowireType.BY_CLASS);
-      targetBuilder.addWantedQualifiers("test", "other", "mock");
+      targetBuilder.addRequiredQualifiers("mock");
+      targetBuilder.addOptionalQualifiers("test");
       KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
       try
       {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         assertNoBean("target");
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testRequiredQualifierMatchedOptionalNotMatched() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      bean1Builder.addSuppliedQualifiers("test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      bean2Builder.addSuppliedQualifiers("other");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      targetBuilder.addRequiredQualifiers("test");
+      targetBuilder.addOptionalQualifiers("mock");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
          Bean bean1 = assertBean("bean1", Bean.class);
          assertBean("bean2", Bean.class);
          TargetBean target = assertBean("target", TargetBean.class);
@@ -291,19 +447,51 @@
       }
    }
    
-   public void testMoreWantedQualifiersThanBeanQualifiersMostSelected2() throws Throwable
+   public void testMoreOptionalQualifiersThanBeanQualifiersMostSelected() throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      bean1Builder.addSuppliedQualifiers("test", "other", "another");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      bean2Builder.addSuppliedQualifiers("test", "another");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      targetBuilder.addRequiredQualifiers("test");
+      targetBuilder.addOptionalQualifiers("other", "another", "mock");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testMoreOptionalQualifiersThanBeanQualifiersMostSelected2() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
       bean1Builder.addSuppliedQualifiers("test");
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
-      bean2Builder.addSuppliedQualifiers("test", "other");
+      bean2Builder.addSuppliedQualifiers("test", "other", "another");
       KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
 
       BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
       targetBuilder.setAutowireType(AutowireType.BY_CLASS);
-      targetBuilder.addWantedQualifiers("test", "other", "mock");
+      targetBuilder.addRequiredQualifiers("test");
+      targetBuilder.addOptionalQualifiers("other", "another", "mock");
       KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
       try
       {
@@ -321,7 +509,7 @@
       }
    }
    
-   public void testMoreWantedQualifiersThanBeanQualifiersAmbiguity() throws Throwable
+   public void testMoreOptionalQualifiersThanBeanQualifiersAmbiguity() throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
       bean1Builder.addSuppliedQualifiers("test");
@@ -333,7 +521,7 @@
 
       BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
       targetBuilder.setAutowireType(AutowireType.BY_CLASS);
-      bean1Builder.addWantedQualifiers("test", "other");
+      bean1Builder.addOptionalQualifiers("test", "other");
       KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
       try
       {
@@ -360,7 +548,7 @@
 
       BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
       targetBuilder.setAutowireType(AutowireType.BY_CLASS);
-      targetBuilder.addWantedQualifiers("test");
+      targetBuilder.addRequiredQualifiers("test");
       KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
       try
       {
@@ -393,7 +581,7 @@
 
       BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
       targetBuilder.setAutowireType(AutowireType.BY_CLASS);
-      targetBuilder.addWantedQualifiers("test", "other");
+      targetBuilder.addRequiredQualifiers("test", "other");
       KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
       try
       {
@@ -412,10 +600,10 @@
       }
    }
 
-   public void testWantedQualifiersFromHigherLevel() throws Throwable
+   public void testRequiredQualifiersFromHigherLevel() throws Throwable
    {
       MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
-      loader.addMetaData(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, Collections.singleton("test"), Set.class);
+      loader.addMetaData(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, Collections.singleton("test"), Set.class);
       getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
 
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
@@ -440,10 +628,10 @@
       }
    }
    
-   public void testWantedQualifiersFromHigherLevelAndInstance() throws Throwable
+   public void testOptionalQualifiersFromHigherLevelAndRequiredOnInstance() throws Throwable
    {
       MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
-      loader.addMetaData(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, Collections.singleton("test"), Set.class);
+      loader.addMetaData(QualifiersMdrUtil.OPTIONAL_QUALIFIER_KEY, Collections.singleton("test"), Set.class);
       getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
 
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
@@ -456,7 +644,7 @@
 
       BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
       targetBuilder.setAutowireType(AutowireType.BY_CLASS);
-      targetBuilder.addWantedQualifiers("other");
+      targetBuilder.addRequiredQualifiers("other");
       KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
       try
       {
@@ -474,4 +662,39 @@
          getMetaDataRepository().getMetaDataRepository().removeMetaDataRetrieval(ScopeKey.DEFAULT_SCOPE);
       }
    }
+
+   public void testOptionalQualifiersFromHigherLevelResolvingInstanceAmbiguity() throws Throwable
+   {
+      MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
+      loader.addMetaData(QualifiersMdrUtil.OPTIONAL_QUALIFIER_KEY, Collections.singleton("test"), Set.class);
+      getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
+
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      bean1Builder.addSuppliedQualifiers("other", "test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      bean2Builder.addSuppliedQualifiers("other");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      targetBuilder.addRequiredQualifiers("other");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+         getMetaDataRepository().getMetaDataRepository().removeMetaDataRetrieval(ScopeKey.DEFAULT_SCOPE);
+      }
+   }
 }

Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/InjectionPointQualifiersTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/InjectionPointQualifiersTestCase.java	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/InjectionPointQualifiersTestCase.java	2009-11-26 16:31:56 UTC (rev 97040)
@@ -68,7 +68,7 @@
    private <T extends Target> void testSimpleQualifiers(Class<T> targetClass, TargetType type) throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
-      bean1Builder.addSuppliedQualifiers(bean1Builder, "test");
+      bean1Builder.addSuppliedQualifiers("test");
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
@@ -109,15 +109,15 @@
    private <T extends Target> void testNeedsAllQualifiers(Class<T> targetClass, TargetType type) throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
-      bean1Builder.addSuppliedQualifiers(bean1Builder, "test1", "test2");
+      bean1Builder.addSuppliedQualifiers("test1", "test2");
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
-      bean2Builder.addSuppliedQualifiers(bean2Builder, "test1", "test3", "test2");
+      bean2Builder.addSuppliedQualifiers("test1", "test3", "test2");
       KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean3Builder = BeanMetaDataBuilder.createBuilder("bean3", Bean.class.getName());
-      bean3Builder.addSuppliedQualifiers(bean3Builder, "test2", "test3");
+      bean3Builder.addSuppliedQualifiers("test2", "test3");
       KernelControllerContext bean3Context = deploy(bean3Builder.getBeanMetaData());
 
       KernelControllerContext targetContext = deploy(createTargetMetaData(type, "test1", "test2", "test3"));
@@ -157,11 +157,11 @@
    private <T extends Target> void testNoContextHasAllQualifiers(Class<T> targetClass, TargetType type) throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
-      bean1Builder.addSuppliedQualifiers(bean1Builder, "test");
+      bean1Builder.addSuppliedQualifiers("test");
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
-      bean2Builder.addSuppliedQualifiers(bean2Builder, "other");
+      bean2Builder.addSuppliedQualifiers("other");
       KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
 
       KernelControllerContext targetContext = deploy(createTargetMetaData(type, "test", "other"));
@@ -197,11 +197,11 @@
    private <T extends Target> void testTwoContextsHaveAllRequiredQualifiers(Class<T> targetClass, TargetType type) throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
-      bean1Builder.addSuppliedQualifiers(bean1Builder, "test1", "test2");
+      bean1Builder.addSuppliedQualifiers("test1", "test2");
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
-      bean2Builder.addSuppliedQualifiers(bean2Builder, "test1", "test2");
+      bean2Builder.addSuppliedQualifiers("test1", "test2");
       KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
 
       KernelControllerContext targetContext = deploy(createTargetMetaData(type, "test1", "test2"));
@@ -237,11 +237,11 @@
    private <T extends Target> void testTwoContextsHaveMoreThanRequiredQualifiers(Class<T> targetClass, TargetType type) throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
-      bean1Builder.addSuppliedQualifiers(bean1Builder, "test1", "test2", "extra1");
+      bean1Builder.addSuppliedQualifiers("test1", "test2", "extra1");
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
-      bean2Builder.addSuppliedQualifiers(bean2Builder, "test1", "test2", "extra2");
+      bean2Builder.addSuppliedQualifiers("test1", "test2", "extra2");
       KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
 
       KernelControllerContext targetContext = deploy(createTargetMetaData(type, "test1", "test2"));
@@ -277,11 +277,11 @@
    private <T extends Target> void testBeanQualifiersIgnoredWhenQualifiersPresent(Class<T> targetClass, TargetType type) throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
-      bean1Builder.addSuppliedQualifiers(bean1Builder, "test");
+      bean1Builder.addSuppliedQualifiers("test");
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
-      bean2Builder.addSuppliedQualifiers(bean2Builder, "other");
+      bean2Builder.addSuppliedQualifiers("other");
       KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
 
       KernelControllerContext targetContext = deploy(addWantedQualifiers(createTargetMetaData(type, "test"), "ignored"));
@@ -319,11 +319,11 @@
    private <T extends Target> void testBeanQualifiersIgnoredWhenQualifiersPresent2(Class<T> targetClass, TargetType type) throws Throwable
    {
       BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
-      bean1Builder.addSuppliedQualifiers(bean1Builder, "test");
+      bean1Builder.addSuppliedQualifiers("test");
       KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
 
       BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
-      bean2Builder.addSuppliedQualifiers(bean2Builder, "other");
+      bean2Builder.addSuppliedQualifiers("other");
       KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
 
       KernelControllerContext targetContext = deploy(addWantedQualifiers(createTargetMetaData(type, "injectionpoint"), "test"));
@@ -344,7 +344,7 @@
    private BeanMetaData addWantedQualifiers(BeanMetaData bmd, Object...qualifiers)
    {
       BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(bmd);
-      builder.addWantedQualifiers(builder, qualifiers);
+      builder.addRequiredQualifiers(builder, qualifiers);
       return builder.getBeanMetaData();
    }
 

Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase.java	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase.java	2009-11-26 16:31:56 UTC (rev 97040)
@@ -67,6 +67,16 @@
       assertEquals(bean, target.getBean());
    }
 
+   public void testSimpleOptionalBeanQualifiers()
+   {
+      assertBean("bean1", Bean.class);
+      Bean bean = assertBean("bean2", Bean.class);
+      assertBean("bean3", Bean.class);
+      
+      TargetBean target = assertBean("target", TargetBean.class);
+      assertEquals(bean, target.getBean());
+   }
+   
    public void testPropertyAndSimpleBeanQualifiers()
    {
       assertBean("bean1", Bean.class);

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithOptionalType.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithOptionalType.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithOptionalType.xml	2009-11-26 16:31:56 UTC (rev 97040)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+   <qualifier type="Optional">aop</qualifier>
+</bean>

Copied: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithRequiredType.xml (from rev 96942, projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWantedType.xml)
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithRequiredType.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithRequiredType.xml	2009-11-26 16:31:56 UTC (rev 97040)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+   <qualifier type="Required">aop</qualifier>
+</bean>

Deleted: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWantedType.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWantedType.xml	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWantedType.xml	2009-11-26 16:31:56 UTC (rev 97040)
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
-   <qualifier type="Wanted">aop</qualifier>
-</bean>

Modified: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeBeanQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeBeanQualifiers.xml	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeBeanQualifiers.xml	2009-11-26 16:31:56 UTC (rev 97040)
@@ -48,7 +48,7 @@
    </bean>
    
    <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetBean">
-      <qualifier type="Wanted">
+      <qualifier type="Required">
          <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
             <constructor>
                <parameter>test1</parameter>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testOptionalBeanQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testOptionalBeanQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testOptionalBeanQualifiers.xml	2009-11-26 16:31:56 UTC (rev 97040)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test1</qualifier>
+      <qualifier>test2</qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test3</qualifier>
+      <qualifier>test2</qualifier>
+      <qualifier>test1</qualifier>
+   </bean>
+   
+   <bean name="bean3" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test</qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetBean">
+      <qualifier type="Required">test1</qualifier>
+      <qualifier type="Required">test2</qualifier>
+      <qualifier type="Required">test3</qualifier>
+   </bean>
+   
+</deployment>

Modified: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndCompositeBeanQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndCompositeBeanQualifiers.xml	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndCompositeBeanQualifiers.xml	2009-11-26 16:31:56 UTC (rev 97040)
@@ -28,7 +28,7 @@
    </bean>
    
    <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetPropertyBean">
-      <qualifier  type="Wanted">
+      <qualifier  type="Required">
          <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
             <constructor>
                <parameter>test1</parameter>

Modified: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndSimpleBeanQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndSimpleBeanQualifiers.xml	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndSimpleBeanQualifiers.xml	2009-11-26 16:31:56 UTC (rev 97040)
@@ -12,8 +12,8 @@
    </bean>
    
    <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetPropertyBean">
-      <qualifier type="Wanted">test1</qualifier>
-      <qualifier type="Wanted">test2</qualifier>
+      <qualifier type="Required">test1</qualifier>
+      <qualifier type="Required">test2</qualifier>
       <property name="bean"><inject/></property>
    </bean>
    

Modified: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleBeanQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleBeanQualifiers.xml	2009-11-26 16:26:16 UTC (rev 97039)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleBeanQualifiers.xml	2009-11-26 16:31:56 UTC (rev 97040)
@@ -18,9 +18,9 @@
    </bean>
    
    <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetBean">
-      <qualifier type="Wanted">test1</qualifier>
-      <qualifier type="Wanted">test2</qualifier>
-      <qualifier type="Wanted">test3</qualifier>
+      <qualifier type="Required">test1</qualifier>
+      <qualifier type="Required">test2</qualifier>
+      <qualifier type="Required">test3</qualifier>
    </bean>
    
 </deployment>

Copied: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleOptionalBeanQualifiers.xml (from rev 96942, projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleBeanQualifiers.xml)
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleOptionalBeanQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleOptionalBeanQualifiers.xml	2009-11-26 16:31:56 UTC (rev 97040)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test1</qualifier>
+      <qualifier>test2</qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test3</qualifier>
+      <qualifier>test2</qualifier>
+      <qualifier>test1</qualifier>
+   </bean>
+   
+   <bean name="bean3" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test</qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetBean">
+      <qualifier type="Required">test1</qualifier>
+      <qualifier type="Required">test2</qualifier>
+      <qualifier type="Optional">test3</qualifier>
+   </bean>
+   
+</deployment>




More information about the jboss-cvs-commits mailing list