Author: struberg
Date: Wed Jan 16 18:26:48 2013
New Revision: 1434090
URL: http://svn.apache.org/viewvc?rev=1434090&view=rev
Log:
OWB-344 PostConstruct interceptors continued ...
Modified:
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/BaseEjbBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionServiceTest.java
Modified:
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/BaseEjbBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/BaseEjbBean.java?rev=1434090&r1=1434089&r2=1434090&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/BaseEjbBean.java
(original)
+++
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/BaseEjbBean.java
Wed Jan 16 18:26:48 2013
@@ -57,7 +57,6 @@ public abstract class BaseEjbBean<T> ext
/**
* Creates a new instance of the session bean.
* @param webBeansContext
- * @param ejbClassType ebj class type
*/
protected BaseEjbBean(WebBeansContext webBeansContext,
SessionBeanType type,
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java?rev=1434090&r1=1434089&r2=1434090&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
Wed Jan 16 18:26:48 2013
@@ -40,7 +40,7 @@ import org.apache.webbeans.util.Exceptio
* <p>Any Interceptor is also an InjectionTarget as they can contain
* @Inject InjectionPoints.</p>
*/
-public abstract class InterceptorBean<T> extends InjectionTargetBean<T>
implements Interceptor<T>, EnterpriseBeanMarker
+public abstract class InterceptorBean<T> extends InjectionTargetBean<T>
implements Interceptor<T>
{
/**
* Constructor of the web bean component
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java?rev=1434090&r1=1434089&r2=1434090&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java
Wed Jan 16 18:26:48 2013
@@ -49,8 +49,8 @@ public class CdiInterceptorBeanBuilder<T
public void defineCdiInterceptorRules()
{
checkInterceptorConditions();
- defineInterceptorBindings();
defineInterceptorRules();
+ defineInterceptorBindings();
}
public boolean isInterceptorEnabled()
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev=1434090&r1=1434089&r2=1434090&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
Wed Jan 16 18:26:48 2013
@@ -20,6 +20,7 @@ package org.apache.webbeans.component.cr
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
+import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.AnnotatedConstructor;
import javax.enterprise.inject.spi.AnnotatedMethod;
@@ -76,6 +77,13 @@ public abstract class InterceptorBeanBui
}
}
+ @Override
+ public Class<? extends Annotation> getScope()
+ {
+ // Interceptors are always Dependent scoped
+ return Dependent.class;
+ }
+
public void defineConstructor()
{
constructor = getBeanConstructor();
@@ -126,6 +134,7 @@ public abstract class InterceptorBeanBui
protected void defineInterceptorRules()
{
+ defineApiType();
defineConstructor();
defineInterceptorMethods();
defineInjectedMethods();
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java?rev=1434090&r1=1434089&r2=1434090&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
Wed Jan 16 18:26:48 2013
@@ -37,6 +37,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -111,7 +112,11 @@ public class InterceptorResolutionServic
decorators = null; // less to store
}
- Set<Interceptor<?>> allUsedInterceptors = new
HashSet<Interceptor<?>>();
+ Set<Interceptor<?>> allUsedCdiInterceptors = new
HashSet<Interceptor<?>>();
+
+ LinkedHashSet<Interceptor<?>> allUsedEjbInterceptors = new
LinkedHashSet<Interceptor<?>>(); // we need to preserve the order!
+ allUsedEjbInterceptors.addAll(classLevelEjbInterceptors);
+
Map<Method, BusinessMethodInterceptorInfo>
businessMethodInterceptorInfos = new HashMap<Method,
BusinessMethodInterceptorInfo>();
List<Method> nonInterceptedMethods = new ArrayList<Method>();
@@ -123,9 +128,9 @@ public class InterceptorResolutionServic
Set<InterceptionType> interceptionTypes =
collectInterceptionTypes(annotatedMethod);
BusinessMethodInterceptorInfo methodInterceptorInfo = new
BusinessMethodInterceptorInfo(interceptionTypes);
- calculateEjbMethodInterceptors(methodInterceptorInfo,
allUsedInterceptors, classLevelEjbInterceptors, annotatedMethod);
+ calculateEjbMethodInterceptors(methodInterceptorInfo,
allUsedEjbInterceptors, classLevelEjbInterceptors, annotatedMethod);
- calculateCdiMethodInterceptors(methodInterceptorInfo,
allUsedInterceptors, annotatedMethod, classInterceptorBindings);
+ calculateCdiMethodInterceptors(methodInterceptorInfo,
allUsedCdiInterceptors, annotatedMethod, classInterceptorBindings);
calculateCdiMethodDecorators(methodInterceptorInfo, decorators,
annotatedMethod);
@@ -146,7 +151,7 @@ public class InterceptorResolutionServic
annotatedType,
InterceptionType.POST_CONSTRUCT,
PostConstruct.class,
- allUsedInterceptors,
+ allUsedCdiInterceptors,
classLevelEjbInterceptors,
classInterceptorBindings,
true);
@@ -156,12 +161,17 @@ public class InterceptorResolutionServic
annotatedType,
InterceptionType.PRE_DESTROY,
PreDestroy.class,
- allUsedInterceptors,
+ allUsedCdiInterceptors,
classLevelEjbInterceptors,
classInterceptorBindings,
true);
- return new BeanInterceptorInfo(decorators, allUsedInterceptors,
businessMethodInterceptorInfos, nonInterceptedMethods,
lifecycleMethodInterceptorInfos);
+ List<Interceptor<?>> cdiInterceptors = new
ArrayList<Interceptor<?>>(allUsedCdiInterceptors);
+ Collections.sort(cdiInterceptors, new
InterceptorComparator(webBeansContext));
+
+
+ return new BeanInterceptorInfo(decorators, allUsedEjbInterceptors,
cdiInterceptors, businessMethodInterceptorInfos,
+ nonInterceptedMethods,
lifecycleMethodInterceptorInfos);
}
private void addLifecycleMethods(Map<InterceptionType,
LifecycleMethodInfo> lifecycleMethodInterceptorInfos,
@@ -416,24 +426,32 @@ public class InterceptorResolutionServic
public static class BeanInterceptorInfo
{
public BeanInterceptorInfo(List<Decorator<?>> decorators,
- Set<Interceptor<?>> interceptors,
+ LinkedHashSet<Interceptor<?>>
ejbInterceptors,
+ List<Interceptor<?>> cdiInterceptors,
Map<Method, BusinessMethodInterceptorInfo>
businessMethodsInfo,
List<Method> nonInterceptedMethods,
Map<InterceptionType, LifecycleMethodInfo>
lifecycleMethodInterceptorInfos)
{
this.decorators = decorators;
- this.interceptors = interceptors;
+ this.ejbInterceptors = ejbInterceptors;
+ this.cdiInterceptors = cdiInterceptors;
this.businessMethodsInfo = businessMethodsInfo;
this.nonInterceptedMethods = nonInterceptedMethods;
this.lifecycleMethodInterceptorInfos =
lifecycleMethodInterceptorInfos;
}
/**
- * All the Interceptor Beans which are active on this class somewhere.
+ * All the EJB-style Interceptor Beans which are active on this class
somewhere.
+ * The Interceptors are sorted according to their definition.
+ */
+ private LinkedHashSet<Interceptor<?>> ejbInterceptors = null;
+
+ /**
+ * All the CDI-style Interceptor Beans which are active on this class
somewhere.
* This is only used to create the Interceptor instances.
- * The Interceptors are not sorted yet.
+ * The Interceptors are not sorted according to beans.xml .
*/
- private Set<Interceptor<?>> interceptors = null;
+ private List<Interceptor<?>> cdiInterceptors = null;
/**
* All the Decorator Beans active on this class.
@@ -464,9 +482,14 @@ public class InterceptorResolutionServic
return decorators;
}
- public Set<Interceptor<?>> getInterceptors()
+ public LinkedHashSet<Interceptor<?>> getEjbInterceptors()
+ {
+ return ejbInterceptors;
+ }
+
+ public List<Interceptor<?>> getCdiInterceptors()
{
- return interceptors;
+ return cdiInterceptors;
}
public Map<Method, BusinessMethodInterceptorInfo>
getBusinessMethodsInfo()
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java?rev=1434090&r1=1434089&r2=1434090&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
Wed Jan 16 18:26:48 2013
@@ -53,6 +53,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -149,24 +150,11 @@ public final class WebBeansInterceptorCo
Class proxyClass = pf.createProxyClass(classLoader,
bean.getReturnType(), businessMethods, nonInterceptedMethods);
// now we collect the post-construct and pre-destroy
interceptors
- List<Interceptor<?>> postConstructInterceptors = new
ArrayList<Interceptor<?>>();
- List<Interceptor<?>> preDestroyInterceptors = new
ArrayList<Interceptor<?>>();
- for (Interceptor<?> interceptor :
interceptorInfo.getInterceptors())
- {
- if
(interceptor.intercepts(InterceptionType.POST_CONSTRUCT))
- {
- postConstructInterceptors.add(interceptor);
- }
- if (interceptor.intercepts(InterceptionType.PRE_DESTROY))
- {
- preDestroyInterceptors.add(interceptor);
- }
- }
+ List<Interceptor<?>> postConstructInterceptors
+ =
getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
interceptorInfo.getCdiInterceptors(), InterceptionType.POST_CONSTRUCT);
- // and sort them
- InterceptorComparator interceptorComparator = new
InterceptorComparator(webBeansContext);
- Collections.sort(postConstructInterceptors,
interceptorComparator);
- Collections.sort(preDestroyInterceptors,
interceptorComparator);
+ List<Interceptor<?>> preDestroyInterceptors
+ =
getLifecycleInterceptors(interceptorInfo.getEjbInterceptors(),
interceptorInfo.getCdiInterceptors(), InterceptionType.PRE_DESTROY);
injectionTarget.setInterceptorInfo(interceptorInfo,
proxyClass, methodInterceptors, postConstructInterceptors,
preDestroyInterceptors);
}
@@ -175,6 +163,41 @@ public final class WebBeansInterceptorCo
}
+
+ private List<Interceptor<?>>
getLifecycleInterceptors(LinkedHashSet<Interceptor<?>> ejbInterceptors,
List<Interceptor<?>> cdiInterceptors, InterceptionType interceptionType)
+ {
+ List<Interceptor<?>> lifecycleInterceptors = new
ArrayList<Interceptor<?>>();
+
+ for (Interceptor<?> ejbInterceptor : ejbInterceptors)
+ {
+ if (ejbInterceptor.intercepts(interceptionType))
+ {
+ lifecycleInterceptors.add(ejbInterceptor);
+ }
+ }
+ for (Interceptor<?> cdiInterceptor : cdiInterceptors)
+ {
+ if (cdiInterceptor.intercepts(interceptionType))
+ {
+ lifecycleInterceptors.add(cdiInterceptor);
+ }
+ }
+
+ return lifecycleInterceptors;
+ }
+
+ private void addAllInterceptors(List<Interceptor<?>> collect,
Interceptor<?>[] interceptors)
+ {
+ if (interceptors != null)
+ {
+ for (Interceptor<?> interceptor : interceptors)
+ {
+ collect.add(interceptor);
+ }
+ }
+ }
+
+
/**
* Configure bean instance interceptor stack.
* @param bean bean instance
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java?rev=1434090&r1=1434089&r2=1434090&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
Wed Jan 16 18:26:48 2013
@@ -25,7 +25,6 @@ import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.text.MessageFormat;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -159,7 +158,7 @@ public class InjectionTargetImpl<T> exte
InterceptorDecoratorProxyFactory pf =
webBeansContext.getInterceptorDecoratorProxyFactory();
Map<Interceptor<?>,Object> interceptorInstances = new
HashMap<Interceptor<?>, Object>();
- for (Interceptor interceptorBean :
interceptorInfo.getInterceptors())
+ for (Interceptor interceptorBean :
interceptorInfo.getCdiInterceptors())
{
Object interceptorInstance;
if (interceptorBean instanceof SelfInterceptorBean)
@@ -304,9 +303,6 @@ public class InjectionTargetImpl<T> exte
interceptorInstances = dih.getInstances();
internalInstance = (T) dih.getTarget();
}
-
- // we are cheating a bit right now. We could also calculate the
real ones upfront
- postConstructInterceptors = new
ArrayList<Interceptor<?>>(interceptorInfo.getInterceptors());
}
InvocationContext ic = new
LifecycleInterceptorInvocationContext<T>(internalInstance,
InterceptionType.POST_CONSTRUCT, postConstructInterceptors,
@@ -342,9 +338,6 @@ public class InjectionTargetImpl<T> exte
interceptorInstances = dih.getInstances();
internalInstance = (T) dih.getTarget();
}
-
- // we are cheating a bit right now. We could also calculate the
real ones upfront
- preDestroyInterceptors = new
ArrayList<Interceptor<?>>(interceptorInfo.getInterceptors());
}
InvocationContext ic = new
LifecycleInterceptorInvocationContext<T>(internalInstance,
InterceptionType.PRE_DESTROY, preDestroyInterceptors,
Modified:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java?rev=1434090&r1=1434089&r2=1434090&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorProxyChainTest.java
Wed Jan 16 18:26:48 2013
@@ -116,7 +116,7 @@ public class InterceptorProxyChainTest e
// step 3.
// creating the InterceptorHandler for each intercepted instance later
at runtime
Map<Interceptor<?>,Object> interceptorInstances = new
HashMap<Interceptor<?>, Object>();
- for (Interceptor interceptorBean : interceptorInfo.getInterceptors())
+ for (Interceptor interceptorBean :
interceptorInfo.getCdiInterceptors())
{
Object interceptorInstance = interceptorBean.create(cc);
interceptorInstances.put(interceptorBean, interceptorInstance);
Modified:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionServiceTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionServiceTest.java?rev=1434090&r1=1434089&r2=1434090&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionServiceTest.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/InterceptorResolutionServiceTest.java
Wed Jan 16 18:26:48 2013
@@ -80,8 +80,8 @@ public class InterceptorResolutionServic
BeanInterceptorInfo interceptorInfo =
ir.calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(),
annotatedType);
Assert.assertNotNull(interceptorInfo);
- Assert.assertNotNull(interceptorInfo.getInterceptors());
- Assert.assertEquals(1, interceptorInfo.getInterceptors().size());
+ Assert.assertNotNull(interceptorInfo.getCdiInterceptors());
+ Assert.assertEquals(1, interceptorInfo.getCdiInterceptors().size());
Assert.assertNull(interceptorInfo.getDecorators());
@@ -122,8 +122,8 @@ public class InterceptorResolutionServic
BeanInterceptorInfo interceptorInfo =
ir.calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(),
annotatedType);
Assert.assertNotNull(interceptorInfo);
- Assert.assertNotNull(interceptorInfo.getInterceptors());
- Assert.assertEquals(1, interceptorInfo.getInterceptors().size());
+ Assert.assertNotNull(interceptorInfo.getCdiInterceptors());
+ Assert.assertEquals(1, interceptorInfo.getCdiInterceptors().size());
shutDownContainer();
}
@@ -152,8 +152,8 @@ public class InterceptorResolutionServic
BeanInterceptorInfo interceptorInfo =
ir.calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(),
annotatedType);
Assert.assertNotNull(interceptorInfo);
- Assert.assertNotNull(interceptorInfo.getInterceptors());
- Assert.assertEquals(3, interceptorInfo.getInterceptors().size());
+ Assert.assertNotNull(interceptorInfo.getCdiInterceptors());
+ Assert.assertEquals(3, interceptorInfo.getCdiInterceptors().size());
Assert.assertNull(interceptorInfo.getDecorators());
@@ -196,8 +196,8 @@ public class InterceptorResolutionServic
BeanInterceptorInfo interceptorInfo =
ir.calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(),
annotatedType);
Assert.assertNotNull(interceptorInfo);
- Assert.assertNotNull(interceptorInfo.getInterceptors());
- Assert.assertEquals(2, interceptorInfo.getInterceptors().size());
+ Assert.assertNotNull(interceptorInfo.getCdiInterceptors());
+ Assert.assertEquals(2, interceptorInfo.getCdiInterceptors().size());
Assert.assertNull(interceptorInfo.getDecorators());