You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by co...@apache.org on 2010/07/25 19:10:37 UTC
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)
{
Re: 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...
Posted by Gurkan Erdogdu <gu...@yahoo.com>.
+1,
webbeans-core must not depend on any Java EE libraries. We use plugins for these
kind of technology dependencies.
--Gurkan
________________________________
From: Mark Struberg <st...@yahoo.de>
To: dev@openwebbeans.apache.org
Sent: Mon, July 26, 2010 5:15:49 PM
Subject: Re: 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...
txs Gurkan!
The patch was a good start, but it seems we need to revert for now anyway since
this introduced a hardcoded EJB dependency in webbeans-impl. See OWB-422 for
more info.
LieGrue,
strub
PS: this part looks easy on the first glance, but there was a good reason why it
was left aside for such a long time :)
----- Original Message ----
> From: Gurkan Erdogdu <gu...@yahoo.com>
> To: dev@openwebbeans.apache.org
> Sent: Mon, July 26, 2010 4:10:30 PM
> Subject: Re: 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...
>
> Hello,
>
> This commit breaks following TCK tests,
>
> 1- DecoratorAndInterceptorTest # testInterceptorCalledBeforeDecorator
> 2- InterceptorCalledBeforeDecoratorTest #
>testInterceptorCalledBeforeDecorator
>
> --Gurkan
>
>
>
>
> ________________________________
> From: "covener@apache.org" <co...@apache.org>
> To: commits@openwebbeans.apache.org
> 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
>
>a
>
> openwebbeans/trunk/webbeans-impl/pom.xml
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java
>
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
>
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorType.java
>
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
>
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java
>
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
>
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
>
>a
>
>
> 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
>
>f
>
> ==============================================================================
> --- 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
>
>a
>
> 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
>
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
>
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
>
>a
> 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
>
>f
>
> ==============================================================================
> --- 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
>
>a
>
> 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
>
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java
>
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java
>
>a
> 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
>
>a
>
> 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
>
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
>
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
>
>a
> 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
>
>a
>
> 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
>
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorType.java
>
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorType.java
>
>a
> 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
>
>a
>
> 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
>
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
>
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
>
>a
> 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
>
>a
>
> 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
>
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java
>
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java
>
>a
> 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
>
>a
>
> 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
>
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
>
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
>
>a
> 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
>
>a
>
> 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
>
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
>
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
>
>a
> 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)
> {
>
>
Re: 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...
Posted by Mark Struberg <st...@yahoo.de>.
txs Gurkan!
The patch was a good start, but it seems we need to revert for now anyway since
this introduced a hardcoded EJB dependency in webbeans-impl. See OWB-422 for
more info.
LieGrue,
strub
PS: this part looks easy on the first glance, but there was a good reason why it
was left aside for such a long time :)
----- Original Message ----
> From: Gurkan Erdogdu <gu...@yahoo.com>
> To: dev@openwebbeans.apache.org
> Sent: Mon, July 26, 2010 4:10:30 PM
> Subject: Re: 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...
>
> Hello,
>
> This commit breaks following TCK tests,
>
> 1- DecoratorAndInterceptorTest # testInterceptorCalledBeforeDecorator
> 2- InterceptorCalledBeforeDecoratorTest #
>testInterceptorCalledBeforeDecorator
>
> --Gurkan
>
>
>
>
> ________________________________
> From: "covener@apache.org" <co...@apache.org>
> To: commits@openwebbeans.apache.org
> 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
>a
>
> openwebbeans/trunk/webbeans-impl/pom.xml
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorType.java
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
>a
>
>
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
>a
>
>
> 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
>f
>
> ==============================================================================
> --- 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
>a
>
> 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
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
>a
> 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
>f
>
> ==============================================================================
> --- 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
>a
>
> 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
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java
>a
> 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
>a
>
> 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
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
>a
> 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
>a
>
> 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
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorType.java
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorType.java
>a
> 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
>a
>
> 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
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
>a
> 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
>a
>
> 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
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java
>a
> 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
>a
>
> 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
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
>a
> 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
>a
>
> 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
>f
>
> ==============================================================================
> ---
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
>a
> > (original)
> +++
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
>a
> 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)
> {
>
>
Re: 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...
Posted by Gurkan Erdogdu <gu...@yahoo.com>.
Hello,
This commit breaks following TCK tests,
1- DecoratorAndInterceptorTest # testInterceptorCalledBeforeDecorator
2- InterceptorCalledBeforeDecoratorTest # testInterceptorCalledBeforeDecorator
--Gurkan
________________________________
From: "covener@apache.org" <co...@apache.org>
To: commits@openwebbeans.apache.org
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)
{