openwebbeans-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike Olson <mol...@the-olsons.net>
Subject Re: OWB 1.7 ignores Alternative when using the provider interface
Date Thu, 27 Dec 2012 20:56:28 GMT
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 <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
>>


-- 
Mike Olson


Mime
View raw message