[cdi-dev] Veto and Requires

Mark Struberg struberg at yahoo.de
Tue Oct 18 10:37:23 EDT 2011


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