You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2013/01/13 22:31:55 UTC

svn commit: r1432749 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/config/ main/java/org/apache/webbeans/intercept/ test/java/org/apache/webbeans/newtests/interceptors/resolution/

Author: struberg
Date: Sun Jan 13 21:31:55 2013
New Revision: 1432749

URL: http://svn.apache.org/viewvc?rev=1432749&view=rev
Log:
OWB-344 create method for creating EJB interceptors in InterceptorsManager

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorComparator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1432749&r1=1432748&r2=1432749&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java Sun Jan 13 21:31:55 2013
@@ -344,7 +344,7 @@ public class BeansDeployer
         beans.clear();
         
         //Adding interceptors to validate
-        List<javax.enterprise.inject.spi.Interceptor<?>> interceptors = webBeansContext.getInterceptorsManager().getInterceptors();
+        List<javax.enterprise.inject.spi.Interceptor<?>> interceptors = webBeansContext.getInterceptorsManager().getCdiInterceptors();
         for(javax.enterprise.inject.spi.Interceptor interceptor : interceptors)
         {
             WebBeansInterceptorBeanPleaseRemove wbInt = (WebBeansInterceptorBeanPleaseRemove)interceptor;

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorComparator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorComparator.java?rev=1432749&r1=1432748&r2=1432749&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorComparator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorComparator.java Sun Jan 13 21:31:55 2013
@@ -46,7 +46,7 @@ public class InterceptorComparator<T> im
             Class<?> o1Clazz = o1.getBeanClass();
             Class<?> o2Clazz = o2.getBeanClass();
 
-            return interceptorsManager.compare(o1Clazz, o2Clazz);
+            return interceptorsManager.compareCdiInterceptors(o1Clazz, o2Clazz);
 
         }
     }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java?rev=1432749&r1=1432748&r2=1432749&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java Sun Jan 13 21:31:55 2013
@@ -69,7 +69,7 @@ public class InterceptorDataComparator i
                 Class<?> o1Clazz = interceptorFirst.getClazz();
                 Class<?> o2Clazz = interceptorSecond.getClazz();
 
-                return instance.getInterceptorsManager().compare(o1Clazz, o2Clazz);
+                return instance.getInterceptorsManager().compareCdiInterceptors(o1Clazz, o2Clazz);
             }
 
         }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java?rev=1432749&r1=1432748&r2=1432749&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java Sun Jan 13 21:31:55 2013
@@ -26,6 +26,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.enterprise.inject.spi.AnnotatedType;
@@ -33,6 +34,7 @@ import javax.enterprise.inject.spi.Inter
 import javax.enterprise.inject.spi.PassivationCapable;
 
 import org.apache.webbeans.component.OwbBean;
+import org.apache.webbeans.component.creation.EjbInterceptorBeanBuilder;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
@@ -56,6 +58,11 @@ public class InterceptorsManager
      */
     private List<Interceptor<?>> cdiInterceptors = new ArrayList<Interceptor<?>>();
 
+    /**
+     * EJB-style Interceptor beans.
+     */
+    private ConcurrentHashMap<Class<?>, Interceptor<?>> ejbInterceptors = new ConcurrentHashMap<Class<?>, Interceptor<?>>();
+
     /**Additional interceptor class*/
     private List<Class<?>> additionalInterceptorClasses = new ArrayList<Class<?>>();
 
@@ -81,6 +88,8 @@ public class InterceptorsManager
         additionalInterceptorBindingTypes.clear();
         additionalInterceptorClasses.clear();
         configuredInterceptorClasses.clear();
+        cdiInterceptors.clear();
+        ejbInterceptors.clear();
     }
 
 
@@ -98,9 +107,34 @@ public class InterceptorsManager
     }
 
     /**
+     * get the EJB-style Interceptor
+     * @param interceptorClass
+     * @param <T>
+     * @return
+     */
+    public <T> Interceptor<T> getEjbInterceptorForClass(Class<T> interceptorClass)
+    {
+        Interceptor<T> interceptor = (Interceptor<T>) ejbInterceptors.get(interceptorClass);
+        if (interceptor == null)
+        {
+            AnnotatedType<T> annotatedType = webBeansContext.getBeanManagerImpl().createAnnotatedType(interceptorClass);
+            EjbInterceptorBeanBuilder<T> buildr = new EjbInterceptorBeanBuilder<T>(webBeansContext, annotatedType);
+            buildr.defineEjbInterceptorRules();
+            Interceptor<T> i = buildr.getBean();
+            interceptor = (Interceptor<T>) ejbInterceptors.putIfAbsent(interceptorClass, i);
+            if (interceptor == null)
+            {
+                interceptor = i;
+            }
+        }
+
+        return interceptor;
+    }
+
+    /**
      * Helper to compare the order of different interceptor classes
      */
-    public int compare(Class<?> src, Class<?> target)
+    public int compareCdiInterceptors(Class<?> src, Class<?> target)
     {
         Asserts.assertNotNull(src, "src parameter can not be  null");
         Asserts.assertNotNull(target, "target parameter can not be null");
@@ -163,7 +197,7 @@ public class InterceptorsManager
     }
 
 
-    public List<Interceptor<?>> getInterceptors()
+    public List<Interceptor<?>> getCdiInterceptors()
     {
         return cdiInterceptors;
     }

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=1432749&r1=1432748&r2=1432749&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 Sun Jan 13 21:31:55 2013
@@ -402,7 +402,7 @@ public final class WebBeansInterceptorCo
     {
         Set<Interceptor<?>> set = new HashSet<Interceptor<?>>();
 
-        Iterator<Interceptor<?>> it = webBeansContext.getInterceptorsManager().getInterceptors().iterator();
+        Iterator<Interceptor<?>> it = webBeansContext.getInterceptorsManager().getCdiInterceptors().iterator();
 
         List<Class<? extends Annotation>> bindingTypes = new ArrayList<Class<? extends Annotation>>();
         List<Annotation> listAnnot = new ArrayList<Annotation>();

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java?rev=1432749&r1=1432748&r2=1432749&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java Sun Jan 13 21:31:55 2013
@@ -20,6 +20,8 @@ package org.apache.webbeans.newtests.int
 
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.InterceptionType;
+import javax.enterprise.inject.spi.Interceptor;
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -65,4 +67,27 @@ public class EjbInterceptorBeanBuilderTe
         shutDownContainer();
     }
 
+    @Test
+    public void testInterceptorsManagerEjbBeanCreation()
+    {
+        Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();
+        beanClasses.add(UtilitySampleBean.class);
+        beanClasses.add(EjbInterceptor.class);
+        beanClasses.add(ManagedBeanWithEjbInterceptor.class);
+
+        startContainer(beanClasses, null);
+
+        Interceptor<EjbInterceptor> interceptor = getWebBeansContext().getInterceptorsManager().getEjbInterceptorForClass(EjbInterceptor.class);
+        Assert.assertNotNull(interceptor);
+        Assert.assertTrue(interceptor.intercepts(InterceptionType.AROUND_INVOKE));
+
+        Interceptor<EjbInterceptor> interceptor2 = getWebBeansContext().getInterceptorsManager().getEjbInterceptorForClass(EjbInterceptor.class);
+        Assert.assertNotNull(interceptor2);
+        Assert.assertTrue(interceptor2.intercepts(InterceptionType.AROUND_INVOKE));
+
+        Assert.assertTrue(interceptor == interceptor2); // should return previous instance
+
+        shutDownContainer();
+    }
+
 }