You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2010/03/15 21:54:43 UTC

svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ component/creation/ config/ container/ decorator/ intercept/ portable/events/discovery/ util/

Author: gerdogdu
Date: Mon Mar 15 20:54:43 2010
New Revision: 923435

URL: http://svn.apache.org/viewvc?rev=923435&view=rev
Log:
Update for TCK

Added:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java   (with props)
Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorsManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java Mon Mar 15 20:54:43 2010
@@ -593,7 +593,7 @@ public abstract class AbstractOwbBean<T>
     @Override
     public void validatePassivationDependencies()
     {
-        if(isPassivationCapable())
+        if(isPassivationCapable() || (this instanceof AbstractProducerBean))
         {
             Set<InjectionPoint> injectionPoints = getInjectionPoints();
             for(InjectionPoint injectionPoint : injectionPoints)

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java Mon Mar 15 20:54:43 2010
@@ -183,6 +183,7 @@ public abstract class AbstractInjectedTa
     {
         this.injectionTarget = injectionTarget;
         this.injectionTargetSet = true;
+        //super.setProducer(injectionTarget);
     }
 
     /**

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=923435&r1=923434&r2=923435&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 Mon Mar 15 20:54:43 2010
@@ -43,12 +43,14 @@ import org.apache.webbeans.component.cre
 import org.apache.webbeans.component.creation.BeanCreator.MetaDataProvider;
 import org.apache.webbeans.config.OWBLogConst;
 import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.decorator.DecoratorsManager;
 import org.apache.webbeans.decorator.WebBeansDecorator;
 import org.apache.webbeans.deployment.StereoTypeManager;
 import org.apache.webbeans.deployment.StereoTypeModel;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.exception.WebBeansDeploymentException;
 import org.apache.webbeans.exception.inject.InconsistentSpecializationException;
+import org.apache.webbeans.intercept.InterceptorsManager;
 import org.apache.webbeans.intercept.webbeans.WebBeansInterceptor;
 import org.apache.webbeans.logger.WebBeansLogger;
 import org.apache.webbeans.plugins.OpenWebBeansJavaEEPlugin;
@@ -255,6 +257,9 @@ public class BeansDeployer
     private void validateInjectionPoints()
     {
         logger.debug("Validation of injection points has started.");
+        
+        DecoratorsManager.getInstance().validateDecoratorClasses();
+        InterceptorsManager.getInstance().validateInterceptorClasses();
 
         BeanManagerImpl manager = BeanManagerImpl.getManager();        
         Set<Bean<?>> beans = new HashSet<Bean<?>>();
@@ -293,8 +298,7 @@ public class BeansDeployer
         beans = manager.getBeans();
         
         //Validate Others
-        validate(beans);
-                
+        validate(beans);                
 
         logger.info(OWBLogConst.INFO_0008);
     }
@@ -343,7 +347,8 @@ public class BeansDeployer
                         }
                         else
                         {
-                            if(!bean.getBeanClass().isAnnotationPresent(javax.decorator.Decorator.class))
+                            if(!bean.getBeanClass().isAnnotationPresent(javax.decorator.Decorator.class) 
+                                    && !BeanManagerImpl.getManager().containsCustomDecoratorClass(bean.getBeanClass()))
                             {
                                 throw new WebBeansConfigurationException("Delegate injection points can not defined by beans that are not decorator. Injection point : " + injectionPoint);
                             }
@@ -371,7 +376,7 @@ public class BeansDeployer
         if (classIndex != null)
         {
             for(Class<?> implClass : classIndex)
-            {               
+            {   
                 if (ManagedBeanConfigurator.isManagedBean(implClass))
                 {
                     ManagedBeanConfigurator.checkManagedBeanCondition(implClass);
@@ -544,7 +549,11 @@ public class BeansDeployer
                     throw new WebBeansConfigurationException("Passivation scoped defined bean must be passivation capable, " +
                             "but bean : " + beanObj.toString() + " is not passivation capable");                    
                 }
-            }
+                else
+                {
+                    ((OwbBean<?>)beanObj).validatePassivationDependencies();
+                }
+            }            
             
             ((OwbBean<?>)beanObj).validatePassivationDependencies();
         } 
@@ -657,6 +666,12 @@ public class BeansDeployer
         }
         else
         {
+            if(BeanManagerImpl.getManager().containsCustomDecoratorClass(annotatedType.getJavaClass()) ||
+                    BeanManagerImpl.getManager().containsCustomInterceptorClass(annotatedType.getJavaClass()))
+            {
+                return;
+            }
+            
             logger.info(OWBLogConst.INFO_0009, new Object[]{annotatedType.getJavaClass().getName()});
             WebBeansUtil.defineManagedBean(managedBeanCreator, annotatedType);   
         }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java Mon Mar 15 20:54:43 2010
@@ -126,6 +126,12 @@ public class BeanManagerImpl implements 
     /**XML configurator instance*/
     private WebBeansXMLConfigurator xmlConfigurator = null;
     
+    /**Additional decorator class*/
+    private List<Class<?>> additionalDecoratorClasses = new CopyOnWriteArrayList<Class<?>>();
+    
+    /**Additional interceptor class*/
+    private List<Class<?>> additionalInterceptorClasses = new CopyOnWriteArrayList<Class<?>>();
+    
     /**
      * This list contains additional qualifiers which got set via the {@link BeforeBeanDiscovery#addQualifier(Class)} 
      * event function.
@@ -335,6 +341,30 @@ public class BeanManagerImpl implements 
 
     }
     
+    public void addCustomInterceptorClass(Class<?> clazz)
+    {
+        Asserts.nullCheckForClass(clazz);
+        this.additionalInterceptorClasses.add(clazz);
+    }
+
+    public void addCustomDecoratorClass(Class<?> clazz)
+    {
+        Asserts.nullCheckForClass(clazz);
+        this.additionalDecoratorClasses.add(clazz);
+    }
+    
+    public boolean containsCustomInterceptorClass(Class<?> clazz)
+    {
+        Asserts.nullCheckForClass(clazz);
+        return this.additionalInterceptorClasses.contains(clazz);
+    }
+
+    public boolean containsCustomDecoratorClass(Class<?> clazz)
+    {
+        Asserts.nullCheckForClass(clazz);
+        return this.additionalDecoratorClasses.contains(clazz);
+    }
+
     /**
      * {@inheritDoc}
      */

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/DecoratorsManager.java Mon Mar 15 20:54:43 2010
@@ -19,6 +19,7 @@ import java.util.concurrent.CopyOnWriteA
 import javax.decorator.Decorator;
 
 import org.apache.webbeans.config.WebBeansFinder;
+import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.util.Asserts;
 
@@ -45,11 +46,12 @@ public class DecoratorsManager
         {
             if(!decoratorClazz.isAnnotationPresent(Decorator.class))
             {
-                throw new WebBeansConfigurationException("Given class : " + decoratorClazz + " is not a decorator class");
+                //Maybe custom
+                BeanManagerImpl.getManager().addCustomDecoratorClass(decoratorClazz);
             }
             
             enabledDecorators.add(decoratorClazz);
-        }
+        }                
     }
 
     public int compare(Class<?> src, Class<?> target)
@@ -79,5 +81,17 @@ public class DecoratorsManager
 
         return enabledDecorators.contains(decoratorClazz);
     }
+    
+    public void validateDecoratorClasses()
+    {
+        for(Class<?> decoratorClazz : enabledDecorators)
+        {
+            //Validate decorator classes
+            if(!decoratorClazz.isAnnotationPresent(Decorator.class) && !BeanManagerImpl.getManager().containsCustomDecoratorClass(decoratorClazz))
+            {
+                throw new WebBeansConfigurationException("Given class : " + decoratorClazz + " is not a decorator class");
+            }   
+        }                
+    }
 
 }
\ No newline at end of file

Added: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java?rev=923435&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java Mon Mar 15 20:54:43 2010
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.decorator;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Set;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Decorator;
+
+import org.apache.webbeans.component.AbstractOwbBean;
+
+public interface OwbDecorator<T> extends Decorator<T>
+{
+    public boolean isDecoratorMatch(Set<Type> apiTypes, Set<Annotation> annotations);
+    
+    public void setDelegate(Object instance, Object delegate);
+    
+    public void setInjections(Object proxy, CreationalContext<?> cretionalContext);
+    
+    public AbstractOwbBean<T> getDelegateComponent();
+    
+}

Propchange: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/OwbDecorator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java Mon Mar 15 20:54:43 2010
@@ -18,6 +18,7 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
+import java.lang.reflect.Member;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 import java.util.HashSet;
@@ -55,7 +56,7 @@ import org.apache.webbeans.util.ClassUti
  *
  * @param <T> decorator type info
  */
-public class WebBeansDecorator<T> extends AbstractInjectionTargetBean<T> implements Decorator<T>
+public class WebBeansDecorator<T> extends AbstractInjectionTargetBean<T> implements OwbDecorator<T>
 {
     private static WebBeansLogger logger = WebBeansLogger.getLogger(WebBeansDecorator.class);
 
@@ -76,6 +77,22 @@ public class WebBeansDecorator<T> extend
     /** Wrapped bean*/
     private AbstractInjectionTargetBean<T> wrappedBean;
     
+    /**Custom Decorator*/
+    private Decorator<T> customDecorator = null;
+    
+    /**
+     * Creates a new decorator bean instance with the given wrapped bean.
+     * @param delegateComponent delegate bean instance
+     */
+    public WebBeansDecorator(AbstractInjectionTargetBean<T> wrappedBean, Decorator<T> customDecorator)
+    {
+        super(WebBeansType.DECORATOR,wrappedBean.getReturnType());
+        this.wrappedBean = wrappedBean;
+        this.customDecorator = customDecorator;
+        initDelegate();
+    }
+
+    
     /**
      * Creates a new decorator bean instance with the given wrapped bean.
      * @param delegateComponent delegate bean instance
@@ -89,7 +106,7 @@ public class WebBeansDecorator<T> extend
 
         init();
     }
-
+    
     protected void init()
     {
         ClassUtil.setInterfaceTypeHierarchy(this.decoratedTypes, this.clazz);
@@ -155,9 +172,17 @@ public class WebBeansDecorator<T> extend
 
     private void initDelegateInternal(InjectionPoint ip)
     {
-        this.delegateType = ip.getType();
-        this.delegateBindings = ip.getQualifiers();
-        
+        if(this.customDecorator != null)
+        {
+            this.delegateType = this.customDecorator.getDelegateType();
+            this.delegateBindings = this.customDecorator.getDelegateQualifiers();
+        }
+        else
+        {
+            this.delegateType = ip.getType();
+            this.delegateBindings = ip.getQualifiers();    
+        }
+                
         if(ip.getMember() instanceof Field)
         {
             this.delegateField = (Field)ip.getMember();
@@ -180,7 +205,7 @@ public class WebBeansDecorator<T> extend
         
         Type fieldType = this.delegateField.getGenericType();
 
-        for (Type decType : this.decoratedTypes)
+        for (Type decType : getDecoratedTypes())
         {
             if (!(ClassUtil.getClass(decType)).isAssignableFrom(ClassUtil.getClass(fieldType)))
             {
@@ -225,7 +250,7 @@ public class WebBeansDecorator<T> extend
         boolean ok = false;
         for (Type apiType : apiTypes)
         {
-            if (ClassUtil.isAssignable(apiType, this.delegateType))
+            if (ClassUtil.isAssignable(apiType, getDelegateType()))
             {
                 ok = true;
                 break;
@@ -248,7 +273,7 @@ public class WebBeansDecorator<T> extend
             return false;
         }
 
-        for (Annotation bindingType : delegateBindings)
+        for (Annotation bindingType : getDelegateQualifiers())
         {
             if (!bindingMatchesAnnotations(bindingType, annotations))
             {
@@ -262,12 +287,22 @@ public class WebBeansDecorator<T> extend
     @Override
     public Set<Annotation> getDelegateQualifiers()
     {
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.getDelegateQualifiers();
+        }
+        
         return delegateBindings;
     }
 
     @Override
     public Type getDelegateType()
     {
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.getDelegateType();
+        }        
+        
         return delegateType;
     }
 
@@ -300,6 +335,11 @@ public class WebBeansDecorator<T> extend
     @SuppressWarnings("unchecked")    
     protected  T createInstance(CreationalContext<T> creationalContext)
     {
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.create(creationalContext);
+        }
+        
         Context context = BeanManagerImpl.getManager().getContext(getScope());
         Object actualInstance = context.get((Bean<Object>)this.wrappedBean, (CreationalContext<Object>)creationalContext);
         T proxy = (T)JavassistProxyFactory.createDependentScopedBeanProxy(this.wrappedBean, actualInstance, creationalContext);
@@ -309,41 +349,66 @@ public class WebBeansDecorator<T> extend
 
     public void setInjections(Object proxy, CreationalContext<?> cretionalContext)
     {
-        // Set injected fields
-        ManagedBean<T> delegate = (ManagedBean<T>) this.wrappedBean;
-
-        Set<Field> injectedFields = delegate.getInjectedFromSuperFields();
-        for (Field injectedField : injectedFields)
+        if(this.customDecorator != null)
         {
-            boolean isDecorates = injectedField.isAnnotationPresent(Delegate.class);
-
-            if (!isDecorates)
+            Set<InjectionPoint> injections = this.customDecorator.getInjectionPoints();
+            if(injections != null)
             {
-                injectField(injectedField, proxy, cretionalContext);
+                for(InjectionPoint ip : injections)
+                {
+                    if(!ip.isDelegate())
+                    {
+                        Member member = ip.getMember();
+                        if(member instanceof Field)
+                        {
+                            injectField((Field)member  , proxy, cretionalContext);
+                        }
+                        if(member instanceof Method)
+                        {
+                            injectMethod((Method)member  , proxy, cretionalContext);
+                        }                        
+                    }
+                }
             }
         }
-        
-        Set<Method> injectedMethods = delegate.getInjectedFromSuperMethods();
-        for (Method injectedMethod : injectedMethods)
+        else
         {
-            injectMethod(injectedMethod, proxy, cretionalContext);
-        }        
+            // Set injected fields
+            ManagedBean<T> delegate = (ManagedBean<T>) this.wrappedBean;
 
-        injectedFields = delegate.getInjectedFields();
-        for (Field injectedField : injectedFields)
-        {
-            boolean isDecorates = injectedField.isAnnotationPresent(Delegate.class);
+            Set<Field> injectedFields = delegate.getInjectedFromSuperFields();
+            for (Field injectedField : injectedFields)
+            {
+                boolean isDecorates = injectedField.isAnnotationPresent(Delegate.class);
+
+                if (!isDecorates)
+                {
+                    injectField(injectedField, proxy, cretionalContext);
+                }
+            }
+            
+            Set<Method> injectedMethods = delegate.getInjectedFromSuperMethods();
+            for (Method injectedMethod : injectedMethods)
+            {
+                injectMethod(injectedMethod, proxy, cretionalContext);
+            }        
 
-            if (!isDecorates)
+            injectedFields = delegate.getInjectedFields();
+            for (Field injectedField : injectedFields)
             {
-                injectField(injectedField, proxy, cretionalContext);
+                boolean isDecorates = injectedField.isAnnotationPresent(Delegate.class);
+
+                if (!isDecorates)
+                {
+                    injectField(injectedField, proxy, cretionalContext);
+                }
             }
-        }
-        
-        injectedMethods = delegate.getInjectedMethods();
-        for (Method injectedMethod : injectedMethods)
-        {
-            injectMethod(injectedMethod, proxy, cretionalContext);
+            
+            injectedMethods = delegate.getInjectedMethods();
+            for (Method injectedMethod : injectedMethods)
+            {
+                injectMethod(injectedMethod, proxy, cretionalContext);
+            }                    
         }        
     }
     
@@ -363,36 +428,61 @@ public class WebBeansDecorator<T> extend
     @Override
     public Set<Annotation> getQualifiers()
     {
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.getQualifiers();
+        }
+        
         return wrappedBean.getQualifiers();
     }
 
     @Override
     public String getName()
     {
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.getName();
+        }
+        
         return wrappedBean.getName();
     }
 
     @Override
     public Class<? extends Annotation> getScope()
     {
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.getScope();
+        }
+        
         return wrappedBean.getScope();
     }
 
     
     public Set<Type> getTypes()
     {
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.getTypes();
+        }
+        
         return wrappedBean.getTypes();
     }
 
     @Override
     public boolean isNullable()
     {
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.isNullable();
+        }
+        
         return wrappedBean.isNullable();
     }
 
     @Override
     public boolean isSerializable()
-    {
+    {        
         return wrappedBean.isSerializable();
     }
 
@@ -406,6 +496,11 @@ public class WebBeansDecorator<T> extend
     
     public Set<InjectionPoint> getInjectionPoints()
     {
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.getInjectionPoints();
+        }
+        
         return wrappedBean.getInjectionPoints();
     }
 
@@ -414,66 +509,55 @@ public class WebBeansDecorator<T> extend
      */
     public Class<?> getClazz()
     {
-        return clazz;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see java.lang.Object#hashCode()
-     */
-    @Override
-    public int hashCode()
-    {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((clazz == null) ? 0 : clazz.hashCode());
-        return result;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see java.lang.Object#equals(java.lang.Object)
-     */
-    @Override
-    public boolean equals(Object obj)
-    {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        final WebBeansDecorator<?> other = (WebBeansDecorator<?>) obj;
-        if (clazz == null)
+        if(this.customDecorator != null)
         {
-            if (other.clazz != null)
-                return false;
+            return this.customDecorator.getBeanClass();
         }
-        else if (!clazz.equals(other.clazz))
-            return false;
-        return true;
+        
+        return clazz;
     }
 
     @Override
     public Class<?> getBeanClass()
     {
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.getBeanClass();
+        }
+        
         return this.wrappedBean.getBeanClass();
     }
 
 	@Override
 	public Set<Class<? extends Annotation>> getStereotypes() 
 	{
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.getStereotypes();
+        }
+	    
 		return this.wrappedBean.getStereotypes();
 	}
 
 	@Override
-	public Set<Type> getDecoratedTypes() {
+	public Set<Type> getDecoratedTypes() 
+	{
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.getDecoratedTypes();
+        }
+	    
 		return this.decoratedTypes;
 	}
 
     @Override
     public boolean isAlternative()
     {
+        if(this.customDecorator != null)
+        {
+            return this.customDecorator.isAlternative();
+        }
+
         return this.wrappedBean.isAlternative();
     }
     

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=923435&r1=923434&r2=923435&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 Mon Mar 15 20:54:43 2010
@@ -16,7 +16,12 @@ package org.apache.webbeans.intercept;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
+import javax.decorator.Decorator;
+import javax.interceptor.Interceptor;
+
 import org.apache.webbeans.config.WebBeansFinder;
+import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.util.Asserts;
 
 public class InterceptorsManager
@@ -39,7 +44,15 @@ public class InterceptorsManager
         Asserts.nullCheckForClass(interceptorClazz, "interceptorClazz can not be null");
 
         if (!enabledInterceptors.contains(interceptorClazz))
+        {
             getInstance().enabledInterceptors.add(interceptorClazz);
+
+            if(!interceptorClazz.isAnnotationPresent(Interceptor.class))
+            {
+                //Maybe custom
+                BeanManagerImpl.getManager().addCustomInterceptorClass(interceptorClazz);
+            }
+        }
     }
 
     public int compare(Class<?> src, Class<?> target)
@@ -69,4 +82,16 @@ public class InterceptorsManager
 
         return getInstance().enabledInterceptors.contains(interceptorClazz);
     }
+    
+    public void validateInterceptorClasses()
+    {
+        for(Class<?> decoratorClazz : enabledInterceptors)
+        {
+            //Validate decorator classes
+            if(!decoratorClazz.isAnnotationPresent(Interceptor.class) && !BeanManagerImpl.getManager().containsCustomInterceptorClass(decoratorClazz))
+            {
+                throw new WebBeansConfigurationException("Given class : " + decoratorClazz + " is not a interceptor class");
+            }   
+        }                
+    }    
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java Mon Mar 15 20:54:43 2010
@@ -27,6 +27,7 @@ import org.apache.webbeans.component.Man
 import org.apache.webbeans.component.WebBeansType;
 import org.apache.webbeans.component.creation.ManagedBeanCreatorImpl;
 import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.decorator.WebBeansDecorator;
 import org.apache.webbeans.event.NotificationManager;
 import org.apache.webbeans.intercept.custom.CustomInterceptor;
 import org.apache.webbeans.portable.AnnotatedElementFactory;
@@ -77,7 +78,12 @@ public class AfterBeanDiscoveryImpl impl
         
         else if(bean instanceof Decorator)
         {
-            this.beanManager.addDecorator((Decorator<?>)bean);
+            //Required for custom decorators
+            ManagedBean managedBean = new ManagedBean(bean.getBeanClass(),WebBeansType.MANAGED);                  
+            ManagedBeanCreatorImpl managedBeanCreator = new ManagedBeanCreatorImpl(managedBean);
+            managedBean = WebBeansUtil.defineManagedBean(managedBeanCreator, annotatedType);
+            
+            this.beanManager.addDecorator(new WebBeansDecorator(managedBean, (Decorator)bean));
         }
         else
         {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java?rev=923435&r1=923434&r2=923435&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java Mon Mar 15 20:54:43 2010
@@ -801,6 +801,11 @@ public final class WebBeansAnnotatedType
         {
             return true;
         }
+        else if(DecoratorsManager.getInstance().isDecoratorEnabled(annotatedType.getJavaClass()))
+        {
+            return true;
+        }
+
         
         return false;
     }



Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ component/creation/ config/ container/ decorator/ intercept/ portable/events/discovery/ util/

Posted by Eric Covener <co...@gmail.com>.
On Tue, Mar 23, 2010 at 9:26 AM, Gurkan Erdogdu <gu...@yahoo.com> wrote:
> This seems to be an old code. Did you checkout latest code from trunk?

yes, but I will scrap my sandbox and re-scrap my ~/.m2  -- thanks for looking.

-- 
Eric Covener
covener@gmail.com

Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ component/creation/ config/ container/ decorator/ intercept/ portable/events/discovery/ util/

Posted by Gurkan Erdogdu <gu...@yahoo.com>.
This seems to be an old code. Did you checkout latest code from trunk? 




________________________________
From: Eric Covener <co...@gmail.com>
To: dev@openwebbeans.apache.org
Sent: Tue, March 23, 2010 2:53:44 PM
Subject: Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:  component/ component/creation/ config/ container/ decorator/ intercept/  portable/events/discovery/ util/

> instance of class
> org.apache.webbeans.servlet.WebBeansConfigurationListener
> Throwable occurred: java.lang.NullPointerException
>        at org.apache.webbeans.component.creation.AbstractBeanCreator.getInjectionPoints( .java:259)

                      ^^^^^^^^^^^^
>        at org.apache.webbeans.component.AbstractInjectionTargetBean.getInjectionPoints(AbstractInjectionTargetBean.java:621)

      ^^^^^^^^^^^^^^^^^
>        at org.apache.webbeans.util.WebBeansUtil.createNewBean(WebBeansUtil.java:698)
>        at org.apache.webbeans.util.WebBeansUtil.defineManagedBean(WebBeansUtil.java:2915)
>        at org.apache.webbeans.config.BeansDeployer.defineManagedBean(BeansDeployer.java:680)
>        at org.apache.webbeans.config.BeansDeployer.deployFromClassPath(BeansDeployer.java:387)
>        at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:146)
>        at org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:120)
>        at org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:75)
>        at org.apache.webbeans.servlet.WebBeansConfigurationListener.contextInitialized(WebBeansConfigurationListener.java:66)


It finally occurred to me how/why this backtrace doesn't make any
sense.  Any idea on how I can be getting from
AbstractInjectionTargetBean to AbstractBeanCreator (instead of
AbstractOWBBean which just access a priave field) in my TCK env?

-- 
Eric Covener
covener@gmail.com



      ___________________________________________________________________
Yahoo! Türkiye açıldı!  http://yahoo.com.tr
İnternet üzerindeki en iyi içeriği Yahoo! Türkiye sizlere sunuyor!

Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ component/creation/ config/ container/ decorator/ intercept/ portable/events/discovery/ util/

Posted by Eric Covener <co...@gmail.com>.
> instance of class
> org.apache.webbeans.servlet.WebBeansConfigurationListener
> Throwable occurred: java.lang.NullPointerException
>        at org.apache.webbeans.component.creation.AbstractBeanCreator.getInjectionPoints( .java:259)

                      ^^^^^^^^^^^^
>        at org.apache.webbeans.component.AbstractInjectionTargetBean.getInjectionPoints(AbstractInjectionTargetBean.java:621)

      ^^^^^^^^^^^^^^^^^
>        at org.apache.webbeans.util.WebBeansUtil.createNewBean(WebBeansUtil.java:698)
>        at org.apache.webbeans.util.WebBeansUtil.defineManagedBean(WebBeansUtil.java:2915)
>        at org.apache.webbeans.config.BeansDeployer.defineManagedBean(BeansDeployer.java:680)
>        at org.apache.webbeans.config.BeansDeployer.deployFromClassPath(BeansDeployer.java:387)
>        at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:146)
>        at org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:120)
>        at org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:75)
>        at org.apache.webbeans.servlet.WebBeansConfigurationListener.contextInitialized(WebBeansConfigurationListener.java:66)


It finally occurred to me how/why this backtrace doesn't make any
sense.  Any idea on how I can be getting from
AbstractInjectionTargetBean to AbstractBeanCreator (instead of
AbstractOWBBean which just access a priave field) in my TCK env?

-- 
Eric Covener
covener@gmail.com

Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ component/creation/ config/ container/ decorator/ intercept/ portable/events/discovery/ util/

Posted by Gurkan Erdogdu <gu...@yahoo.com>.
Main motivation was that:

Bean creators are used for creating the beans. And if InjectionTargets/Producers are set by the observers, AbstractInjectionTargetBean or AbstractProducerBean uses final objects to produce bean artifacts. 

But there is an error/mistake in current code base in regard to 3Party overriden. If observer(ProcessInjectionTarget) wraps the original InjectionTarget, then StackOverFlow occurs. Becuase in current code base

AbstractInjectionTargetBean # getInjectionPoints  --> AbstractBeanCreator # getInjectionPoints --> producer # getInjectionPoints

And if "producer" wraps original injection target like this,
ProducerInjectionTarget implement InjectionTarget
{
    InjectionTarget wrapped ....
  
    public Set getInjectionPoints()
   {
         wrapped.getInjectionPoints();
   }
}

Then producer # getInjectionPoints agains calls AbstractInjectionTargetBean # getInjectionPoints to infinitely. Therefore I have commented out below producer.

 I will look for further errors.

Thanks;

--Gurkan





________________________________
From: Eric Covener <co...@gmail.com>
To: dev@openwebbeans.apache.org
Sent: Sun, March 21, 2010 1:43:51 AM
Subject: Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:  component/ component/creation/ config/ container/ decorator/ intercept/  portable/events/discovery/ util/

On Mon, Mar 15, 2010 at 4:54 PM,  <ge...@apache.org> wrote:
> Author: gerdogdu
> Date: Mon Mar 15 20:54:43 2010
> New Revision: 923435

> Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java
> URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java?rev=923435&r1=923434&r2=923435&view=diff
> ==============================================================================
> --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java (original)
> +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java Mon Mar 15 20:54:43 2010
> @@ -183,6 +183,7 @@ public abstract class AbstractInjectedTa
>     {
>         this.injectionTarget = injectionTarget;
>         this.injectionTargetSet = true;
> +        //super.setProducer(injectionTarget);
>     }

I was looking at something in this neighborhood, Is
AbstractBeanCreator.producer() really just for third-party provided
impl registered via the event?  Why does e.g.
AbstractBeanCreator.getInjectionPoint()  and getProducer() seem to
expect this to always be available?

In similar vein, AbstractInjectedTargetBeanCreator.setInjectedTarget()
is only called when some third-party observer has reset it?

My TCK env still gets ~240 errors so I maybe missing something in the
setup, but I see this backtrace during deployment:

SEVERE: Exception sending context initialized event to listener
instance of class
org.apache.webbeans.servlet.WebBeansConfigurationListener
Throwable occurred: java.lang.NullPointerException
        at org.apache.webbeans.component.creation.AbstractBeanCreator.getInjectionPoints(AbstractBeanCreator.java:259)
        at org.apache.webbeans.component.AbstractInjectionTargetBean.getInjectionPoints(AbstractInjectionTargetBean.java:621)
        at org.apache.webbeans.util.WebBeansUtil.createNewBean(WebBeansUtil.java:698)
        at org.apache.webbeans.util.WebBeansUtil.defineManagedBean(WebBeansUtil.java:2915)
        at org.apache.webbeans.config.BeansDeployer.defineManagedBean(BeansDeployer.java:680)
        at org.apache.webbeans.config.BeansDeployer.deployFromClassPath(BeansDeployer.java:387)
        at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:146)
        at org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:120)
        at org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:75)
        at org.apache.webbeans.servlet.WebBeansConfigurationListener.contextInitialized(WebBeansConfigurationListener.java:66)


I am arbitrarily
onorg.jboss.jsr299.tck.tests.extensions.producer.ProducerTest.testDisposeDoesNothing


-- 
Eric Covener
covener@gmail.com



      ___________________________________________________________________
Yahoo! Türkiye açıldı!  http://yahoo.com.tr
İnternet üzerindeki en iyi içeriği Yahoo! Türkiye sizlere sunuyor!

Re: svn commit: r923435 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ component/creation/ config/ container/ decorator/ intercept/ portable/events/discovery/ util/

Posted by Eric Covener <co...@gmail.com>.
On Mon, Mar 15, 2010 at 4:54 PM,  <ge...@apache.org> wrote:
> Author: gerdogdu
> Date: Mon Mar 15 20:54:43 2010
> New Revision: 923435

> Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java
> URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java?rev=923435&r1=923434&r2=923435&view=diff
> ==============================================================================
> --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java (original)
> +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java Mon Mar 15 20:54:43 2010
> @@ -183,6 +183,7 @@ public abstract class AbstractInjectedTa
>     {
>         this.injectionTarget = injectionTarget;
>         this.injectionTargetSet = true;
> +        //super.setProducer(injectionTarget);
>     }

I was looking at something in this neighborhood, Is
AbstractBeanCreator.producer() really just for third-party provided
impl registered via the event?  Why does e.g.
AbstractBeanCreator.getInjectionPoint()  and getProducer() seem to
expect this to always be available?

In similar vein, AbstractInjectedTargetBeanCreator.setInjectedTarget()
is only called when some third-party observer has reset it?

My TCK env still gets ~240 errors so I maybe missing something in the
setup, but I see this backtrace during deployment:

SEVERE: Exception sending context initialized event to listener
instance of class
org.apache.webbeans.servlet.WebBeansConfigurationListener
Throwable occurred: java.lang.NullPointerException
        at org.apache.webbeans.component.creation.AbstractBeanCreator.getInjectionPoints(AbstractBeanCreator.java:259)
        at org.apache.webbeans.component.AbstractInjectionTargetBean.getInjectionPoints(AbstractInjectionTargetBean.java:621)
        at org.apache.webbeans.util.WebBeansUtil.createNewBean(WebBeansUtil.java:698)
        at org.apache.webbeans.util.WebBeansUtil.defineManagedBean(WebBeansUtil.java:2915)
        at org.apache.webbeans.config.BeansDeployer.defineManagedBean(BeansDeployer.java:680)
        at org.apache.webbeans.config.BeansDeployer.deployFromClassPath(BeansDeployer.java:387)
        at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:146)
        at org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:120)
        at org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:75)
        at org.apache.webbeans.servlet.WebBeansConfigurationListener.contextInitialized(WebBeansConfigurationListener.java:66)


I am arbitrarily
onorg.jboss.jsr299.tck.tests.extensions.producer.ProducerTest.testDisposeDoesNothing


-- 
Eric Covener
covener@gmail.com