Yes, I take it.
Will fix it this evening, Cheers, Arne Am 27.12.12 23:22 schrieb "Mark Struberg" unter <[email protected]>: >Hi Arne, yes that sounds very reasonable! >Do you like to take over? > >LIeGrue, >strub > > > > >----- Original Message ----- >> From: Arne Limburg <[email protected]> >> To: "[email protected]" <[email protected]> >> Cc: >> Sent: Thursday, December 27, 2012 11:14 PM >> Subject: Re: OWB 1.7 ignores Alternative when using the provider >>interface >> >> Hi Mark, >> >> I already looked into it, seems like the InstanceImpl only does an >> InjectionResolver.implResolveByType which is equivalent to >> BeanManager.getBeans() and simply misses the InjectionResolver.resolve >> (wich is BeanManager.resolve). >> >> Mike, a test-case implemented within the owb test-suite would be very >>cool >> >> Cheers, >> Arne >> >> >> >> Am 27.12.12 23:01 schrieb "Mike Olson" unter >> <[email protected]>: >> >>> On 12/27/2012 2:57 PM, Mark Struberg wrote: >>> >>> >>> FYI, that did work. >>> >>>> Or we just gonna fix this issue and ship owb-1.8 :) >>> That would be ideal :) >>>> >>>> Can you please create a patch with a small test case and attach it >>>>to a >>>> JIRA, please? >>> >>> Just the Foo classes as the test case? >>> >>> Thanks >>> Mike >>> >>>> >>>> >>>> txs and LieGrue, >>>> strub >>>> >>>> >>>> >>>> ----- Original Message ----- >>>>> From: Mike Olson <[email protected]> >>>>> To: [email protected] >>>>> Cc: >>>>> Sent: Thursday, December 27, 2012 10:55 PM >>>>> Subject: Re: OWB 1.7 ignores Alternative when using the provider >>>>> interface >>>>> >>>>> On 12/27/2012 2:43 PM, Mark Struberg wrote: >>>>> >>>>> It does, but I can't use @Inject in this case. I cannot >> statically >>>>> bind >>>>> to a single instance of Foo. >>>>> >>>>> I suppose I could create a FooWrapper class. >>>>> >>>>> class FooWrapper { >>>>> @Inject Foo foo; >>>>> } >>>>> >>>>> Then in Main use: >>>>> >>>>> @Inject >>>>> Provider<FooWrapper> fooWrapperProvider; >>>>> >>>>> >>>>> Mike >>>>> >>>>>> And simply @Inject doesn't work? >>>>>> >>>>>> LieGrue, >>>>>> strub >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> ----- Original Message ----- >>>>>>> From: Mike Olson <[email protected]> >>>>>>> To: [email protected] >>>>>>> Cc: >>>>>>> Sent: Thursday, December 27, 2012 9:56 PM >>>>>>> Subject: Re: OWB 1.7 ignores Alternative when using the >> provider >>>>> interface >>>>>>> On 12/27/2012 3:35 AM, Mark Struberg wrote: >>>>>>> >>>>>>> Hi Mark, >>>>>>> >>>>>>>> Hi Mike! >>>>>>>> >>>>>>>> Thanks for your great tests, always good to get >> such feedback! >>>>>>>> >>>>>>>> I guess you get a Instance<Foo> as Provider, >> right? >>>>>>> Yes, that is what I am seeing. >>>>>>> >>>>>>>> In that case 5.2.1 defines that we need to take the >> Alternative >>>>> into >>>>>>> account and filter it away. >>>>>>> >>>>>>> Any thoughts on a work around until this can be fixed? I >> need to >>>>>>> use >>>>>>> the Provider interface to decouple my implementation. I >> have a >>>>>>> Mock >>>>>>> version of "Foo" in my unit tests, qualified as >> an >>>>> Alternative (and >>>>>>> noted in the beans.xml file). >>>>>>> >>>>>>> Thanks >>>>>>> Mike >>>>>>> >>>>>>>> LieGrue, >>>>>>>> strub >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> ----- Original Message ----- >>>>>>>>> From: Mike Olson <[email protected]> >>>>>>>>> To: [email protected] >>>>>>>>> Cc: >>>>>>>>> Sent: Thursday, December 27, 2012 5:18 AM >>>>>>>>> Subject: OWN 1.7 ignores Alternative when using >> the provider >>>>> interface >>>>>>>>> >>>>>>>>> Hello, >>>>>>>>> >>>>>>>>> I have a very simple setup where I have >> classes Foo1 and >>>>> Foo2 that >>>>>>> implement >>>>>>>>> the Foo interface >>>>>>>>> >>>>>>>>> public interface Foo { >>>>>>>>> } >>>>>>>>> @Default >>>>>>>>> public class Foo1 implements Foo { >>>>>>>>> >>>>>>>>> } >>>>>>>>> @Alternative >>>>>>>>> public class Foo2 implements Foo { >>>>>>>>> >>>>>>>>> } >>>>>>>>> >>>>>>>>> Then a class that gets 2 Foos injected >>>>>>>>> >>>>>>>>> public class Main { >>>>>>>>> >>>>>>>>> @Inject >>>>>>>>> Foo fooA; >>>>>>>>> >>>>>>>>> @Inject >>>>>>>>> Provider<Foo> fooB; >>>>>>>>> >>>>>>>>> @PostConstruct >>>>>>>>> public void init() { >>>>>>>>> System.err.println("FooA:" + >> fooA); >>>>>>>>> System.err.println("FooB:" + >> fooB.get()); >>>>>>>>> } >>>>>>>>> } >>>>>>>>> >>>>>>>>> If my beans.xml file is empty, then I get 2 >> instances of Foo1 >>>>> injected >>>>>>> into the >>>>>>>>> class, as expected. >>>>>>>>> >>>>>>>>> However, if I add >>>>>>>>> >>>>>>>>> <alternatives> >>>>>>>>> <class>Foo2</class> >>>>>>>>> </alternatives> >>>>>>>>> >>>>>>>>> to my beans.xml, then I get an error when I run >> the >>>>> application. >>>>>>>>> """ >>>>>>>>> INFO: All injection points were validated >> successfully. >>>>>>>>> Dec 26, 2012 9:11:29 PM >>>>> org.apache.webbeans.lifecycle.AbstractLifeCycle >>>>>>>>> startApplication >>>>>>>>> INFO: OpenWebBeans Container has started, it >> took [359] ms. >>>>>>>>> FooA:Foo2@152c4d9 >>>>>>>>> Dec 26, 2012 9:11:29 PM >>>>>>>>> >> org.apache.webbeans.component.AbstractInjectionTargetBean >>>>>>> postConstructDefault >>>>>>>>> SEVERE: An error occurred while executing >> [@PostConstruct.] >>>>>>>>> >> javax.enterprise.inject.AmbiguousResolutionException: There >>>>> is more >>>>>>> than one api >>>>>>>>> type with : Foo with qualifiers : Qualifiers: >>>>>>>>> [@javax.enterprise.inject.Default()] >>>>>>>>> found beans: >>>>>>>>> Foo1, Name:null, WebBeans Type:MANAGED, API >>>>>>> Types:[Foo,Foo1,java.lang.Object], >>>>>>> >>>>> >>>>> >>>>>Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Defaul >>>>>t] >>>>>>>>> Foo2, Name:null, WebBeans Type:MANAGED, API >>>>>>> Types:[Foo,java.lang.Object,Foo2], >>>>>>> >>>>> >>>>> >>>>>Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Defaul >>>>>t] >>>>>>>>> at >>>>>>>>> >>>>> >>>>> >>>>>org.apache.webbeans.util.InjectionExceptionUtils.throwAmbiguousResolut >>>>>io >>>>> nExceptionForBeans(InjectionExceptionUtils.java:121) >>>>>>>>> at >>>>>>>>> >>>>> >>>>> >>>>>org.apache.webbeans.util.InjectionExceptionUtils.throwAmbiguousResolut >>>>>io >>>>> nException(InjectionExceptionUtils.java:111) >>>>>>>>> at >>>>>>>>> >>>>> >>>>> >>>>>org.apache.webbeans.container.ResolutionUtil.checkResolvedBeans(Resolu >>>>>ti >>>>> onUtil.java:80) >>>>>>>>> at >>>>>>>>> >>>>> >>>>> >>>>>org.apache.webbeans.inject.instance.InstanceImpl.get(InstanceImpl.java >>>>>:1 >>>>> 10) >>>>>>>>> at Main.init(Main.java:23) >>>>>>>>> """ >>>>>>>>> >>>>>>>>> This exception happens when I call >> Provider.get(). I assumed >>>>> that the >>>>>>> Provider >>>>>>>>> interface would respect the Alternative >> Qualifiers, but that >>>>> does not >>>>>>> seem to be >>>>>>>>> the case. >>>>>>>>> >>>>>>>>> Is this a bug in what I am doing, or a bug in >> OWB? >>>>>>>>> >>>>>>>>> Thanks >>>>>>>>> Mike >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- Mike Olson >>>>>>>>> >>>>>>> -- >>>>>>> Mike Olson >>>>>>> >>>>> >>>>> -- >>>>> Mike Olson >>>>> >>> >>> >>> -- >>> Mike Olson >>> >>
