Author: rmannibucau
Date: Wed Oct 24 15:01:10 2012
New Revision: 1401720

URL: http://svn.apache.org/viewvc?rev=1401720&view=rev
Log:
AbstractInjectable.instanceUnderInjection for rest cdi and interceptors

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
    
openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1401720&r1=1401719&r2=1401720&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
 Wed Oct 24 15:01:10 2012
@@ -1408,7 +1408,17 @@ public class BeanContext extends Deploym
                 try {
                     final Object interceptorInstance = 
interceptorInjector.createInstance();
                     try {
-                        
OWBInjector.inject(webBeansContext.getBeanManagerImpl(), interceptorInstance, 
creationalContext);
+                        final Object oldInstanceUnderInjection = 
AbstractInjectable.instanceUnderInjection.get();
+                        
AbstractInjectable.instanceUnderInjection.set(interceptorInstance);
+                        try {
+                            
OWBInjector.inject(webBeansContext.getBeanManagerImpl(), interceptorInstance, 
creationalContext);
+                        } finally {
+                            if (oldInstanceUnderInjection != null) {
+                                
AbstractInjectable.instanceUnderInjection.set(oldInstanceUnderInjection);
+                            } else {
+                                
AbstractInjectable.instanceUnderInjection.remove();
+                            }
+                        }
                     } catch (Throwable t) {
                         // TODO handle this differently
                         // this is temporary till the injector can be rewritten

Modified: 
openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java?rev=1401720&r1=1401719&r2=1401720&view=diff
==============================================================================
--- 
openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
 (original)
+++ 
openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
 Wed Oct 24 15:01:10 2012
@@ -42,6 +42,7 @@ import org.apache.openejb.OpenEJBExcepti
 import org.apache.openejb.rest.ThreadLocalContextManager;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.inject.AbstractInjectable;
 import org.apache.webbeans.inject.OWBInjector;
 
 public class OpenEJBPerRequestPojoResourceProvider implements ResourceProvider 
{
@@ -206,10 +207,19 @@ public class OpenEJBPerRequestPojoResour
 
                 final BeanManager bm = webbeansContext.getBeanManagerImpl();
                 creationalContext = bm.createCreationalContext(null);
+
+                final Object oldValue = 
AbstractInjectable.instanceUnderInjection.get();
+                AbstractInjectable.instanceUnderInjection.set(instance);
                 try {
                     OWBInjector.inject(bm, instance, creationalContext);
                 } catch (Exception e) {
                     // ignored
+                } finally {
+                    if (oldValue != null) {
+                        
AbstractInjectable.instanceUnderInjection.set(oldValue);
+                    } else {
+                        AbstractInjectable.instanceUnderInjection.remove();
+                    }
                 }
 
                 // injector.postConstruct(); // it doesn't know it


Reply via email to