openwebbeans-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Struberg <strub...@yahoo.de>
Subject Re: OWN 1.7 ignores Alternative when using the provider interface
Date Thu, 27 Dec 2012 10:35:12 GMT
Hi Mike!

Thanks for your great tests, always good to get such feedback!

I guess you get a Instance<Foo> as Provider, right?
In that case 5.2.1 defines that we need to take the Alternative into account and filter it
away.

LieGrue,
strub




----- Original Message -----
> From: Mike Olson <molson@the-olsons.net>
> To: user@openwebbeans.apache.org
> 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.throwAmbiguousResolutionExceptionForBeans(InjectionExceptionUtils.java:121)
>     at 
> org.apache.webbeans.util.InjectionExceptionUtils.throwAmbiguousResolutionException(InjectionExceptionUtils.java:111)
>     at 
> org.apache.webbeans.container.ResolutionUtil.checkResolvedBeans(ResolutionUtil.java:80)
>     at 
> org.apache.webbeans.inject.instance.InstanceImpl.get(InstanceImpl.java:110)
>     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
> 

Mime
View raw message