[weld-commits] Weld SVN: r4628 - in core/trunk/impl/src/main/java/org/jboss/weld: bootstrap/events and 2 other directories.

weld-commits at lists.jboss.org weld-commits at lists.jboss.org
Tue Nov 3 14:38:03 EST 2009


Author: marius.bogoevici
Date: 2009-11-03 14:38:02 -0500 (Tue, 03 Nov 2009)
New Revision: 4628

Modified:
   core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java
   core/trunk/impl/src/main/java/org/jboss/weld/Validator.java
   core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/events/AfterBeanDiscoveryImpl.java
   core/trunk/impl/src/main/java/org/jboss/weld/resolution/TypeSafeInterceptorResolver.java
   core/trunk/impl/src/main/java/org/jboss/weld/xml/BeansXmlParser.java
Log:
WELD-238: Support Interceptors added via portable extensions.

Modified: core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java	2009-11-03 19:11:21 UTC (rev 4627)
+++ core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java	2009-11-03 19:38:02 UTC (rev 4628)
@@ -218,7 +218,7 @@
     */
    private transient final TypeSafeBeanResolver<Bean<?>> beanResolver;
    private transient final TypeSafeResolver<? extends Resolvable, DecoratorImpl<?>> decoratorResolver;
-   private transient final TypeSafeResolver<? extends Resolvable, InterceptorImpl<?>> interceptorResolver;
+   private transient final TypeSafeResolver<? extends Resolvable, Interceptor<?>> interceptorResolver;
    private transient final TypeSafeResolver<? extends Resolvable, ObserverMethod<?>> observerResolver;
    private transient final NameBasedResolver nameBasedResolver;
    private transient final ELResolver weldELResolver;
@@ -236,7 +236,7 @@
    private transient final List<Bean<?>> beans;
    private transient final List<Bean<?>> transitiveBeans;
    private transient final List<DecoratorImpl<?>> decorators;
-   private transient final List<InterceptorImpl<?>> interceptors;
+   private transient final List<Interceptor<?>> interceptors;
    private transient final List<String> namespaces;
    private transient final List<ObserverMethod<?>> observers;
    
@@ -290,7 +290,7 @@
             new CopyOnWriteArrayList<Bean<?>>(),
             new CopyOnWriteArrayList<Bean<?>>(),
             new CopyOnWriteArrayList<DecoratorImpl<?>>(),
-            new CopyOnWriteArrayList<InterceptorImpl<?>>(),
+            new CopyOnWriteArrayList<Interceptor<?>>(),
             new CopyOnWriteArrayList<ObserverMethod<?>>(),
             new CopyOnWriteArrayList<String>(),
             new ConcurrentHashMap<EjbDescriptor<?>, SessionBean<?>>(),
@@ -319,7 +319,7 @@
             new CopyOnWriteArrayList<Bean<?>>(),
             new CopyOnWriteArrayList<Bean<?>>(),
             new CopyOnWriteArrayList<DecoratorImpl<?>>(),
-            new CopyOnWriteArrayList<InterceptorImpl<?>>(),
+            new CopyOnWriteArrayList<Interceptor<?>>(),
             new CopyOnWriteArrayList<ObserverMethod<?>>(),
             new CopyOnWriteArrayList<String>(),
             rootManager.getEnterpriseBeans(),
@@ -385,7 +385,7 @@
          List<Bean<?>> beans, 
          List<Bean<?>> transitiveBeans,
          List<DecoratorImpl<?>> decorators,
-         List<InterceptorImpl<?>> interceptors,
+         List<Interceptor<?>> interceptors,
          List<ObserverMethod<?>> observers, 
          List<String> namespaces,
          Map<EjbDescriptor<?>, SessionBean<?>> enterpriseBeans, 
@@ -528,10 +528,10 @@
          
       };
 
-      public static Transform<InterceptorImpl<?>> INTERCEPTOR_BEAN = new Transform<InterceptorImpl<?>>()
+      public static Transform<Interceptor<?>> INTERCEPTOR_BEAN = new Transform<Interceptor<?>>()
       {
 
-         public Iterable<InterceptorImpl<?>> transform(BeanManagerImpl beanManager)
+         public Iterable<Interceptor<?>> transform(BeanManagerImpl beanManager)
          {
             return beanManager.getInterceptors();
          }
@@ -610,7 +610,7 @@
       return this.<T>resolveObserverMethods(event.getClass(), bindings);
    }
 
-   public void addInterceptor(InterceptorImpl<?> bean)
+   public void addInterceptor(Interceptor<?> bean)
    {
       interceptors.add(bean);
       getServices().get(ContextualStore.class).putIfAbsent(bean);
@@ -815,7 +815,7 @@
       return Collections.unmodifiableList(decorators);
    }
 
-    public List<InterceptorImpl<?>> getInterceptors()
+    public List<Interceptor<?>> getInterceptors()
    {
       return Collections.unmodifiableList(interceptors);
    }

Modified: core/trunk/impl/src/main/java/org/jboss/weld/Validator.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/Validator.java	2009-11-03 19:11:21 UTC (rev 4627)
+++ core/trunk/impl/src/main/java/org/jboss/weld/Validator.java	2009-11-03 19:38:02 UTC (rev 4628)
@@ -27,6 +27,7 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.Map;
 
 import javax.enterprise.context.Dependent;
 import javax.enterprise.event.Event;
@@ -266,6 +267,7 @@
       validateBeans(manager.getDecorators(), new ArrayList<RIBean<?>>(), manager);
       validateBeans(manager.getBeans(), new ArrayList<RIBean<?>>(), manager);
       validateEnabledDecoratorClasses(manager);
+      validateEnabledInterceptorClasses(manager);
       validateEnabledPolicies(manager);
       validateDisposalMethods(environment);
       validateBeanNames(manager);
@@ -324,6 +326,28 @@
          }
       }
    }
+
+   private void validateEnabledInterceptorClasses(BeanManagerImpl beanManager)
+   {
+      Set<Class<?>> interceptorBeanClasses = new HashSet<Class<?>>();
+      for (Interceptor<?> interceptor : beanManager.getInterceptors())
+      {
+         interceptorBeanClasses.add(interceptor.getBeanClass());
+      }
+      for (Class<?> enabledInterceptorClass: beanManager.getEnabledInterceptorClasses())
+      {
+         if (beanManager.getEnabledInterceptorClasses().indexOf(enabledInterceptorClass)
+               < beanManager.getEnabledInterceptorClasses().lastIndexOf(enabledInterceptorClass))
+         {
+            throw new DeploymentException("Enabled interceptor class" + enabledInterceptorClass + " specified twice");
+         }
+         if (!interceptorBeanClasses.contains(enabledInterceptorClass))
+         {
+            throw new DeploymentException("Enabled interceptor class " + enabledInterceptorClass
+                  + " is neither annotated with @Interceptor, nor registered through a portable extension");
+         }
+      }
+   }
    
    private void validateEnabledDecoratorClasses(BeanManagerImpl beanManager)
    {

Modified: core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/events/AfterBeanDiscoveryImpl.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/events/AfterBeanDiscoveryImpl.java	2009-11-03 19:11:21 UTC (rev 4627)
+++ core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/events/AfterBeanDiscoveryImpl.java	2009-11-03 19:38:02 UTC (rev 4628)
@@ -24,6 +24,8 @@
 import javax.enterprise.inject.spi.AfterBeanDiscovery;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.ObserverMethod;
+import javax.enterprise.inject.spi.Interceptor;
+import javax.decorator.Decorator;
 
 import org.jboss.weld.BeanManagerImpl;
 import org.jboss.weld.bootstrap.BeanDeployment;
@@ -56,7 +58,14 @@
    public void addBean(Bean<?> bean)
    {
       BeanManagerImpl beanManager = getOrCreateBeanDeployment(bean.getBeanClass()).getBeanManager();
-      beanManager.addBean(bean);
+      if (bean instanceof Interceptor)
+      {
+         beanManager.addInterceptor((Interceptor<?>) bean);
+      }
+      else
+      {
+         beanManager.addBean(bean);
+      }
       ProcessBeanImpl.fire(beanManager, bean);
    }
 

Modified: core/trunk/impl/src/main/java/org/jboss/weld/resolution/TypeSafeInterceptorResolver.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/resolution/TypeSafeInterceptorResolver.java	2009-11-03 19:11:21 UTC (rev 4627)
+++ core/trunk/impl/src/main/java/org/jboss/weld/resolution/TypeSafeInterceptorResolver.java	2009-11-03 19:38:02 UTC (rev 4628)
@@ -23,6 +23,8 @@
 import java.util.Set;
 import java.util.TreeSet;
 
+import javax.enterprise.inject.spi.Interceptor;
+
 import org.jboss.weld.BeanManagerImpl;
 import org.jboss.weld.bean.InterceptorImpl;
 import org.jboss.weld.util.Beans;
@@ -30,34 +32,34 @@
 /**
  * @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
  */
-public class TypeSafeInterceptorResolver extends TypeSafeResolver<InterceptorResolvable,InterceptorImpl<?>>
+public class TypeSafeInterceptorResolver extends TypeSafeResolver<InterceptorResolvable,Interceptor<?>>
 {
    private BeanManagerImpl manager;
 
 
-   public TypeSafeInterceptorResolver(BeanManagerImpl manager, Iterable<InterceptorImpl<?>> interceptors)
+   public TypeSafeInterceptorResolver(BeanManagerImpl manager, Iterable<Interceptor<?>> interceptors)
    {
       super(interceptors);
       this.manager = manager;
    }
 
    @Override
-   protected boolean matches(InterceptorResolvable resolvable, InterceptorImpl<?> bean)
+   protected boolean matches(InterceptorResolvable resolvable, Interceptor<?> bean)
    {
       return bean.intercepts(resolvable.getInterceptionType())
             && bean.getInterceptorBindings().size() > 0
             && Beans.containsAllInterceptionBindings(bean.getInterceptorBindings(), resolvable.getQualifiers(), getManager())
-            && getManager().getEnabledInterceptorClasses().contains(bean.getType());
+            && getManager().getEnabledInterceptorClasses().contains(bean.getBeanClass());
    }
 
 
    @Override
-   protected Set<InterceptorImpl<?>> sortResult(Set<InterceptorImpl<?>> matchedInterceptors)
+   protected Set<Interceptor<?>> sortResult(Set<Interceptor<?>> matchedInterceptors)
    {
-      Set<InterceptorImpl<?>> sortedBeans = new TreeSet<InterceptorImpl<?>>(new Comparator<InterceptorImpl<?>>()
+      Set<Interceptor<?>> sortedBeans = new TreeSet<Interceptor<?>>(new Comparator<Interceptor<?>>()
       {
 
-         public int compare(InterceptorImpl<?> o1, InterceptorImpl<?> o2)
+         public int compare(Interceptor<?> o1, Interceptor<?> o2)
          {
             List<Class<?>> enabledInterceptors = getManager().getEnabledInterceptorClasses();
             int p1 = enabledInterceptors.indexOf(((InterceptorImpl<?>) o1).getType());
@@ -71,7 +73,7 @@
    }
 
    @Override
-   protected Set<InterceptorImpl<?>> filterResult(Set<InterceptorImpl<?>> matched)
+   protected Set<Interceptor<?>> filterResult(Set<Interceptor<?>> matched)
    {
       return matched;
    }

Modified: core/trunk/impl/src/main/java/org/jboss/weld/xml/BeansXmlParser.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/xml/BeansXmlParser.java	2009-11-03 19:11:21 UTC (rev 4627)
+++ core/trunk/impl/src/main/java/org/jboss/weld/xml/BeansXmlParser.java	2009-11-03 19:38:02 UTC (rev 4628)
@@ -283,19 +283,7 @@
             try
             {
                Class<?> clazz = resourceLoader.classForName(className);
-               if (!clazz.isAnnotationPresent(Interceptor.class))
-               {
-                   throw new DeploymentException("Class " + clazz.getName() + " is enabled as an interceptor," +
-                        " but it does not have the appropriate annotation");
-               }
-               else if (list.contains(clazz))
-               {
-                   throw new DeploymentException("Class " + clazz.getName() + " is listed twice as an enabled interceptor");
-               }
-               else
-               {
-                  list.add(clazz);
-               }
+               list.add(clazz);
             }
             catch (ResourceLoadingException e)
             {



More information about the weld-commits mailing list