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();
}
}
}