openwebbeans-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Arne Limburg <arne.limb...@openknowledge.de>
Subject Re: OWB 1.7 ignores Alternative when using the provider interface
Date Fri, 28 Dec 2012 10:42:18 GMT
Yes, I take it.


Will fix it this evening,

Cheers,
Arne

Am 27.12.12 23:22 schrieb "Mark Struberg" unter <struberg@yahoo.de>:

>Hi Arne, yes that sounds very reasonable!
>Do you like to take over?
>
>LIeGrue,
>strub
>
>
>
>
>----- Original Message -----
>> From: Arne Limburg <arne.limburg@openknowledge.de>
>> To: "user@openwebbeans.apache.org" <user@openwebbeans.apache.org>
>> 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
>> <molson@the-olsons.net>:
>> 
>>> 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 <molson@the-olsons.net>
>>>>>  To: user@openwebbeans.apache.org
>>>>>  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 <molson@the-olsons.net>
>>>>>>>    To: user@openwebbeans.apache.org
>>>>>>>    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 <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.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
>>> 
>> 


Mime
View raw message