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/19 23:11:52 UTC

svn commit: r925458 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ context/creational/ decorator/ event/ inject/ intercept/ portable/events/discovery/

Author: gerdogdu
Date: Fri Mar 19 22:11:51 2010
New Revision: 925458

URL: http://svn.apache.org/viewvc?rev=925458&view=rev
Log:
[OWB-332] Destroy Depdent Of Producer Method Beans when Invocation Completes

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
    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/DecoratorsManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethods.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

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java?rev=925458&r1=925457&r2=925458&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java Fri Mar 19 22:11:51 2010
@@ -170,6 +170,7 @@ public class ProducerMethodBean<T> exten
         T instance = null;
         Object parentInstance = null;
         CreationalContext<?> parentCreational = null;
+        InjectableMethods<T> m = null;
         try
         {
             parentCreational = getManager().createCreationalContext(this.ownerComponent);
@@ -179,8 +180,8 @@ public class ProducerMethodBean<T> exten
                 parentInstance = getParentInstance(parentCreational);
             }
 
-            InjectableMethods<T> m = new InjectableMethods<T>(creatorMethod, parentInstance, this, creationalContext);
-
+            m = new InjectableMethods<T>(creatorMethod, parentInstance, this, creationalContext);
+            //Injection of parameters
             instance = m.doInjection();
 
         }
@@ -190,6 +191,9 @@ public class ProducerMethodBean<T> exten
             {
                 destroyBean(getParent(), parentInstance, parentCreational);
             }
+            
+            //Remove any dependent objects
+            m.destroyDependentInjectionPoints();
         }
 
         return instance;
@@ -231,6 +235,7 @@ public class ProducerMethodBean<T> exten
         {
             Object parentInstance = null;
             CreationalContext<?> parentCreational = null;
+            InjectableMethods<T> m = null;
             try
             {
                 parentCreational = getManager().createCreationalContext(this.ownerComponent);
@@ -240,7 +245,7 @@ public class ProducerMethodBean<T> exten
                     parentInstance = getParentInstance(parentCreational);
                 }
 
-                InjectableMethods<T> m = new InjectableMethods<T>(disposalMethod, parentInstance, this.ownerComponent, creationalContext);
+                m = new InjectableMethods<T>(disposalMethod, parentInstance, this.ownerComponent, creationalContext);
                 m.setDisposable(true);
                 m.setProducerMethodInstance(instance);
 
@@ -252,8 +257,10 @@ public class ProducerMethodBean<T> exten
                 if (getParent().getScope().equals(Dependent.class))
                 {
                     destroyBean(getParent(), parentInstance, parentCreational);
-
                 }
+                
+                //Remove any dependent objects
+                m.destroyDependentInjectionPoints();
             }
         }
     }

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=925458&r1=925457&r2=925458&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 Fri Mar 19 22:11:51 2010
@@ -250,7 +250,7 @@ public class CreationalContextImpl<T> im
      * Removes dependent objects.
      */
     @SuppressWarnings("unchecked")
-    private void  removeDependents()
+    public void  removeDependents()
     {
         Collection<?> values = this.dependentObjects.keySet();
         Iterator<?> iterator = values.iterator();

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=925458&r1=925457&r2=925458&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 Fri Mar 19 22:11:51 2010
@@ -44,12 +44,6 @@ public class DecoratorsManager
         Asserts.assertNotNull(decoratorClazz, "decoratorClazz parameter can not be emtpy");
         if (!enabledDecorators.contains(decoratorClazz))
         {
-            if(!decoratorClazz.isAnnotationPresent(Decorator.class))
-            {
-                //Maybe custom
-                BeanManagerImpl.getManager().addCustomDecoratorClass(decoratorClazz);
-            }
-            
             enabledDecorators.add(decoratorClazz);
         }                
     }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java?rev=925458&r1=925457&r2=925458&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java Fri Mar 19 22:11:51 2010
@@ -235,7 +235,7 @@ public class ObserverMethodImpl<T> imple
             {
                 for(ObserverParams param : obargs)
                 {
-                    if(param.isBean)
+                    if(param.isBean && param.bean.getScope().equals(Dependent.class))
                     {
                         param.bean.destroy(param.instance, param.creational);
                     }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethods.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethods.java?rev=925458&r1=925457&r2=925458&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethods.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethods.java Fri Mar 19 22:11:51 2010
@@ -28,6 +28,7 @@ import org.apache.webbeans.annotation.De
 import org.apache.webbeans.component.OwbBean;
 import org.apache.webbeans.component.ProducerMethodBean;
 import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.exception.WebBeansException;
 
 @SuppressWarnings("unchecked")
@@ -36,12 +37,15 @@ public class InjectableMethods<T> extend
     /** Injectable method */
     protected Method method;
 
-    /** Component instance that owns the method */
+    /** Bean parent instance that owns the method */
     protected Object instance;
     
+    /**If this method is dispose method*/
     private boolean disposable;
     
+    /**Used in dispose method, represents produces method parameter instance*/
     private Object producerMethodInstance = null;
+    
 
     /**
      * Constructs new instance.
@@ -122,6 +126,15 @@ public class InjectableMethods<T> extend
             throw new WebBeansException(e);
         }
     }
+    
+    /**
+     * Destroy dependent objects of the bean.
+     */
+    public void destroyDependentInjectionPoints()
+    {
+        CreationalContextImpl<?> ownerCreational = (CreationalContextImpl<?>) this.injectionOwnerCreationalContext;
+        ownerCreational.removeDependents();
+    }
 
     /**
      * @return the disposable

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=925458&r1=925457&r2=925458&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 Fri Mar 19 22:11:51 2010
@@ -45,12 +45,6 @@ public class InterceptorsManager
         if (!enabledInterceptors.contains(interceptorClazz))
         {
             getInstance().enabledInterceptors.add(interceptorClazz);
-
-            if(!interceptorClazz.isAnnotationPresent(Interceptor.class))
-            {
-                //Maybe custom
-                BeanManagerImpl.getManager().addCustomInterceptorClass(interceptorClazz);
-            }
         }
     }
 

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=925458&r1=925457&r2=925458&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 Fri Mar 19 22:11:51 2010
@@ -74,6 +74,7 @@ public class AfterBeanDiscoveryImpl impl
             CustomInterceptor<?> interceptor = new CustomInterceptor(managedBean, (Interceptor<?>)bean);
             
             this.beanManager.addInterceptor(interceptor);
+            BeanManagerImpl.getManager().addCustomInterceptorClass(bean.getBeanClass());
         }
         
         else if(bean instanceof Decorator)
@@ -84,6 +85,7 @@ public class AfterBeanDiscoveryImpl impl
             managedBean = WebBeansUtil.defineManagedBean(managedBeanCreator, annotatedType);
             
             this.beanManager.addDecorator(new WebBeansDecorator(managedBean, (Decorator)bean));
+            BeanManagerImpl.getManager().addCustomInterceptorClass(bean.getBeanClass());            
         }
         else
         {