[cdi-dev] Subclassing?

Mark Struberg struberg at yahoo.de
Tue Sep 18 02:46:39 EDT 2012


Hi Stu!

+1, fully agree.


LieGrue,
strub



----- Original Message -----
> From: Stuart Douglas <stuart.w.douglas at gmail.com>
> To: Mark Struberg <struberg at yahoo.de>
> Cc: Pete Muir <pmuir at redhat.com>; Romain Manni-Bucau <rmannibucau at gmail.com>; "cdi-dev at lists.jboss.org" <cdi-dev at lists.jboss.org>
> Sent: Tuesday, September 18, 2012 12:22 AM
> Subject: Re: [cdi-dev] Subclassing?
> 
> 
> 
> Mark Struberg wrote:
>>  Not sure if the trick with the ThreadLocal would work (aside from being dog 
> slow).
>>  A->B->A should all lead to decorator invocations. Is this the case 
> with your impl? (B might be another Decorator or a simple Bean)
> 
> Depends if B is a normal scoped bean or not. I agree this is not ideal.
> 
> To be honest I think it may actually be better to tighten the 
> requirements for intercepted/decorated beans to allow interception to be 
> implemented via a proxy. The way the CDI 1.0 spec was written this was 
> not really possible to do and still be spec compliant (although the TCK 
> did not test this), but we could change to 1.1 spec to require all 
> intercepted classes to meet the proxiability requirements.
> 
> Basically as I see it the pros/cons of each are:
> 
> Subclassing:
> 
> Pros:
> 1. Can use reflection to read fields / bean can have public fields
> 2. No proxiability requirement
> 3. Constructor is only called once
> 
> Cons:
> 4. Self invocation cannot be handled consistently
> 5. Implementation is more complex
> 6. For normal scoped beans the bean has to be proxied anyway, so there 
> is no advantage
> 
> 
> Proxying:
> 
> Pros:
> 7. Consistent with all other interceptor behavior
> 8. Self invocation works as expected
> 
> Cons:
> 9. Bean must meet proxiability requirements (although you can get around 
> this with JVM specific hacks)
> 10. Constructor will be called twice
> 
> I do not consider 1. to be worth considering as a real advantage (public 
> fields == yuck). Basically the only advantage that sub classing has is 
> when you are dealing with a dependent scoped bean that would not meet 
> the proxyability requirements. I think in this case adding a default 
> constructor to enable the bean to be proxied is not a big deal.
> 
> Stuart
> 
> 
>> 
>>  LieGrue,
>>  strub
>> 
>> 
>> 
>> 
>>  ----- Original Message -----
>>>  From: Stuart Douglas<stuart.w.douglas at gmail.com>
>>>  To: Mark Struberg<struberg at yahoo.de>
>>>  Cc: Pete Muir<pmuir at redhat.com>; Romain 
> Manni-Bucau<rmannibucau at gmail.com>; 
> "cdi-dev at lists.jboss.org"<cdi-dev at lists.jboss.org>
>>>  Sent: Monday, September 17, 2012 11:31 PM
>>>  Subject: Re: [cdi-dev] Subclassing?
>>> 
>>> 
>>> 
>>>  Mark Struberg wrote:
>>>>    The main difference we get from subclassing is that even 
> 'internal
>>>  invocations' (contrary to 'external invocations') will 
> invoke the
>>>  decorator method
>>>>    example
>>>> 
>>>>    public Class A implements X {
>>>> 
>>>> 
>>>>       public void methA() {..}
>>>>       public void methB() { methA(); }
>>>> 
>>>>    }
>>>> 
>>>>    @Decorator
>>>>    public class Adecorator implements X {
>>>>       @Inject @Delegate X x;
>>>> 
>>>>       public void methA();
>>>>    }
>>>> 
>>>>    If we do _not_ apply subclassing but proxying, then invoking 
> methB will NOT
>>>  trigger methA from Adecorator.
>>>>    If we DO force subclassing, then a call to methB will also 
> trigger the
>>>  decorator!
>>>>    But that is contrary to all other EE proxying behaviour so far...
>>> 
>>>  In weld we currently use a thread local to work around this, so self
>>>  invocation does not result in interceptors / decorators running again.
>>> 
>>>  Stuart
>>> 
>>>> 
>>>>    LieGrue,
>>>>    strub
>>>> 
>>>> 
>>>> 
>>>>    ----- Original Message -----
>>>>>    From: Pete Muir<pmuir at redhat.com>
>>>>>    To: Romain Manni-Bucau<rmannibucau at gmail.com>
>>>>>    Cc: 
> "cdi-dev at lists.jboss.org"<cdi-dev at lists.jboss.org>
>>>>>    Sent: Monday, September 17, 2012 5:58 PM
>>>>>    Subject: Re: [cdi-dev] Subclassing?
>>>>> 
>>>>>    Romain,
>>>>> 
>>>>>    I agree, we can't specify to use subclassing. Please take 
> a look at
>>>>>   https://github.com/jboss/cdi/pull/117 where I've tried to 
> address
>>>  this, in
>>>>>    terms of what effects people will see.
>>>>> 
>>>>>    On 17 Sep 2012, at 16:54, Romain Manni-Bucau wrote:
>>>>> 
>>>>>>      Hi,
>>>>>> 
>>>>>>      There is a bunch of jira to specify subclassing should 
> be used in
>>>  some
>>>>>    cases so i mail here instead of answering all jira.
>>>>>>      IMO it is specifying too much the technical part:  
> specify the
>>>  constructor
>>>>>    should be called twice is better for a spec IMHO (but this 
> case is not
>>>  logical
>>>>>    at all ;))
>>>>>>      Why this need?
>>>>>> 
>>>>>>      - Romain
>>>>>> 
>>>>>>      _______________________________________________
>>>>>>      cdi-dev mailing list
>>>>>>     cdi-dev at lists.jboss.org
>>>>>>     https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>    _______________________________________________
>>>>>    cdi-dev mailing list
>>>>>   cdi-dev at lists.jboss.org
>>>>>   https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>> 
>>>>    _______________________________________________
>>>>    cdi-dev mailing list
>>>>   cdi-dev at lists.jboss.org
>>>>   https://lists.jboss.org/mailman/listinfo/cdi-dev
> 



More information about the cdi-dev mailing list