[cdi-dev] Veto and Requires

Pete Muir pmuir at redhat.com
Tue Oct 18 10:41:16 EDT 2011


Yeah, @Veto makes this use of @Typed "first class".

Any thoughts on the naming Mark?

On 18 Oct 2011, at 15:37, Mark Struberg wrote:

> Hi!
> 
> Nope, CODI has none of those methods, because
> 
> @Veto can already be done via @Typed(), even in CDI-1.0. The mechanics of ProcessAnnotatedType#veto() and @Typed() are a bit different, but they lead to the same result.
> Rick, you need @Veto or @Typed() if you e.g. have a producer method for a class in a BDA. Otherwise you will get an AmbiguousResolutionException (because both the class and the producer methods are Bean<YourClass>).
> 
> 
> @Requires is really needed in the CDI-1.1 spec. Because the Seam3 @Optional Extension is not really portable as it assumes that NoClassDefFoundErrors and ClassNotFoundExceptions will get swallowed while the BeanManager performs the Classpath scanning. This has to be specified in CDI-1.1
> 
> 
> LieGrue,
> strub
> 
> 
> 
> 
> ----- Original Message -----
>> From: Pete Muir <pmuir at redhat.com>
>> To: Rick Hightower <richardhightower at gmail.com>
>> Cc: cdi-dev <cdi-dev at lists.jboss.org>
>> Sent: Tuesday, October 18, 2011 3:25 PM
>> Subject: Re: [cdi-dev] Veto and Requires
>> 
>> 
>> On 18 Oct 2011, at 06:59, Rick Hightower wrote:
>> 
>>> "Any class or package may be prevented from providing bean definitions 
>> based on the availability of other classes by adding the @Requires annotation on 
>> the class or package."
>>> 
>>> 
>>> @Requires({Customer.class, Supplier.class}) public class Order { ...
>>> 
>>> }
>>> 
>>> 
>>> 
>>> 
>>> Spring has something similar called @Required with some different behavior. 
>> But now that I think on it... it is different enough....
>>> 
>>> I'd prefer explicit names for these annotations. @ExcludeFromCDI and @ 
>> ExcludeFromCDIIfMissing.
>>> 
>>> I know those  are  horrible names too. Not a big fan of @Veto and 
>> @Requires.
>> 
>> Hmm. Those names are not particularly consistent with the language style or 
>> meaning used in CDI (for example, we never talk about CDI that way in the spec).
>> 
>> @Veto is consistent with the .veto() method in the SPI, which is why it was 
>> chosen.
>> 
>> @Requires we agonised over for a long time, but couldn't come up with 
>> anything better. If anyone has a better idea, please speak :-)
>> 
>>> How about @ExcludeAsSource, and it has an optional attribute called 
>> requires that takes an array of class types?
>> 
>> I'm not sure this makes any sense, you aren't "excluded it as 
>> source" (the class definition is still available), but vetoing the use of 
>> the class as a bean. @Excludes could work (and is consistent with the CDI 
>> style), possibly with an attribute called unlessAvailable (or something like 
>> that).
>> 
>>> 
>>> I really really hate @Veto and @Requires. I guess I should search the mail 
>> list and see if I missed this conversation.
>> 
>> This was originally discussed on the seam or weld mailing lists, we had a long 
>> discussion there.
>> 
>> I think CODI has something similar, but can't find the naming right now.
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>> 




More information about the cdi-dev mailing list