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/02/18 23:57:37 UTC

svn commit: r911634 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/component/ main/java/org/apache/webbeans/container/ main/java/org/apache/webbeans/decorator/ main/java/org/apache/webbeans/intercept/ main/java/org/apache/web...

Author: gerdogdu
Date: Thu Feb 18 22:57:37 2010
New Revision: 911634

URL: http://svn.apache.org/viewvc?rev=911634&view=rev
Log:
[OWB-285] Interceptor and Decorator instances must be @Dependent scoped

Added:
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/DependentDecorator.java   (with props)
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/IDestroy.java   (with props)
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/MyDestory.java   (with props)
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroyTest.java   (with props)
    openwebbeans/trunk/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroy.xml   (with props)
Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.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/WebBeansDecorator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java?rev=911634&r1=911633&r2=911634&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java Thu Feb 18 22:57:37 2010
@@ -127,7 +127,7 @@
             getInjectionTarget().inject(instance, creationalContext);
             
             //Call @PostConstrcut
-            postConstruct(instance);
+            postConstruct(instance, creationalContext);
         }
         //Default operations
         else
@@ -186,7 +186,7 @@
      */
     protected void destroyInstance(T instance, CreationalContext<T> creationalContext)
     {
-        destroyComponentInstance(instance);
+        destroyComponentInstance(instance,creationalContext);
     }
 
     /**
@@ -205,9 +205,9 @@
      * 
      * @param instance object instance.
      */
-    protected void destroyComponentInstance(T instance)
+    protected void destroyComponentInstance(T instance, CreationalContext<T> creationalContext)
     {
-        preDestroy(instance);
+        preDestroy(instance, creationalContext);
     }
 
     /**
@@ -239,13 +239,13 @@
         injectMethods(instance, creationalContext);
         
         //Post construct
-        postConstruct(instance);
+        postConstruct(instance, creationalContext);
     }
 
     /**
      * {@inheritDoc}
      */
-    public void postConstruct(T instance)
+    public void postConstruct(T instance, CreationalContext<T> cretionalContext)
     {
         if (isInjectionTargetSet())
         {
@@ -253,7 +253,7 @@
         }
         else
         {
-            postConstructDefault(instance);
+            postConstructDefault(instance, cretionalContext);
         }
     }
 
@@ -262,14 +262,14 @@
      * 
      * @param instance bean instance
      */
-    protected void postConstructDefault(T instance)
+    protected void postConstructDefault(T instance, CreationalContext<T> ownerCreationalContext)
     {
         if(getWebBeansType().equals(WebBeansType.MANAGED))
         {
             // Call Post Construct
             if (WebBeansUtil.isContainsInterceptorMethod(getInterceptorStack(), InterceptorType.POST_CONSTRUCT))
             {
-                InterceptorHandler.injectInterceptorFields(getInterceptorStack());
+                InterceptorHandler.injectInterceptorFields(getInterceptorStack(), (CreationalContextImpl<T>)ownerCreationalContext);
                 
                 InvocationContextImpl impl = new InvocationContextImpl(null, instance, null, null, WebBeansUtil.getInterceptorMethods(getInterceptorStack(), InterceptorType.POST_CONSTRUCT), InterceptorType.POST_CONSTRUCT);
                 try
@@ -289,7 +289,7 @@
     /**
      * {@inheritDoc}
      */
-    public void preDestroy(T instance)
+    public void preDestroy(T instance, CreationalContext<T> creationalContext)
     {
         if (isInjectionTargetSet())
         {
@@ -297,7 +297,7 @@
         }
         else
         {
-            preDestroyDefault(instance);
+            preDestroyDefault(instance, creationalContext);
         }
     }
 
@@ -306,13 +306,14 @@
      * 
      * @param instance bean instance
      */
-    protected void preDestroyDefault(T instance)
+    protected void preDestroyDefault(T instance, CreationalContext<T> creationalContext)
     {
-        if(getWebBeansType().equals(WebBeansType.MANAGED))
+        if(getWebBeansType().equals(WebBeansType.MANAGED) ||
+                getWebBeansType().equals(WebBeansType.DECORATOR))                
         {
             if (WebBeansUtil.isContainsInterceptorMethod(getInterceptorStack(), InterceptorType.PRE_DESTROY))
             {
-                InterceptorHandler.injectInterceptorFields(getInterceptorStack());
+                InterceptorHandler.injectInterceptorFields(getInterceptorStack(),(CreationalContextImpl<T>) creationalContext);
                 
                 InvocationContextImpl impl = new InvocationContextImpl(null, instance, null, null, WebBeansUtil.getInterceptorMethods(getInterceptorStack(), InterceptorType.PRE_DESTROY), InterceptorType.PRE_DESTROY);
                 try

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java?rev=911634&r1=911633&r2=911634&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java Thu Feb 18 22:57:37 2010
@@ -51,7 +51,7 @@
      * {@inheritDoc}
      */
     @Override
-    protected void destroyComponentInstance(T instance)
+    protected void destroyComponentInstance(T instance, CreationalContext<T> creationalContext)
     {
         
     }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java?rev=911634&r1=911633&r2=911634&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java Thu Feb 18 22:57:37 2010
@@ -25,6 +25,7 @@
 import javax.enterprise.inject.spi.ProcessInjectionTarget;
 
 import org.apache.webbeans.config.inheritance.IBeanInheritedMetaData;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.intercept.InterceptorData;
 
 /**
@@ -176,14 +177,14 @@
      * 
      * @param instance bean instance
      */
-    public void postConstruct(T instance);
+    public void postConstruct(T instance, CreationalContext<T> creationalContext);
     
     /**
      * Calls predestroy method.
      * 
      * @param instance bean instance
      */
-    public void preDestroy(T instance);    
+    public void preDestroy(T instance, CreationalContext<T> creationalContext);    
     
     /**
      * Sets annotated type.

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=911634&r1=911633&r2=911634&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 Thu Feb 18 22:57:37 2010
@@ -786,7 +786,7 @@
             
             
             instance = context.get((Bean<Object>)bean, (CreationalContext<Object>)creationalContext);     
-            instance = JavassistProxyFactory.createDependentScopedBeanProxy((AbstractOwbBean<?>)bean, instance);
+            instance = JavassistProxyFactory.createDependentScopedBeanProxy((AbstractOwbBean<Object>)bean, instance, (CreationalContext<Object>)creationalContext);
         }
         
         return instance;

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=911634&r1=911633&r2=911634&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 Thu Feb 18 22:57:37 2010
@@ -301,7 +301,7 @@
     {
         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);
+        T proxy = (T)JavassistProxyFactory.createDependentScopedBeanProxy(this.wrappedBean, actualInstance, creationalContext);
         
         return proxy;        
     }
@@ -358,13 +358,7 @@
         InjectableMethods m = new InjectableMethods(method, instance, this.wrappedBean, creationalContext);
         m.doInjection();        
     }
-    
-    
-    public void destroy(T instance,CreationalContext<T> context)
-    {
-        wrappedBean.destroy(instance,context);
-    }
-
+        
     @Override
     public Set<Annotation> getQualifiers()
     {

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=911634&r1=911633&r2=911634&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 Thu Feb 18 22:57:37 2010
@@ -30,6 +30,7 @@
 import org.apache.webbeans.component.AbstractInjectionTargetBean;
 import org.apache.webbeans.component.InjectionTargetBean;
 import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.decorator.xml.WebBeansXMLDecorator;
 import org.apache.webbeans.inject.xml.XMLInjectionPointModel;
 import org.apache.webbeans.logger.WebBeansLogger;
@@ -73,7 +74,8 @@
         }
     }
     
-    public static List<Object> getDecoratorStack(InjectionTargetBean<?> component, Object instance, Object delegate)
+    public static List<Object> getDecoratorStack(InjectionTargetBean<?> component, Object instance, 
+            Object delegate, CreationalContextImpl<?> ownerCreationalContext)
     {
         List<Object> decoratorStack = new ArrayList<Object>();
         List<Decorator<?>> decoratorList = component.getDecoratorStack();        
@@ -81,13 +83,15 @@
         BeanManager manager = BeanManagerImpl.getManager();
         while (itList.hasNext())
         {
-            WebBeansDecorator<?> decorator = (WebBeansDecorator<?>) itList.next();
-            CreationalContext<?> creationalContext = manager.createCreationalContext(decorator);
+            WebBeansDecorator<Object> decorator = (WebBeansDecorator<Object>) itList.next();
+            CreationalContext<Object> creationalContext = manager.createCreationalContext(decorator);
             Object decoratorInstance = manager.getReference(decorator, decorator.getBeanClass(), creationalContext);
             
             decorator.setInjections(decoratorInstance, creationalContext);
             decorator.setDelegate(decoratorInstance, delegate);
             decoratorStack.add(decoratorInstance);
+            
+            ownerCreationalContext.addDependent(decorator, decoratorInstance, creationalContext);
         }
 
         return decoratorStack;

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java?rev=911634&r1=911633&r2=911634&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java Thu Feb 18 22:57:37 2010
@@ -21,7 +21,10 @@
 import java.lang.reflect.Method;
 import java.util.List;
 
+import javax.enterprise.context.spi.CreationalContext;
+
 import org.apache.webbeans.component.AbstractOwbBean;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 
 public class DependentScopedBeanInterceptorHandler extends InterceptorHandler
 {
@@ -29,17 +32,19 @@
     
     private Object actualInstance;
     
-    public DependentScopedBeanInterceptorHandler(AbstractOwbBean<?> bean, Object instance)
+    private CreationalContext<?> creationalContext;
+    
+    public DependentScopedBeanInterceptorHandler(AbstractOwbBean<?> bean, Object instance, CreationalContext<?> creationalContext)
     {
-        super(bean);
-        
+        super(bean);        
         this.actualInstance = instance;
+        this.creationalContext = creationalContext;
     }
 
     @Override
     public Object invoke(Object instance, Method method, Method proceed, Object[] arguments) throws Exception
     {
-        return super.invoke(this.actualInstance, method, proceed, arguments);
+        return super.invoke(this.actualInstance, method, proceed, arguments, (CreationalContextImpl<?>)creationalContext);
     }
     
     protected <T> Object callAroundInvokes(Method proceed, Object[] arguments, List<InterceptorData> stack) throws Exception

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java?rev=911634&r1=911633&r2=911634&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java Thu Feb 18 22:57:37 2010
@@ -37,6 +37,7 @@
 import org.apache.webbeans.config.BeansDeployer;
 import org.apache.webbeans.config.DefinitionUtil;
 import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.decorator.DelegateHandler;
 import org.apache.webbeans.decorator.WebBeansDecorator;
 import org.apache.webbeans.decorator.WebBeansDecoratorConfig;
@@ -150,7 +151,7 @@
         this.bean = bean;
     }
 
-    public Object invoke(Object instance, Method method, Method proceed, Object[] arguments) throws Exception
+    public Object invoke(Object instance, Method method, Method proceed, Object[] arguments, CreationalContextImpl<?> ownerCreationalContext) throws Exception
     {
         try
         {
@@ -173,7 +174,7 @@
                         Object delegate = delegateFactory.createClass().newInstance();
 
                         // Gets component decorator stack
-                        decorators = WebBeansDecoratorConfig.getDecoratorStack(injectionTarget, instance, delegate);
+                        decorators = WebBeansDecoratorConfig.getDecoratorStack(injectionTarget, instance, delegate, ownerCreationalContext);
 
                         delegateHandler.setDecorators(decorators);
                     }
@@ -184,7 +185,7 @@
                     List<InterceptorData> temp = new ArrayList<InterceptorData>(stack);
 
                     // Filter both EJB and WebBeans interceptors
-                    filterCommonInterceptorStackList(temp, method);
+                    filterCommonInterceptorStackList(temp, method, ownerCreationalContext);
 
                     // If there are both interceptors and decorators, add hook
                     // point to the end of the interceptor stack.
@@ -294,7 +295,7 @@
         return false;
     }
 
-    private void filterCommonInterceptorStackList(final List<InterceptorData> stack, Method method)
+    private void filterCommonInterceptorStackList(final List<InterceptorData> stack, Method method, CreationalContextImpl<?> ownerCreationalContext)
     {
         Iterator<InterceptorData> it = stack.iterator();
         while (it.hasNext())
@@ -307,11 +308,11 @@
             }
         }
         
-        injectInterceptorFields(stack);
+        injectInterceptorFields(stack, ownerCreationalContext);
     }
     
     
-    public static void injectInterceptorFields(final List<InterceptorData> stack)
+    public static void injectInterceptorFields(final List<InterceptorData> stack, CreationalContextImpl<?> ownerCreationalContext)
     {
         Iterator<InterceptorData> it = stack.iterator();
         BeanManager manager = BeanManagerImpl.getManager();
@@ -325,14 +326,16 @@
                 {
                     if (intData.isDefinedWithWebBeansInterceptor())
                     {
-                        WebBeansInterceptor<?> interceptor = (WebBeansInterceptor<?>)intData.getWebBeansInterceptor();
-                        CreationalContext<?> creationalContext = manager.createCreationalContext(interceptor);
+                        WebBeansInterceptor<Object> interceptor = (WebBeansInterceptor<Object>)intData.getWebBeansInterceptor();
+                        CreationalContext<Object> creationalContext = manager.createCreationalContext(interceptor);
                         Object interceptorProxy = manager.getReference(interceptor,interceptor.getBeanClass(), creationalContext);
                         
                         interceptor.setInjections(interceptorProxy, creationalContext);
 
                         //Setting interceptor proxy instance
                         intData.setInterceptorInstance(interceptorProxy);
+                        
+                        ownerCreationalContext.addDependent(interceptor, interceptorProxy, creationalContext);
                     }
 
                 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java?rev=911634&r1=911633&r2=911634&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java Thu Feb 18 22:57:37 2010
@@ -27,6 +27,7 @@
 
 import org.apache.webbeans.component.AbstractOwbBean;
 import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 
 public class NormalScopedBeanInterceptorHandler extends InterceptorHandler 
 {
@@ -82,7 +83,7 @@
         }
 
 
-        return super.invoke(webbeansInstance, method, proceed, arguments);
+        return super.invoke(webbeansInstance, method, proceed, arguments, (CreationalContextImpl<?>)creationalContxt.get());
     }
     
     protected <T> Object callAroundInvokes(Method proceed, Object[] arguments, List<InterceptorData> stack) throws Exception

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java?rev=911634&r1=911633&r2=911634&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java Thu Feb 18 22:57:37 2010
@@ -279,7 +279,7 @@
     {
         Context context = BeanManagerImpl.getManager().getContext(getScope());
         Object actualInstance = context.get((Bean<Object>)this.delegateBean, (CreationalContext<Object>)creationalContext);
-        T proxy = (T)JavassistProxyFactory.createDependentScopedBeanProxy(this.delegateBean, actualInstance);
+        T proxy = (T)JavassistProxyFactory.createDependentScopedBeanProxy(this.delegateBean, actualInstance, creationalContext);
         
         return proxy;
     }
@@ -328,12 +328,6 @@
         m.doInjection();        
     }
     
-
-    public void destroy(T instance,CreationalContext<T> context)
-    {
-        delegateBean.destroy(instance,context);
-    }
-
     @Override
     public Set<Annotation> getQualifiers()
     {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java?rev=911634&r1=911633&r2=911634&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java Thu Feb 18 22:57:37 2010
@@ -51,7 +51,7 @@
         @SuppressWarnings("unchecked")
         InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);
         
-        bean.postConstruct(instance);
+        bean.postConstruct(instance,null);
     }
 
     @Override
@@ -60,7 +60,7 @@
         @SuppressWarnings("unchecked")
         InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);
         
-        bean.preDestroy(instance);
+        bean.preDestroy(instance,null);
     }
 
 }
\ No newline at end of file

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java?rev=911634&r1=911633&r2=911634&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java Thu Feb 18 22:57:37 2010
@@ -67,7 +67,7 @@
         return result;
     }
     
-    public static Object createDependentScopedBeanProxy(AbstractOwbBean<?> bean, Object actualInstance)
+    public static Object createDependentScopedBeanProxy(AbstractOwbBean<?> bean, Object actualInstance, CreationalContext<?> creastionalContext)
     {
         Object result = null;
         
@@ -117,7 +117,7 @@
 
             if (!(bean instanceof WebBeansDecorator) && !(bean instanceof WebBeansInterceptor))
             {
-                fact.setHandler(new DependentScopedBeanInterceptorHandler(bean, actualInstance));
+                fact.setHandler(new DependentScopedBeanInterceptorHandler(bean, actualInstance, creastionalContext));
             }
 
             result = fact.createClass().newInstance();

Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/DependentDecorator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/DependentDecorator.java?rev=911634&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/DependentDecorator.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/DependentDecorator.java Thu Feb 18 22:57:37 2010
@@ -0,0 +1,45 @@
+/*
+ * 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.newtests.decorators.dependent;
+
+import javax.annotation.PreDestroy;
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+@Decorator
+public class DependentDecorator implements IDestroy
+{
+    private @Inject @Delegate IDestroy destroy;
+    public static boolean dispose = false;
+
+    @Override
+    public void destroy()
+    {
+        destroy.destroy();
+        
+    }
+    
+    @PreDestroy
+    public void dispose()
+    {
+        dispose = true;
+    }
+
+}

Propchange: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/DependentDecorator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/IDestroy.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/IDestroy.java?rev=911634&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/IDestroy.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/IDestroy.java Thu Feb 18 22:57:37 2010
@@ -0,0 +1,24 @@
+/*
+ * 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.newtests.decorators.dependent;
+
+public interface IDestroy
+{
+    public void destroy();
+}

Propchange: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/IDestroy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/MyDestory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/MyDestory.java?rev=911634&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/MyDestory.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/MyDestory.java Thu Feb 18 22:57:37 2010
@@ -0,0 +1,34 @@
+/*
+ * 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.newtests.decorators.dependent;
+
+import org.apache.webbeans.test.component.event.normal.Transactional;
+
+public class MyDestory implements IDestroy
+{
+    public static boolean destroyed = false;
+
+    @Override
+    @Transactional
+    public void destroy()
+    {
+        destroyed = true;
+    }
+
+}

Propchange: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/dependent/MyDestory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroyTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroyTest.java?rev=911634&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroyTest.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroyTest.java Thu Feb 18 22:57:37 2010
@@ -0,0 +1,75 @@
+/*
+ * 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.newtests.decorators.tests;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.util.AnnotationLiteral;
+
+import junit.framework.Assert;
+
+import org.apache.webbeans.newtests.AbstractUnitTest;
+import org.apache.webbeans.newtests.decorators.dependent.DependentDecorator;
+import org.apache.webbeans.newtests.decorators.dependent.IDestroy;
+import org.apache.webbeans.newtests.decorators.dependent.MyDestory;
+import org.apache.webbeans.test.component.event.normal.TransactionalInterceptor;
+import org.junit.Test;
+
+public class DependentDecoratorDestroyTest extends AbstractUnitTest
+{
+    public static final String PACKAGE_NAME = DependentDecoratorDestroyTest.class.getPackage().getName();
+
+    @Test
+    @SuppressWarnings("unchecked")    
+    public void testDecoratorStack()
+    {
+        Collection<Class<?>> classes = new ArrayList<Class<?>>();
+        classes.add(DependentDecorator.class);
+        classes.add(TransactionalInterceptor.class);
+        classes.add(MyDestory.class);
+
+        Collection<URL> xmls = new ArrayList<URL>();
+        xmls.add(getXMLUrl(PACKAGE_NAME, "DependentDecoratorDestroy"));
+
+        startContainer(classes, xmls);
+        
+        @SuppressWarnings("serial")
+        Bean<IDestroy> bean = (Bean<IDestroy>)getBeanManager().getBeans(IDestroy.class, new AnnotationLiteral<Default>()
+                {
+                }).iterator().next();
+        CreationalContext<IDestroy> creationalContext = getBeanManager().createCreationalContext(bean);
+        Object instance = getBeanManager().getReference(bean, IDestroy.class, creationalContext);
+        IDestroy outputProvider = (IDestroy) instance;
+        
+        Assert.assertTrue(outputProvider != null);
+        outputProvider.destroy();
+        Assert.assertTrue(MyDestory.destroyed);
+        
+        bean.destroy(outputProvider,creationalContext);
+        
+        Assert.assertTrue(DependentDecorator.dispose);
+
+    }
+
+}

Propchange: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroy.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroy.xml?rev=911634&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroy.xml (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroy.xml Thu Feb 18 22:57:37 2010
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<beans>
+	<interceptors>
+		<class>org.apache.webbeans.test.component.event.normal.TransactionalInterceptor</class>
+	</interceptors>
+   <decorators>
+      <class>org.apache.webbeans.newtests.decorators.dependent.DependentDecorator</class>
+   </decorators>
+</beans>
\ No newline at end of file

Propchange: openwebbeans/trunk/webbeans-impl/src/test/resources/org/apache/webbeans/newtests/decorators/tests/DependentDecoratorDestroy.xml
------------------------------------------------------------------------------
    svn:eol-style = native