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. >> > >
