[weld-dev] CDI TCK: InvocationContextTest:testGetTarget
Scott Ferguson
ferg at caucho.com
Fri Jan 7 13:13:55 EST 2011
Marius Bogoevici wrote:
> On 2011-01-07, at 12:17 PM, Scott Ferguson wrote:
>
>
>> Marius Bogoevici wrote:
>>
>>> I don't see a particular issue with the test. The rules on what business method invocations are and aren't should make it clear that invocations on the instance acquired via getTarget() are intercepted, or, for that matter, decorated. Those are *not* business method invocations (in the same way as calls to 'this' are not business method invocations).
>>>
>> That behavior is not defined by any specification, unless you can find the section and cite it.
>>
>
> Section 7.2 of the CDI specification.
>
Then there needs to be an explicit test for that behavior. Not an
implicit one buried in another test.
-- Scott
>
>> -- Scott
>>
>>
>>> Weld implements interception/decoration via subclassing and observes this exact rule (invocations on this and instances acquired by getTarget() are not intercepted/decorated).
>>>
>>> Also, this has been previously discussed here (a couple of links from an older weld-dev thread)
>>> http://lists.jboss.org/pipermail/weld-dev/2010-May/002517.html
>>> http://lists.jboss.org/pipermail/weld-dev/2010-May/002519.html
>>>
>>> On 2011-01-06, at 12:34 PM, Scott Ferguson wrote:
>>>
>>>
>>>> Jozef Hartinger wrote:
>>>>
>>>>> Could you file a CDITCK issue and assign it to me? Thanks.
>>>>>
>>>>>
>>>> Thanks Jozef,
>>>>
>>>> It's at https://issues.jboss.org/browse/CDITCK-203.
>>>>
>>>> I'm pretty sure I don't have permission to assign you tasks, though. :)
>>>>
>>>> -- Scott
>>>>
>>>>
>>>>> On 01/06/2011 03:24 AM, Scott Ferguson wrote:
>>>>>
>>>>>> This test has a implementation-dependency on how interception is
>>>>>> implemented (requires proxy implementation), but the proxy
>>>>>> implementation is not mandated by the spec (and the EJB spec has always
>>>>>> allowed both implementation methods.)
>>>>>>
>>>>>> The test calls SimpleBean.getId(), which is intercepted by Interceptor1.
>>>>>>
>>>>>> Interceptor1's aroundInvoke calls target.getId(), which is a circular
>>>>>> reference for extension and only works for proxy-based interception:
>>>>>>
>>>>>> class SimpleBean {
>>>>>> @Interceptors(Interceptor1.class)
>>>>>> public int getId()
>>>>>> {
>>>>>> return id;
>>>>>> }
>>>>>> ...
>>>>>> }
>>>>>>
>>>>>> class Interceptor1 {
>>>>>> @AroundInvoke
>>>>>> public Object aroundInvoke(InvocationContext ctx) throws Exception
>>>>>> {
>>>>>> SimpleBean target = (SimpleBean) ctx.getTarget();
>>>>>> int id1 = target.getId();
>>>>>> ...
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> The only change needed to the test is to create a SimpleBean.getBareId()
>>>>>> which is not an intercepted method.
>>>>>>
>>>>>> (Or, if the spec is re-interpreted to require a proxy implementation,
>>>>>> there should be an explicit test for it, not an implicit dependency like
>>>>>> this test.)
>>>>>>
>>>>>> -- Scott
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> weld-dev mailing list
>>>>>> weld-dev at lists.jboss.org <mailto:weld-dev at lists.jboss.org>
>>>>>> https://lists.jboss.org/mailman/listinfo/weld-dev
>>>>>>
>>>>>
>>>>>
>>>> _______________________________________________
>>>> weld-dev mailing list
>>>> weld-dev at lists.jboss.org <mailto:weld-dev at lists.jboss.org>
>>>> https://lists.jboss.org/mailman/listinfo/weld-dev
>>>>
>
>
>
>
>
More information about the weld-dev
mailing list