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.Default] >>>>>>> Foo2, Name:null, WebBeans Type:MANAGED, API >>>>> Types:[Foo,java.lang.Object,Foo2], >>>>> >>> >>>Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default] >>>>>>> at >>>>>>> >>> >>>org.apache.webbeans.util.InjectionExceptionUtils.throwAmbiguousResolutio >>>nExceptionForBeans(InjectionExceptionUtils.java:121) >>>>>>> at >>>>>>> >>> >>>org.apache.webbeans.util.InjectionExceptionUtils.throwAmbiguousResolutio >>>nException(InjectionExceptionUtils.java:111) >>>>>>> at >>>>>>> >>> >>>org.apache.webbeans.container.ResolutionUtil.checkResolvedBeans(Resoluti >>>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 >
