it sounds like a bug,

thanks for the report,

we'll have a deeper look ASAP

- Romain


2012/2/11 Romain Manni-Bucau <[email protected]>

> Hi,
>
> can you have a look at
> http://svn.apache.org/repos/asf/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/interceptors/InterceptorBindingEjbTest.java
>  to
> reproduce it please?
>
> - Romain
>
>
>
> 2012/2/11 og0815 <[email protected]>
>
>> Hi everybody,
>>
>> again I'm not 100% sure if I'm getting the spec right or found some bug.
>>
>> Assume the following code.
>>
>> @Inherited
>> @InterceptorBinding
>> @Retention(RUNTIME)
>> @Target({METHOD, TYPE})
>> public @interface MarkInterception {
>> }
>>
>> ---
>>
>> @Interceptor
>> @MarkInterception
>> public class MarkedInterceptor {
>>
>>    @AroundInvoke
>>    public Object manageTransaction(InvocationContext invocationContext)
>> throws Exception {
>>        System.out.println("Beginning Interceptor " + invocationContext);
>>        Object o = invocationContext.proceed();
>>        System.out.println("Ending Interceptor " + invocationContext);
>>        return o;
>>    }
>> }
>>
>> ---
>>
>> @Stateless
>> public class BeanOne {
>>
>>    @MarkInterception
>>    public void something() {
>>        System.out.println("BeanOne.something");
>>    }
>>
>> }
>>
>> ---
>>
>> @Stateless
>> public class BeanTwo {
>>
>>    @Inject
>>    private BeanOne one;
>>
>>    public void callOne() {
>>        one.something();
>>    }
>> }
>>
>> ---
>>
>> Now if I call BeanTwo.callOne in a client I get the following expected
>> output:
>>
>> Beginning Interceptor InvocationContext(operation=BUSINESS,
>> target=BeanOne,
>> method=something)
>> BeanOne.something
>> Ending Interceptor InvocationContext(operation=BUSINESS, target=BeanOne,
>> method=something)
>>
>> But, if I change the BeanTwo like this
>>
>> @Stateless
>> public class BeanTwo {
>>
>>    @Inject
>>    private BeanOne one;
>>
>>    @MarkInterception
>>    public void doNothing() {
>>
>>    }
>>
>>    public void callOne() {
>>        one.something();
>>    }
>>
>> }
>>
>> the following happens:
>>
>> Beginning Interceptor InvocationContext(operation=BUSINESS,
>> target=BeanTwo,
>> method=callOne)
>> Beginning Interceptor InvocationContext(operation=BUSINESS,
>> target=BeanOne,
>> method=something)
>> BeanOne.something
>> Ending Interceptor InvocationContext(operation=BUSINESS, target=BeanOne,
>> method=something)
>> Ending Interceptor InvocationContext(operation=BUSINESS, target=BeanTwo,
>> method=callOne)
>>
>> Which means that also the callOne is now Intercepted. From my
>> understanding
>> the Interceptor annotation at method level should only intercept the
>> selected method but in this case it looks like it has become a interceptor
>> for all methods.
>>
>> Again am I doing something weird or is this a bug ?
>>
>> Thanks,
>> Olli
>>
>>
>> --
>> View this message in context:
>> http://openejb.979440.n4.nabble.com/Wrong-CDI-Interception-in-OpenEJB-tp4378502p4378502.html
>> Sent from the OpenEJB Dev mailing list archive at Nabble.com.
>>
>
>

Reply via email to