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 2014/08/06 00:22:22 UTC

svn commit: r1616027 - /tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java

Author: rmannibucau
Date: Tue Aug  5 22:22:22 2014
New Revision: 1616027

URL: http://svn.apache.org/r1616027
Log:
don't forget to release providers when they are cdi beans

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

Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1616027&r1=1616026&r2=1616027&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java (original)
+++ tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java Tue Aug  5 22:22:22 2014
@@ -63,7 +63,9 @@ import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.proxy.ProxyEJB;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 
+import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 import javax.management.ObjectName;
 import javax.management.openmbean.TabularData;
@@ -86,6 +88,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -117,6 +120,7 @@ public class CxfRsHttpListener implement
     private String servlet = "";
     private final Collection<Pattern> staticResourcesList = new CopyOnWriteArrayList<>();
     private final List<ObjectName> jmxNames = new ArrayList<>();
+    private final Collection<CreationalContext<?>> toRelease = new LinkedHashSet<>();
 
     static {
         STATIC_CONTENT_TYPES = new HashMap<>();
@@ -301,7 +305,9 @@ public class CxfRsHttpListener implement
                         final Set<Bean<?>> beans = bm.getBeans(clazz);
                         if (beans != null && !beans.isEmpty()) {
                             final Bean<?> bean = bm.resolve(beans);
-                            instances.add(bm.getReference(bean, clazz, bm.createCreationalContext(bean)));
+                            final CreationalContextImpl<?> creationalContext = bm.createCreationalContext(bean);
+                            instances.add(bm.getReference(bean, clazz, creationalContext));
+                            toRelease.add(creationalContext);
                             continue;
                         }
                     } catch (final Throwable th) {
@@ -339,11 +345,18 @@ public class CxfRsHttpListener implement
 
     @Override
     public void undeploy() {
-        // unregister all MBeans
         for (final ObjectName objectName : jmxNames) {
             LocalMBeanServer.unregisterSilently(objectName);
         }
 
+        for (final CreationalContext<?> cc : toRelease) {
+            try {
+                cc.release();
+            } catch (final Exception e) {
+                LOGGER.warning(e.getMessage(), e);
+            }
+        }
+
         final ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
         Thread.currentThread().setContextClassLoader(CxfUtil.initBusLoader());
         try {