You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/10/24 17:16:56 UTC

svn commit: r1401724 - /openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java

Author: rmannibucau
Date: Wed Oct 24 15:16:56 2012
New Revision: 1401724

URL: http://svn.apache.org/viewvc?rev=1401724&view=rev
Log:
consistent cleaning of cdi beans with rest (cxf)

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

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=1401724&r1=1401723&r2=1401724&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:16:56 2012
@@ -16,22 +16,6 @@
  */
 package org.apache.openejb.server.cxf.rs;
 
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Set;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.InjectionException;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.Response;
 import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
 import org.apache.cxf.jaxrs.utils.InjectionUtils;
 import org.apache.cxf.jaxrs.utils.ResourceUtils;
@@ -45,6 +29,23 @@ import org.apache.webbeans.container.Bea
 import org.apache.webbeans.inject.AbstractInjectable;
 import org.apache.webbeans.inject.OWBInjector;
 
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.InjectionException;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Set;
+
 public class OpenEJBPerRequestPojoResourceProvider implements ResourceProvider {
     protected Collection<Injection> injections;
     protected Context context;
@@ -155,7 +156,7 @@ public class OpenEJBPerRequestPojoResour
 
     private class CdiBeanCreator implements BeanCreator {
         private BeanManager bm;
-        private CreationalContext<?> creationalContext;
+        private CreationalContext<?> toClean;
 
         public CdiBeanCreator(BeanManager bm) {
             this.bm = bm;
@@ -170,8 +171,16 @@ public class OpenEJBPerRequestPojoResour
                 if (bean == null) {
                     throw new NoBeanFoundException();
                 }
-                creationalContext = bm.createCreationalContext(bean);
-                return bm.getReference(bean, clazz, creationalContext);
+
+                toClean = bm.createCreationalContext(bean);
+
+                try {
+                    return bm.getReference(bean, clazz, toClean);
+                } finally {
+                    if (bm.isNormalScope(bean.getScope())) {
+                        toClean = null; // will be released by the container
+                    }
+                }
             } catch (InjectionException ie) {
                 final String msg = "Resource class " + constructor.getDeclaringClass().getName() + " can not be instantiated";
                 throw new WebApplicationException(Response.serverError().entity(msg).build());
@@ -180,8 +189,8 @@ public class OpenEJBPerRequestPojoResour
 
         @Override
         public void release() {
-            if (creationalContext != null) {
-                creationalContext.release();
+            if (toClean != null) {
+                toClean.release();
             }
         }
     }