[weld-dev] CDI TCK: InvocationContextTest:testGetTarget
Scott Ferguson
ferg at caucho.com
Fri Jan 7 12:17:25 EST 2011
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.
-- 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