You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by be...@apache.org on 2010/08/17 00:02:17 UTC

svn commit: r986138 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: context/creational/CreationalContextImpl.java decorator/WebBeansDecoratorConfig.java

Author: bergmark
Date: Mon Aug 16 22:02:17 2010
New Revision: 986138

URL: http://svn.apache.org/viewvc?rev=986138&view=rev
Log:
[OWB-440] Ensure that Decorators get reused if they already exist inside of the DependentCreationalContext.

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java?rev=986138&r1=986137&r2=986138&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java Mon Aug 16 22:02:17 2010
@@ -203,10 +203,10 @@ public class CreationalContextImpl<T> im
      * @param decorator decorator bean
      * @return bean decorator instance
      */
-    public Object getDependentDecorator(Contextual<?> decorator)
+    public Object getDependentDecorator(Object ownerInstance, Contextual<?> decorator)
     {
         Asserts.assertNotNull(decorator, "Decorator parameter can not be null");
-        List<DependentCreationalContext<?>> dcs = getDependentDecorators();
+        List<DependentCreationalContext<?>> dcs = getDependentDecorators(ownerInstance);
         for(DependentCreationalContext<?> dc : dcs)
         {
             if(dc.getContextual().equals(decorator))
@@ -250,19 +250,23 @@ public class CreationalContextImpl<T> im
      * Gets list of dependent decorators context.
      * @return list of dependent decorators context
      */
-    private List<DependentCreationalContext<?>> getDependentDecorators()
+    private List<DependentCreationalContext<?>> getDependentDecorators(Object ownerInstance)
     {
         List<DependentCreationalContext<?>> list = new ArrayList<DependentCreationalContext<?>>();
-        List<DependentCreationalContext<?>> values = new ArrayList<DependentCreationalContext<?>>();
-        if(values != null && values.size() > 0)
+
+        if (ownerInstance != null)
         {
-            Iterator<DependentCreationalContext<?>> it = values.iterator();
-            while(it.hasNext())
+            List<DependentCreationalContext<?>> values = this.dependentObjects.get(ownerInstance);
+            if (values != null && values.size() > 0)
             {
-                DependentCreationalContext<?> dc = it.next();
-                if(dc.getDependentType().equals(DependentType.DECORATOR))
+                Iterator<DependentCreationalContext<?>> it = values.iterator();
+                while (it.hasNext())
                 {
-                    list.add(dc);
+                    DependentCreationalContext<?> dc = it.next();
+                    if (dc.getDependentType().equals(DependentType.DECORATOR))
+                    {
+                        list.add(dc);
+                    }
                 }
             }
         }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java?rev=986138&r1=986137&r2=986138&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java Mon Aug 16 22:02:17 2010
@@ -123,7 +123,7 @@ public final class WebBeansDecoratorConf
             Object decoratorInstance = null;
             @SuppressWarnings("unchecked")
             WebBeansDecorator<Object> decorator = (WebBeansDecorator<Object>) itList.next();            
-            decoratorInstance = ownerCreationalContext.getDependentDecorator(decorator);
+            decoratorInstance = ownerCreationalContext.getDependentDecorator(instance, decorator);
             if(decoratorInstance == null)
             {
                 CreationalContext<Object> creationalContext = manager.createCreationalContext(decorator);
@@ -137,6 +137,11 @@ public final class WebBeansDecoratorConf
                     ownerCreationalContext.addDependent(instance, decorator, decoratorInstance);
                 }                
             }
+            //We found an existing decorator instance, update the delegate
+            else
+            {
+                decorator.setDelegate(decoratorInstance, delegate);
+            }
             
             decoratorStack.add(decoratorInstance);
         }