There are a few ways to solve this riddle, but I personally prefer the ones who are readable. Some containers fail if you don't have a default ct -> not a perfect solution. I also don't really like @Alternative, because it is really confusing. A later maintainer of the code will not easily see that this is only for disabling it and is never intended to get listed as <alternatives> in beans.xml
@Typed still looks the cleanest to me. LieGrue, strub ----- Original Message ----- > From: "Howard W. Smith, Jr." <[email protected]> > To: [email protected] > Cc: Mark Struberg <[email protected]> > Sent: Sunday, 19 May 2013, 21:25 > Subject: Re: Re[2]: [OWB] CDI - how to realize default producer? > > +1 OP and responses! > > > On Sun, May 19, 2013 at 1:24 PM, Romain Manni-Bucau > <[email protected]>wrote: > >> by default your bean will be a managed bean so injectable, just add >> anything to prevent it (constructor without @Inject for instance) and >> you'll remove the conflict. >> >> >> veto = remove it from cdi (= handled manually) >> Typed() = keep it in cdi but for Object type only (as all beans) >> >> @Any ~= i don't care about details just give me it! >> @Default = just because in cdi identity is type + qualifier so we need a >> default one ;) >> >> *Romain Manni-Bucau* >> *Twitter: @rmannibucau <https://twitter.com/rmannibucau>* >> *Blog: **http://rmannibucau.wordpress.com/*< >> http://rmannibucau.wordpress.com/> >> *LinkedIn: **http://fr.linkedin.com/in/rmannibucau* >> *Github: https://github.com/rmannibucau* >> >> >> >> 2013/5/19 <[email protected]> >> >> > Thank you guys for the excellent info! >> > >> > Now that i know what to search for, theres actually some discussion > going >> > on over this subject in internet. >> > >> > Although it works for me, i have the feeling that both solutions > (@Typed >> > and @Veto) are rather workarounds (i saw on stacktrace one more >> suggestion >> > to annotate the bean to be produced with @Alternative without enabling >> it) >> > because the intent of those annotations is different(?) >> > >> > Just for the sake of completeness, why would @Default or @New or @Any >> > together with @Produces on producer method will not work? >> > >> > Br >> > Reinis >> > >> > >> > -----Ursprüngliche Nachricht----- >> > Betreff: Re: [OWB] CDI - how to realize default producer? >> > Von: "Mark Struberg" <[email protected]> >> > An: [email protected] >> > Datum: 2013/05/19 14:40:52 >> > >> > Yes, it's kind of different to ProcessAnnotatedType#veto(), but it > has >> the >> > same effect - your class and your producer don't clash anymore ;) >> > >> > And it comes without any expenses straight out of CDI-1.0 >> > >> > LieGrue, >> > strub >> > >> > >> > >> > >> > ----- Original Message ----- >> > > From: John D. Ament <[email protected]> >> > > To: [email protected]; Mark Struberg > <[email protected]> >> > > Cc: >> > > Sent: Sunday, 19 May 2013, 14:14 >> > > Subject: Re: [OWB] CDI - how to realize default producer? >> > > >> > > Well, I think @Typed is another work around. It doesn't > remove the >> > object >> > > from the archive simply says you can't reference it by > anything but >> > > what's >> > > in @Typed. >> > > >> > > >> > > On Sun, May 19, 2013 at 6:19 AM, Mark Struberg > <[email protected]> >> > wrote: >> > > >> > >> CDI-1.0 _has_ a concept of vetoing. Simply annotate Foo with >> > >> >> > >> @Typed() >> > >> >> > >> LieGrue, >> > >> strub >> > >> >> > >> >> > >> >> > >> >> > >> ----- Original Message ----- >> > >> > From: John D. Ament <[email protected]> >> > >> > To: [email protected] >> > >> > Cc: >> > >> > Sent: Sunday, 19 May 2013, 4:37 >> > >> > Subject: Re: [OWB] CDI - how to realize default > producer? >> > >> > >> > >> >T he easiest way is to actually put a qualifier on the > class itself, >> > > and >> > >> > then never inject based on that qualifier. CDI 1.0 has > no concept >> of >> > > a >> > >> > veto'd bean, but you could write an extension > yourself that >> > > veto'd your >> > >> > class. >> > >> > >> > >> > Extensions exist out there, I believe CODI has one and > Seam3 has >> one. >> > >> > Seam3 uses @Veto to mark these beans as veto'd. >> > >> > >> > >> > >> > >> > On Sat, May 18, 2013 at 6:48 PM, Reinis Vicups >> > > <[email protected]> wrote: >> > >> > >> > >> >> Hi, >> > >> >> >> > >> >> I'd like to use a producer method in ALL CASES > when >> > > @Injecting a >> > >> >> particular bean. >> > >> >> >> > >> >> It looks like this: >> > >> >> >> > >> >> public class FooProducer { >> > >> >> >> > >> >> @Produces >> > >> >> public Foo produceFoo() { >> > >> >> Foo foo = new Foo(); >> > >> >> return foo; >> > >> >> } >> > >> >> } >> > >> >> >> > >> >> public class Foo {} >> > >> >> >> > >> >> With this example I get: >> > >> >> >> > >> >> SEVERE - CDI Beans module deployment failed >> > >> >> > javax.enterprise.inject.**AmbiguousResolutionException: Ambiguous >> > >> >> resolution >> > >> >> found beans: >> > >> >> Foo, Name:null, WebBeans Type:MANAGED, API >> > >> > Types:[....Foo,java.lang.**Object], >> > >> >> > Qualifiers:[javax.enterprise.**inject.Any,javax.enterprise.** >> > >> >> inject.Default] >> > >> >> Foo, Name:null, WebBeans Type:PRODUCERMETHOD, API >> > >> Types:[....Foo,java.lang. >> > >> >> **Object], >> > >> > Qualifiers:[javax.enterprise.**inject.Any,javax.enterprise.** >> > >> >> inject.Default] >> > >> >> >> > >> >> I tried applying @Default with no success. >> > >> >> >> > >> >> And I don't want to make specific @Qualifier > annotation, >> > > because this >> > >> > is >> > >> >> unnecessary in my case and will cause errors in > those cases when >> > > I >> > >> forget >> > >> >> to provide that @Qualifier at injection point. >> > >> >> >> > >> >> If anyone could help me with setting up a correct > way to provide >> > >> default >> > >> >> producer, would be great. >> > >> >> >> > >> >> thanks and kind regards >> > >> >> Reinis >> > >> >> >> > >> > >> > >> >> > > >> > >> > >> > >> > >> > >> >
