[webbeans-dev] producer method trumps raw dependent type?

Dan Allen dan.j.allen at gmail.com
Thu Jul 30 17:45:35 EDT 2009


FAQ created. Feel free to revise or clarify. I'm sure this page will get a
lot of attention because it's an important aspect of how CDI functions.

http://www.seamframework.org/Documentation/HowDoAResolveAnAmbiguousResolutionExceptionBetweenAProducerMethodAndARawType

-Dan

On Thu, Jul 23, 2009 at 7:45 AM, Pete Muir <pmuir at redhat.com> wrote:

> Probably a good FAQ http://www.seamframework.org/Documentation/WebBeans
> On 22 Jul 2009, at 15:05, Dan Allen wrote:
>
>  Okay, so there is an explicit step that must be taken for a producer
>> method to win over a @Current bean (does not have additional bindings) of
>> that type. I suspect in most cases developers will choose to use the binding
>> type since that is the type-safe approach.
>>
>> The designation of the alternative class in beans.xml makes all producer
>> methods in that class have a higher precedence than any @Current bean of
>> that type, correct? Is it also possible to specify a single method in
>> beans.xml? There is alluded to in the Policy section, but no examples to
>> support it.
>>
>> Btw, I think this would be a lot clearer if it was explicitly stated in
>> the spec how a producer method relates to a @Current bean of that type. I
>> guess you could say it can be implied, but the first time someone goes to
>> create a producer method, I can see them not realizing that they have to
>> take an extra step to make it the preferred source.
>>
>> -Dan
>>
>> On Wed, Jul 22, 2009 at 7:13 AM, Pete Muir <pmuir at redhat.com> wrote:
>>
>> On 22 Jul 2009, at 03:18, Dan Allen wrote:
>>
>> After the recent revisions of the JSR-299 spec, I'm finding that I'm a tad
>> confused about the bean selection algorithm when a producer method exists.
>>
>> Consider the following:
>>
>> class PotatoChip {
>> }
>>
>> class SnackFactory() {
>>   public @Produces PotatoChip createPotatoChip() {
>>       return new PotatoChip();
>>   }
>> }
>>
>> 1) Does the produced PotatoChip take precedence over the raw dependent
>> type when being selected for injection?
>>
>> No.
>>
>>
>>
>> 2) How do I get the Bean<PotatoChip> that represents the producer method?
>>
>> BeanManager#getBeans(PotatoChip.class) returns two beans that are
>> indistinguishable from the public API.
>>
>> either:
>>
>> @Alternative
>>
>> class SnackFactory() {
>>   public @Produces PotatoChip createPotatoChip() {
>>       return new PotatoChip();
>>   }
>> }
>>
>> <beans>
>>  <alternatives>
>>     <alternative>SnackFactory</alternative>
>>  </alternatives>
>> </beans>
>>
>> or
>>
>> class SnackFactory() {
>>   public @Produces @Snack PotatoChip createPotatoChip() {
>>       return new PotatoChip();
>>   }
>> }
>>
>> BeanManager.getBeans(PotatoChip.class, new AnnotationLiteral<Snack>() {});
>>
>> where @Snack is a binding type
>>
>>
>>
>> 3) What if the producer method is @RequestScoped? How do I get the
>> request-scoped produce instead of the dependent bean?
>>
>>     Bean<PotatoChip> potatoChipBean = null;
>>     for (Bean<PotatoChip> candidate : getBeans(PotatoChip.class))
>>     {
>>        if (candidate.getScopeType().equals(RequestScoped.class))
>>        {
>>           potatoChipBean = candidate;
>>           break;
>>        }
>>     }
>>
>> Sorry if this sounds like a dumb question. The spec has changed a lot and
>> my memory is getting mixed in with the current set of facts.
>>
>> As above.
>>
>> It's possible the RI doesn't actually reflect this behavior atm - if you
>> have a problem, make sure there is a test, then change the RI or file a
>> WBRI.
>>
>>
>>
>> --
>> Dan Allen
>> Senior Software Engineer, Red Hat | Author of Seam in Action
>> Registered Linux User #231597
>>
>> http://mojavelinux.com
>> http://mojavelinux.com/seaminaction
>> http://in.relation.to/Bloggers/Dan
>> _______________________________________________
>> webbeans-dev mailing list
>> webbeans-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/webbeans-dev
>>
>
>


-- 
Dan Allen
Senior Software Engineer, Red Hat | Author of Seam in Action
Registered Linux User #231597

http://mojavelinux.com
http://mojavelinux.com/seaminaction
http://in.relation.to/Bloggers/Dan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/weld-dev/attachments/20090730/f0ff707e/attachment.html 


More information about the weld-dev mailing list