[jboss-dev-forums] [JBoss Microcontainer Development] - Re: Supporting qualifiers in MC

kabir.khan@jboss.com do-not-reply at jboss.com
Tue Nov 24 14:39:38 EST 2009


I am able to add qualifiers to the bean level via xml easily, e.g.:

  | <bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
  |    <qualifier>
  |      <javabean xmlns="urn:jboss:javabean:1.0" class="java.util.Date"/>
  |      <javabean xmlns="urn:jboss:javabean:1.0" class="java.lang.String"/>
  |    </qualifier>
  | </bean>
  | <bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
  |    <qualifier type="Wanted">aop</qualifier>
  | </bean>
  | 
This is handled by a sub class of AbstractRelatedClassMetadata which hardcodes the name of the class depending on the qualifier type being Wanted or Supplied (Default).

Now, trying to add this for injection points, I get the following to parse:

  | <bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
  |    <property name="test">
  |       <inject>
  |          <qualifier>
  |             <javabean xmlns="urn:jboss:javabean:1.0" class="java.util.Date"/>
  |             <javabean xmlns="urn:jboss:javabean:1.0" class="java.lang.String"/>
  |          </qualifier>
  |       </inject>
  |    </property>
  | </bean>
  | 

But since I also want to be able to add these qualifiers directly programatically whereby I have been doing:

  |       AbstractInjectionValueMetaData inject = new AbstractInjectionValueMetaData();
  |       inject.setInjectionPointQualifiers(new HashSet<Object>(Arrays.asList(qualifiers)));
  | 

I end up with two sets of properties in AbstractInjectionValueMetaData for the same thing:

  |    /**
  |     * Get the injectionPointQualifiers
  |     * @return the injectionPointQualifiers
  |     */
  |    public Set<Object> getInjectionPointQualifiers()
  |    {
  |       return injectionPointQualifiers;
  |    }
  | 
  |    /**
  |     * Set the injectionPointQualifiers
  |     * @param injectionPointQualifiers the injectionPointQualifiers to set
  |     */
  |    public void setInjectionPointQualifiers(Set<Object> injectionPointQualifiers)
  |    {
  |       this.injectionPointQualifiers = injectionPointQualifiers;
  |    }
  |    
  |    /**
  |     * Get the injectionPointQualifierMetaData
  |     * @return the injectionPointQualifierMetaData
  |     */
  |    public Set<RelatedClassMetaData> getInjectionPointQualifierMetaData()
  |    {
  |       return injectionPointQualifierMetaData;
  |    }
  | 
  |    /**
  |     * Set the injectionPointQualifierMetaData
  |     * @param injectionPointQualifierMetaData the injectionPointQualifierMetaData to set
  |     */
  |    @XmlElement(name="qualifier", type=AbstractQualifierMetaData.class) //Sub-class of AbstractRelatedClassMetaData
  |    public void setInjectionPointQualifierMetaData(Set<RelatedClassMetaData> injectionPointQualifierMetaData)
  |    {
  |       this.injectionPointQualifierMetaData = injectionPointQualifierMetaData;
  |    }
  | 

I like the convenience of being able to call setInjectionPointQualifiers() directly when creating this programatically without having to wrap it up in an AbstractQualifierMetaData, but I guess that can be hidden in the BeanMetaDataBuilder. So unless somebody knows how to avoid that, I'll take that route.

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4267388#4267388

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4267388



More information about the jboss-dev-forums mailing list