You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bi...@apache.org on 2010/11/20 23:31:29 UTC

svn commit: r1037346 - in /cxf/trunk: api/src/main/java/org/apache/cxf/ maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/ rt/core/src/test/java/org/apache/cxf/bus/spring/

Author: bimargulies
Date: Sat Nov 20 22:31:29 2010
New Revision: 1037346

URL: http://svn.apache.org/viewvc?rev=1037346&view=rev
Log:
Hold the defaultBus as a weak reference: CXF-3142.

Modified:
    cxf/trunk/api/src/main/java/org/apache/cxf/BusFactory.java
    cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/ClassLoaderSwitcher.java
    cxf/trunk/rt/core/src/test/java/org/apache/cxf/bus/spring/SpringBusFactoryTest.java

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/BusFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/BusFactory.java?rev=1037346&r1=1037345&r2=1037346&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/BusFactory.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/BusFactory.java Sat Nov 20 22:31:29 2010
@@ -22,6 +22,7 @@ package org.apache.cxf;
 import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.lang.ref.WeakReference;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.WeakHashMap;
@@ -36,7 +37,7 @@ public abstract class BusFactory {
     public static final String BUS_FACTORY_PROPERTY_NAME = "org.apache.cxf.bus.factory";
     public static final String DEFAULT_BUS_FACTORY = "org.apache.cxf.bus.CXFBusFactory";
 
-    protected static Bus defaultBus;
+    protected static WeakReference<Bus> defaultBus;
     protected static Map<Thread, Bus> threadBusses = new WeakHashMap<Thread, Bus>();
 
     private static final Logger LOG = LogUtils.getL7dLogger(BusFactory.class, "APIMessages");
@@ -67,11 +68,16 @@ public abstract class BusFactory {
      * @return the default bus.
      */
     public static synchronized Bus getDefaultBus(boolean createIfNeeded) {
-        if (defaultBus == null
+        if ((defaultBus == null || defaultBus.get() == null)
             && createIfNeeded) {
-            defaultBus = newInstance().createBus();
+            defaultBus = new WeakReference<Bus>(newInstance().createBus());
+        }
+        if (defaultBus == null) {
+            // never set up.
+            return null;
+        } else {
+            return defaultBus.get();
         }
-        return defaultBus;
     }
     
     /**
@@ -79,7 +85,11 @@ public abstract class BusFactory {
      * @param bus the default bus.
      */
     public static synchronized void setDefaultBus(Bus bus) {
-        defaultBus = bus;
+        if (bus == null) {
+            defaultBus = null;
+        } else {
+            defaultBus = new WeakReference<Bus>(bus);
+        }
         setThreadDefaultBus(bus);
     }
     
@@ -154,11 +164,12 @@ public abstract class BusFactory {
                 threadBusses.put(Thread.currentThread(), bus);
             }
         }
-        
-        if (defaultBus == null) {
-            defaultBus = bus;            
+        // The default bus may have gc-ed itself out of existence, in which case we 
+        // take over for it.
+        if (defaultBus == null || defaultBus.get() == null) {
+            defaultBus = new WeakReference<Bus>(bus);            
             return true;
-        }
+        } 
         return false;
     }
 

Modified: cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/ClassLoaderSwitcher.java
URL: http://svn.apache.org/viewvc/cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/ClassLoaderSwitcher.java?rev=1037346&r1=1037345&r2=1037346&view=diff
==============================================================================
--- cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/ClassLoaderSwitcher.java (original)
+++ cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/ClassLoaderSwitcher.java Sat Nov 20 22:31:29 2010
@@ -118,5 +118,6 @@ public class ClassLoaderSwitcher {
             }
         }
         System.getProperties().putAll(origProps);
+        origContextClassloader = null; // don't hold a reference.
     }
 }

Modified: cxf/trunk/rt/core/src/test/java/org/apache/cxf/bus/spring/SpringBusFactoryTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/test/java/org/apache/cxf/bus/spring/SpringBusFactoryTest.java?rev=1037346&r1=1037345&r2=1037346&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/test/java/org/apache/cxf/bus/spring/SpringBusFactoryTest.java (original)
+++ cxf/trunk/rt/core/src/test/java/org/apache/cxf/bus/spring/SpringBusFactoryTest.java Sat Nov 20 22:31:29 2010
@@ -169,7 +169,7 @@ public class SpringBusFactoryTest extend
         assertTrue("@PostConstruct annotated method has not been called.", te.postConstructMethodCalled);
         assertTrue("@PreDestroy annoated method has been called already.", !te.preDestroyMethodCalled);
         bus.shutdown(true);
-        assertTrue("@PreDestroy annoated method has not been called.", te.preDestroyMethodCalled);
+        assertTrue("@PreDestroy annotated method has not been called.", te.preDestroyMethodCalled);
         
     }