Hello, This commit breaks following TCK tests,
1- DecoratorAndInterceptorTest # testInterceptorCalledBeforeDecorator 2- InterceptorCalledBeforeDecoratorTest # testInterceptorCalledBeforeDecorator --Gurkan ________________________________ From: "[email protected]" <[email protected]> To: [email protected] Sent: Sun, July 25, 2010 8:10:37 PM Subject: svn commit: r979071 - in /openwebbeans/trunk: webbeans-ejb/ webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/ webbeans-impl/ webbeans-impl/src/main/java/org/apache/webbeans/intercept/ webbeans-impl/src/main/java/org/apache/webbeans... Author: covener Date: Sun Jul 25 17:10:36 2010 New Revision: 979071 URL: http://svn.apache.org/viewvc?rev=979071&view=rev Log: OWB-384 OWB-422 Enable 299-defined interceptors for EJB lifecycle callbacks @AroundTimeout, @PrePassivate, and @PostActivate. Submitted By: Paul Reder Reviewed By: covener Modified: openwebbeans/trunk/webbeans-ejb/pom.xml openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java openwebbeans/trunk/webbeans-impl/pom.xml openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorType.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java Modified: openwebbeans/trunk/webbeans-ejb/pom.xml URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/pom.xml?rev=979071&r1=979070&r2=979071&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-ejb/pom.xml (original) +++ openwebbeans/trunk/webbeans-ejb/pom.xml Sun Jul 25 17:10:36 2010 @@ -33,6 +33,12 @@ <groupId>org.apache.openwebbeans</groupId> <artifactId>openwebbeans-impl</artifactId> </dependency> + + <dependency> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-ejb_3.0_spec</artifactId> + <optional>true</optional> + </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> Modified: openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java?rev=979071&r1=979070&r2=979071&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java (original) +++ openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java Sun Jul 25 17:10:36 2010 @@ -35,12 +35,15 @@ import javassist.util.proxy.ProxyObject; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import javax.ejb.PostActivate; +import javax.ejb.PrePassivate; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.RequestScoped; import javax.enterprise.context.spi.Context; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.spi.Bean; import javax.interceptor.AroundInvoke; +import javax.interceptor.AroundTimeout; import javax.interceptor.InvocationContext; import org.apache.webbeans.component.InjectionTargetBean; @@ -213,7 +216,48 @@ public class OpenWebBeansEjbInterceptor return rv.RETURN_VALUE; } - + + /** + * Around Timeout. + * @param context invocation ctx + */ + @AroundTimeout + public Object callAroundTimeouts(InvocationContext context) throws Exception + { + Object retVal = null; + InjectionTargetBean<?> injectionTarget = (InjectionTargetBean<?>) threadLocal.get(); + + logger.debug("OpenWebBeansEjbInterceptor: @AroundTimeout called. Trying to run Interceptors."); + + if(injectionTarget != null) + { + if (WebBeansUtil.isContainsInterceptorMethod(injectionTarget.getInterceptorStack(), InterceptorType.AROUND_TIMEOUT)) + { + InvocationContextImpl impl = new InvocationContextImpl(null, context.getTarget(), null, null, + InterceptorUtil.getInterceptorMethods(injectionTarget.getInterceptorStack(), InterceptorType.AROUND_TIMEOUT), InterceptorType.AROUND_TIMEOUT); + impl.setCreationalContext(threadLocalCreationalContext.get()); + try + { + //run OWB interceptors + impl.proceed(); + + //run EJB interceptors + retVal = context.proceed(); + } + catch (Exception e) + { + logger.error(OWBLogConst.ERROR_0008, e, "@AroundTimeout."); + throw new RuntimeException(e); + } + } + } + else + { + runPrePostForNonContextual(context, InterceptorType.AROUND_TIMEOUT); // TODO: Is this required for activate? It was in POST_CONSTUCT code. + } + return retVal; + } + /** * Post construct. * @param context invocation ctx @@ -265,7 +309,88 @@ public class OpenWebBeansEjbInterceptor } } } - + + /** + * Post activate. + */ + @PostActivate + public void afterActivate(InvocationContext context) + { + InjectionTargetBean<?> injectionTarget = (InjectionTargetBean<?>) threadLocal.get(); + + logger.debug("OpenWebBeansEjbInterceptor: @PostActivate called. Trying to run Interceptors."); + + if(injectionTarget != null) + { + if (WebBeansUtil.isContainsInterceptorMethod(injectionTarget.getInterceptorStack(), InterceptorType.POST_ACTIVATE)) + { + InvocationContextImpl impl = new InvocationContextImpl(null, context.getTarget(), null, null, + InterceptorUtil.getInterceptorMethods( + injectionTarget.getInterceptorStack(), + InterceptorType.POST_ACTIVATE), + InterceptorType.POST_ACTIVATE); + impl.setCreationalContext(threadLocalCreationalContext.get()); + try + { + //run OWB interceptors + impl.proceed(); + + //run EJB interceptors + context.proceed(); + } + catch (Exception e) + { + logger.error(OWBLogConst.ERROR_0008, e, "@PostActivate."); + throw new RuntimeException(e); + } + } + } + else + { + runPrePostForNonContextual(context, InterceptorType.POST_ACTIVATE); // TODO: Is this required for activate? It was in POST_CONSTUCT code. + } + } + + /** + * Pre Passivate. + */ + @PrePassivate + public void beforePassivate(InvocationContext context) + { + InjectionTargetBean<?> injectionTarget = (InjectionTargetBean<?>) threadLocal.get(); + + logger.debug("OpenWebBeansEjbInterceptor: @PrePassivate called. Trying to run Interceptors."); + + if(injectionTarget != null) + { + if (WebBeansUtil.isContainsInterceptorMethod(injectionTarget.getInterceptorStack(), InterceptorType.PRE_PASSIVATE)) + { + InvocationContextImpl impl = new InvocationContextImpl(null, context.getTarget(), null, null, + InterceptorUtil.getInterceptorMethods( + injectionTarget.getInterceptorStack(), + InterceptorType.PRE_PASSIVATE), + InterceptorType.PRE_PASSIVATE); + impl.setCreationalContext(threadLocalCreationalContext.get()); + try + { + //Call OWB interceptord + impl.proceed(); + + //Call EJB interceptors + context.proceed(); + } + catch (Exception e) + { + logger.error(OWBLogConst.ERROR_0008, e, "@PrePassivate."); + throw new RuntimeException(e); + } + } + } + else + { + runPrePostForNonContextual(context, InterceptorType.PRE_PASSIVATE); // TODO: Is this required for passivate? It was in the PRE_DESTROY code. + } + } /** * Pre destroy. * @param context invocation context @@ -501,7 +626,10 @@ public class OpenWebBeansEjbInterceptor List<Object> decorators = null; DelegateHandler delegateHandler = null; - logger.debug("Decorator stack for target {0}", injectionTarget.getDecoratorStack()); + if (logger.wblWillLogDebug()) + { + logger.debug("Decorator stack for target {0}", injectionTarget.getDecoratorStack()); + } if (injectionTarget.getDecoratorStack().size() > 0) { Modified: openwebbeans/trunk/webbeans-impl/pom.xml URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/pom.xml?rev=979071&r1=979070&r2=979071&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/pom.xml (original) +++ openwebbeans/trunk/webbeans-impl/pom.xml Sun Jul 25 17:10:36 2010 @@ -78,6 +78,12 @@ <artifactId>geronimo-atinject_1.0_spec</artifactId> <optional>true</optional> </dependency> + + <dependency> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-ejb_3.0_spec</artifactId> + <optional>true</optional> + </dependency> <dependency> <groupId>org.apache.openwebbeans</groupId> Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java?rev=979071&r1=979070&r2=979071&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java Sun Jul 25 17:10:36 2010 @@ -55,6 +55,13 @@ public interface InterceptorData public Method getPostConstruct(); /** + * Gets {...@link javax.ejb.PostActivate} annotated method if exist + * return null otherwise. + * @return post-activate method + */ + public Method getPostActivate(); + + /** * Gets the {...@link javax.annotation.PreDestroy} annotated method * if exist, returns null otherwise. * @return pre-destroy method @@ -62,6 +69,13 @@ public interface InterceptorData public Method getPreDestroy(); /** + * Gets {...@link javax.ejb.PrePassivate} annotated method if exist + * return null otherwise. + * @return pre-passivate method + */ + public Method getPrePassivate(); + + /** * Gets {...@link javax.interceptor.AroundInvoke} annotated method * if exist, returns null otherwise. * @return around invoke method @@ -69,6 +83,13 @@ public interface InterceptorData public Method getAroundInvoke(); /** + * Gets {...@link javax.interceptor.AroundTimeout} annotated method + * if exist, returns null otherwise. + * @return around timeout method + */ + public Method getAroundTimeout(); + + /** * Gets interceptor method that this * interceptor data contains. It is one of * the post construct, pre-destroy or around-invoke. Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java?rev=979071&r1=979070&r2=979071&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java Sun Jul 25 17:10:36 2010 @@ -48,13 +48,22 @@ public class InterceptorDataImpl impleme /** Around invokes method */ private Method aroundInvoke = null; + + /** Around timeout method */ + private Method aroundTimeout = null; /** Post construct methods */ private Method postConstruct = null; + /** Post activate method */ + private Method postActivate = null; + /** Predestroy Method */ private Method preDestroy = null; + /** Prepassivate Method */ + private Method prePassivate = null; + private Interceptor<?> webBeansInterceptor; /** Defined in the interceptor or bean */ @@ -134,6 +143,17 @@ public class InterceptorDataImpl impleme /* * (non-Javadoc) * @see + * org.apache.webbeans.intercept.InterceptorData#addAroundTimeout(java.lang + * .reflect.Method) + */ + public void setAroundTimeout(Method m) + { + this.aroundTimeout = m; + } + + /* + * (non-Javadoc) + * @see * org.apache.webbeans.intercept.InterceptorData#addPostConstruct(java.lang * .reflect.Method) */ @@ -145,6 +165,17 @@ public class InterceptorDataImpl impleme /* * (non-Javadoc) * @see + * org.apache.webbeans.intercept.InterceptorData#addPostActivate(java.lang + * .reflect.Method) + */ + protected void setPostActivate(Method m) + { + this.postActivate = m; + } + + /* + * (non-Javadoc) + * @see * org.apache.webbeans.intercept.InterceptorData#addPreDestroy(java.lang * .reflect.Method) */ @@ -155,6 +186,17 @@ public class InterceptorDataImpl impleme /* * (non-Javadoc) + * @see + * org.apache.webbeans.intercept.InterceptorData#addPrePassivate(java.lang + * .reflect.Method) + */ + protected void setPrePassivate(Method m) + { + this.prePassivate = m; + } + + /* + * (non-Javadoc) * @see org.apache.webbeans.intercept.InterceptorData#getPostConstruct() */ public Method getPostConstruct() @@ -164,6 +206,15 @@ public class InterceptorDataImpl impleme /* * (non-Javadoc) + * @see org.apache.webbeans.intercept.InterceptorData#getPostActivate() + */ + public Method getPostActivate() + { + return this.postActivate; + } + + /* + * (non-Javadoc) * @see org.apache.webbeans.intercept.InterceptorData#getPreDestroy() */ public Method getPreDestroy() @@ -173,6 +224,15 @@ public class InterceptorDataImpl impleme /* * (non-Javadoc) + * @see org.apache.webbeans.intercept.InterceptorData#getPrePassivate() + */ + public Method getPrePassivate() + { + return this.prePassivate; + } + + /* + * (non-Javadoc) * @see org.apache.webbeans.intercept.InterceptorData#getAroundInvoke() */ public Method getAroundInvoke() @@ -182,6 +242,15 @@ public class InterceptorDataImpl impleme /* * (non-Javadoc) + * @see org.apache.webbeans.intercept.InterceptorData#getAroundTimeout() + */ + public Method getAroundTimeout() + { + return this.aroundTimeout; + } + + /* + * (non-Javadoc) * @see * org.apache.webbeans.intercept.InterceptorData#isDefinedInInterceptorClass * () @@ -273,14 +342,26 @@ public class InterceptorDataImpl impleme { return aroundInvoke; } + else if (aroundTimeout != null) + { + return aroundTimeout; + } else if (postConstruct != null) { return postConstruct; } + else if (postActivate != null) + { + return postActivate; + } else if (preDestroy != null) { return preDestroy; } + else if (prePassivate != null) + { + return prePassivate; + } return null; } @@ -288,7 +369,7 @@ public class InterceptorDataImpl impleme @Override public boolean isLifecycleInterceptor() { - if(this.preDestroy != null || this.postConstruct != null) + if(this.preDestroy != null || this.postConstruct != null || this.prePassivate != null || this.postActivate != null) { return true; } @@ -369,8 +450,11 @@ public class InterceptorDataImpl impleme StringBuilder sb = new StringBuilder(); sb.append("Class: [").append(webBeansInterceptor.getBeanClass()).append("]"); sb.append(" aroundInvoke [").append(aroundInvoke).append("]"); + sb.append(" aroundTimeout [").append(aroundTimeout).append("]"); sb.append(" postConstruct [").append(postConstruct).append("]"); + sb.append(" postActivate [").append(postActivate).append("]"); sb.append(" preDestroy [").append(preDestroy).append("]"); + sb.append(" prePassivate [").append(prePassivate).append("]"); return sb.toString(); } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorType.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorType.java?rev=979071&r1=979070&r2=979071&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorType.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorType.java Sun Jul 25 17:10:36 2010 @@ -31,7 +31,7 @@ import org.apache.webbeans.exception.Web */ public enum InterceptorType { - AROUND_INVOKE, POST_CONSTRUCT, PRE_DESTROY, PRE_PASSIVATE, POST_ACTIVATE; + AROUND_INVOKE, AROUND_TIMEOUT, POST_CONSTRUCT, PRE_DESTROY, PRE_PASSIVATE, POST_ACTIVATE; public static InterceptorType getType(InterceptionType type) { @@ -39,6 +39,10 @@ public enum InterceptorType { return AROUND_INVOKE; } + else if (type.equals(InterceptionType.AROUND_TIMEOUT)) + { + return AROUND_TIMEOUT; + } else if (type.equals(InterceptionType.POST_CONSTRUCT)) { return POST_CONSTRUCT; Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java?rev=979071&r1=979070&r2=979071&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java Sun Jul 25 17:10:36 2010 @@ -30,6 +30,8 @@ import java.util.Set; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import javax.ejb.PrePassivate; +import javax.ejb.PostActivate; import javax.enterprise.inject.Produces; import javax.enterprise.inject.spi.AnnotatedMethod; import javax.enterprise.inject.spi.AnnotatedParameter; @@ -45,6 +47,7 @@ import org.apache.webbeans.component.Inj import org.apache.webbeans.context.creational.CreationalContextImpl; import org.apache.webbeans.exception.WebBeansConfigurationException; import org.apache.webbeans.exception.WebBeansException; +import org.apache.webbeans.logger.WebBeansLogger; import org.apache.webbeans.util.AnnotationUtil; import org.apache.webbeans.util.Asserts; import org.apache.webbeans.util.ClassUtil; @@ -52,6 +55,9 @@ import org.apache.webbeans.util.Security public final class InterceptorUtil { + /**Logger instance*/ + private static final WebBeansLogger logger = WebBeansLogger.getLogger(InterceptorUtil.class); + private InterceptorUtil() { @@ -83,7 +89,10 @@ public final class InterceptorUtil if (annCls.equals(Inject.class) || annCls.equals(PreDestroy.class) || annCls.equals(PostConstruct.class) || - annCls.equals(AroundInvoke.class) ) + annCls.equals(AroundInvoke.class) || + annCls.equals(PrePassivate.class) || // JSR-299 7.2 + annCls.equals(PostActivate.class) || // JSR-299 7.2 + annCls.equals(AroundTimeout.class)) // JSR-299 7.2 { return false; } @@ -98,10 +107,10 @@ public final class InterceptorUtil { return AroundInvoke.class; } -// else if (type.equals(InterceptionType.POST_ACTIVATE)) -// { -// return O; -// } + else if (type.equals(InterceptionType.POST_ACTIVATE)) + { + return PostActivate.class; + } else if (type.equals(InterceptionType.POST_CONSTRUCT)) { return PostConstruct.class; @@ -110,10 +119,10 @@ public final class InterceptorUtil { return PreDestroy.class; } -// else if (type.equals(InterceptionType.PRE_PASSIVATE)) -// { -// return PrePassivate.class; -// } + else if (type.equals(InterceptionType.PRE_PASSIVATE)) + { + return PrePassivate.class; + } else if (type.equals(InterceptionType.AROUND_TIMEOUT)) { return AroundTimeout.class; @@ -203,8 +212,8 @@ public final class InterceptorUtil for (Method method : methods) { if (AnnotationUtil.hasMethodAnnotation(method, PostConstruct.class) || AnnotationUtil.hasMethodAnnotation(method, PreDestroy.class) -// AnnotationUtil.isMethodHasAnnotation(method, PostActivate.class) || -// AnnotationUtil.isMethodHasAnnotation(method, PrePassivate.class) + || AnnotationUtil.hasMethodAnnotation(method, PostActivate.class) + || AnnotationUtil.hasMethodAnnotation(method, PrePassivate.class) ) { if (ClassUtil.isMethodHasParameter(method)) @@ -220,10 +229,29 @@ public final class InterceptorUtil { return true; } + else + { + logger.debug("Static LifeCycle callback method found."); + } + } + else + { + logger.debug("LifeCycle callback method with checked exception."); } } + else + { + logger.debug("LifeCycle callback method with non-void return type."); + } } - + else + { + logger.debug("LifeCycle callback method with wrong number or type of parameter(s)."); + } + } + else + { + logger.debug("LifeCycle callback method without any context parameter."); } } } @@ -239,7 +267,9 @@ public final class InterceptorUtil { AnnotatedMethod<T> method = (AnnotatedMethod<T>)methodA; if(method.isAnnotationPresent(PostConstruct.class) - || method.isAnnotationPresent(PreDestroy.class)) + || method.isAnnotationPresent(PreDestroy.class) + || method.isAnnotationPresent(PostActivate.class) + || method.isAnnotationPresent(PrePassivate.class)) { if (!methodA.getParameters().isEmpty()) { @@ -433,8 +463,11 @@ public final class InterceptorUtil public static List<InterceptorData> getInterceptorMethods(List<InterceptorData> stack, InterceptorType type) { List<InterceptorData> ai = new ArrayList<InterceptorData>(); + List<InterceptorData> at = new ArrayList<InterceptorData>(); + List<InterceptorData> pa = new ArrayList<InterceptorData>(); List<InterceptorData> pc = new ArrayList<InterceptorData>(); List<InterceptorData> pd = new ArrayList<InterceptorData>(); + List<InterceptorData> pp = new ArrayList<InterceptorData>(); Iterator<InterceptorData> it = stack.iterator(); while (it.hasNext()) @@ -451,6 +484,24 @@ public final class InterceptorUtil } } + else if (type.equals(InterceptorType.AROUND_TIMEOUT)) + { + m = data.getAroundTimeout(); + if (m != null) + { + at.add(data); + } + + } + else if (type.equals(InterceptorType.POST_ACTIVATE)) + { + m = data.getPostActivate(); + if (m != null) + { + pa.add(data); + } + + } else if (type.equals(InterceptorType.POST_CONSTRUCT)) { m = data.getPostConstruct(); @@ -469,22 +520,42 @@ public final class InterceptorUtil } } + else if (type.equals(InterceptorType.PRE_PASSIVATE)) + { + m = data.getPrePassivate(); + if (m != null) + { + pp.add(data); + } + } } if (type.equals(InterceptorType.AROUND_INVOKE)) { return ai; } + else if (type.equals(InterceptorType.AROUND_TIMEOUT)) + { + return at; + } + else if (type.equals(InterceptorType.POST_ACTIVATE)) + { + return pa; + } else if (type.equals(InterceptorType.POST_CONSTRUCT)) { return pc; - } else if (type.equals(InterceptorType.PRE_DESTROY)) { return pd; } + else if (type.equals(InterceptorType.PRE_PASSIVATE)) + { + return pp; + + } return Collections.EMPTY_LIST; } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java?rev=979071&r1=979070&r2=979071&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java Sun Jul 25 17:10:36 2010 @@ -33,6 +33,7 @@ import org.apache.webbeans.component.Ent import org.apache.webbeans.component.OwbBean; import org.apache.webbeans.container.BeanManagerImpl; import org.apache.webbeans.context.creational.CreationalContextImpl; +import org.apache.webbeans.logger.WebBeansLogger; import org.apache.webbeans.util.ClassUtil; import org.apache.webbeans.util.SecurityUtil; @@ -67,6 +68,9 @@ public class InvocationContextImpl imple private OwbBean<?> owbBean; private InvocationContext ejbInvocationContext; + + //Logger instance + private static final WebBeansLogger logger = WebBeansLogger.getLogger(InvocationContextImpl.class); /** * Initializes the context. @@ -168,8 +172,15 @@ public class InvocationContextImpl imple { if (type.equals(InterceptorType.AROUND_INVOKE)) { + logger.debug("InvocationContextImpl: Proceeding to AroundInvokes."); return proceedAroundInvokes(this.interceptorDatas); } + else if (type.equals(InterceptorType.AROUND_TIMEOUT)) + { + logger.debug("InvocationContextImpl: Proceeding to AroundTimeouts."); + return proceedAroundTimeouts(this.interceptorDatas); + } + logger.debug("InvocationContextImpl: Proceeding to CommonAnnotations."); return proceedCommonAnnots(this.interceptorDatas, this.type); } @@ -261,7 +272,75 @@ public class InvocationContextImpl imple return result; } - + + /** + * AroundTimeout operations on stack. + * @param datas interceptor stack + * @return final result + * @throws Exception for exceptions + */ + private Object proceedAroundTimeouts(List<InterceptorData> datas) throws Exception + { + Object result = null; + + if (currentMethod <= datas.size()) + { + InterceptorData intc = datas.get(currentMethod - 1); + + Method method = intc.getAroundTimeout(); + boolean accessible = method.isAccessible(); + + if (!accessible) + { + SecurityUtil.doPrivilegedSetAccessible(method, true); + } + + Object t = intc.createNewInstance(this.target,(CreationalContextImpl<?>)this.creationalContext); + + if (t == null) + { + t = target; + } + + currentMethod++; + + result = method.invoke(t, new Object[] { this }); + + if(!accessible) + { + SecurityUtil.doPrivilegedSetAccessible(method, false); + } + + } + else + { + if(!(this.owbBean instanceof EnterpriseBeanMarker)) + { + boolean accessible = this.method.isAccessible(); + if(!accessible) + { + SecurityUtil.doPrivilegedSetAccessible(method, true); + } + + result = this.method.invoke(target, parameters); + + if(!accessible) + { + SecurityUtil.doPrivilegedSetAccessible(method, false); + } + } + else + { + if (this.ejbInvocationContext != null) + { + result = ejbInvocationContext.proceed(); + } + } + } + + return result; + } + /** * Post construct and predestroy * callback operations. @@ -283,6 +362,14 @@ public class InvocationContextImpl imple { method = intc.getPostConstruct(); } + else if (type.equals(InterceptorType.POST_ACTIVATE)) + { + method = intc.getPostActivate(); + } + else if (type.equals(InterceptorType.PRE_PASSIVATE)) + { + method = intc.getPrePassivate(); + } else if (type.equals(InterceptorType.PRE_DESTROY)) { method = intc.getPreDestroy(); Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java?rev=979071&r1=979070&r2=979071&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java Sun Jul 25 17:10:36 2010 @@ -276,10 +276,6 @@ public class WebBeansInterceptor<T> exte method = WebBeansUtil.checkAroundInvokeAnnotationCriterias(getClazz(),AroundTimeout.class); } - else if(type.equals(InterceptionType.POST_ACTIVATE) || type.equals(InterceptionType.PRE_PASSIVATE)) - { - return null; - } else { Class<? extends Annotation> interceptorTypeAnnotationClazz = InterceptorUtil.getInterceptorAnnotationClazz(type); Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=979071&r1=979070&r2=979071&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java Sun Jul 25 17:10:36 2010 @@ -45,6 +45,8 @@ import java.util.concurrent.ConcurrentHa import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.decorator.Decorator; +import javax.ejb.PostActivate; +import javax.ejb.PrePassivate; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.Conversation; import javax.enterprise.context.ConversationScoped; @@ -1205,27 +1207,10 @@ public final class WebBeansUtil { method = WebBeansUtil.checkAroundInvokeAnnotationCriterias(interceptorClass, interceptorType); } - else if (interceptorType.equals(PostConstruct.class)) + else if (interceptorType.equals(PostConstruct.class) || interceptorType.equals(PostActivate.class) + || interceptorType.equals(PreDestroy.class) || interceptorType.equals(PrePassivate.class)) { - if (definedInInterceptorClass) - { - method = WebBeansUtil.checkCommonAnnotationCriterias(interceptorClass, PostConstruct.class, true); - } - else - { - method = WebBeansUtil.checkCommonAnnotationCriterias(interceptorClass, PostConstruct.class, false); - } - } - else if (interceptorType.equals(PreDestroy.class)) - { - if (definedInInterceptorClass) - { - method = WebBeansUtil.checkCommonAnnotationCriterias(interceptorClass, PreDestroy.class, true); - } - else - { - method = WebBeansUtil.checkCommonAnnotationCriterias(interceptorClass, PreDestroy.class, false); - } + method = WebBeansUtil.checkCommonAnnotationCriterias(interceptorClass, interceptorType, definedInInterceptorClass); } if (method != null) @@ -1264,27 +1249,10 @@ public final class WebBeansUtil { method = WebBeansUtil.checkAroundInvokeAnnotationCriterias(annotatedType, annotation); } - else if (annotation.equals(PostConstruct.class)) + else if (annotation.equals(PostConstruct.class) || annotation.equals(PostActivate.class) + || annotation.equals(PreDestroy.class) || annotation.equals(PrePassivate.class)) { - if (definedInInterceptorClass) - { - method = WebBeansUtil.checkCommonAnnotationCriterias(annotatedType, PostConstruct.class, true); - } - else - { - method = WebBeansUtil.checkCommonAnnotationCriterias(annotatedType, PostConstruct.class, false); - } - } - else if (annotation.equals(PreDestroy.class)) - { - if (definedInInterceptorClass) - { - method = WebBeansUtil.checkCommonAnnotationCriterias(annotatedType, PreDestroy.class, true); - } - else - { - method = WebBeansUtil.checkCommonAnnotationCriterias(annotatedType, PreDestroy.class, false); - } + method = WebBeansUtil.checkCommonAnnotationCriterias(annotatedType, annotation, definedInInterceptorClass); } if (method != null) @@ -1368,15 +1336,26 @@ public final class WebBeansUtil { m = data.getAroundInvoke(); } + else if (type.equals(InterceptorType.AROUND_TIMEOUT)) + { + m = data.getAroundTimeout(); + } else if (type.equals(InterceptorType.POST_CONSTRUCT)) { m = data.getPostConstruct(); - + } + else if (type.equals(InterceptorType.POST_ACTIVATE)) + { + m = data.getPostActivate(); } else if (type.equals(InterceptorType.PRE_DESTROY)) { m = data.getPreDestroy(); } + else if (type.equals(InterceptorType.PRE_PASSIVATE)) + { + m = data.getPrePassivate(); + } if (m != null) {
