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. > > -- 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 >>>>> [email protected] <mailto:[email protected]> >>>>> https://lists.jboss.org/mailman/listinfo/weld-dev >>>> >>>> >>>> >>> >>> _______________________________________________ >>> weld-dev mailing list >>> [email protected] <mailto:[email protected]> >>> https://lists.jboss.org/mailman/listinfo/weld-dev >> > _______________________________________________ weld-dev mailing list [email protected] https://lists.jboss.org/mailman/listinfo/weld-dev
