Author: struberg
Date: Tue Jan 15 22:05:43 2013
New Revision: 1433689

URL: http://svn.apache.org/viewvc?rev=1433689&view=rev
Log:
OWB-344 do postConstruct and preDestroy on internal instance

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DefaultInterceptorHandler.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DefaultInterceptorHandler.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DefaultInterceptorHandler.java?rev=1433689&r1=1433688&r2=1433689&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DefaultInterceptorHandler.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DefaultInterceptorHandler.java
 Tue Jan 15 22:05:43 2013
@@ -44,6 +44,11 @@ public class DefaultInterceptorHandler<T
         this.interceptors = interceptors;
     }
 
+    public T getTarget()
+    {
+        return target;
+    }
+
     public Map<Interceptor<?>, ?> getInstances()
     {
         return instances;

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java?rev=1433689&r1=1433688&r2=1433689&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
 Tue Jan 15 22:05:43 2013
@@ -235,7 +235,7 @@ public class InjectionTargetImpl<T> exte
     }
 
     @Override
-    public void postConstruct(T instance)
+    public void postConstruct(final T instance)
     {
         if (postConstructMethods == null)
         {
@@ -245,6 +245,7 @@ public class InjectionTargetImpl<T> exte
 
         Map<Interceptor<?>, ?> interceptorInstances = null;
         List<Interceptor<?>> postConstructInterceptors = null;
+        T internalInstance = instance;
 
         if (interceptorInfo != null && instance instanceof OwbInterceptorProxy)
         {
@@ -254,13 +255,14 @@ public class InjectionTargetImpl<T> exte
             {
                 DefaultInterceptorHandler dih = (DefaultInterceptorHandler) ih;
                 interceptorInstances = dih.getInstances();
+                internalInstance = (T) dih.getTarget();
             }
 
             // we are cheating a bit right now. We could also calculate the 
real ones upfront
             postConstructInterceptors = new 
ArrayList<Interceptor<?>>(interceptorInfo.getInterceptors());
         }
 
-        InvocationContext ic = new 
LifecycleInterceptorInvocationContext<T>(instance, 
InterceptionType.POST_CONSTRUCT, postConstructInterceptors,
+        InvocationContext ic = new 
LifecycleInterceptorInvocationContext<T>(internalInstance, 
InterceptionType.POST_CONSTRUCT, postConstructInterceptors,
                                                                             
interceptorInstances, postConstructMethods);
         try
         {
@@ -280,7 +282,27 @@ public class InjectionTargetImpl<T> exte
             return;
         }
 
-        InvocationContext ic = new 
LifecycleInterceptorInvocationContext<T>(instance, 
InterceptionType.PRE_DESTROY, null, null, preDestroyMethods);
+        Map<Interceptor<?>, ?> interceptorInstances = null;
+        List<Interceptor<?>> preDestroyInterceptors = null;
+        T internalInstance = instance;
+
+        if (interceptorInfo != null && instance instanceof OwbInterceptorProxy)
+        {
+            InterceptorDecoratorProxyFactory pf = 
webBeansContext.getInterceptorDecoratorProxyFactory();
+            InterceptorHandler ih = 
pf.getInterceptorHandler((OwbInterceptorProxy) instance);
+            if (ih instanceof DefaultInterceptorHandler)
+            {
+                DefaultInterceptorHandler dih = (DefaultInterceptorHandler) ih;
+                interceptorInstances = dih.getInstances();
+                internalInstance = (T) dih.getTarget();
+            }
+
+            // we are cheating a bit right now. We could also calculate the 
real ones upfront
+            preDestroyInterceptors = new 
ArrayList<Interceptor<?>>(interceptorInfo.getInterceptors());
+        }
+
+        InvocationContext ic = new 
LifecycleInterceptorInvocationContext<T>(instance, 
InterceptionType.PRE_DESTROY, preDestroyInterceptors,
+                                                                            
interceptorInstances, preDestroyMethods);
         try
         {
             ic.proceed();


Reply via email to