You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2007/03/15 10:31:53 UTC

svn commit: r518544 - in /incubator/cxf/trunk/rt: ./ core/src/main/java/org/apache/cxf/endpoint/ core/src/test/java/org/apache/cxf/endpoint/ frontend/jaxws/src/main/java/org/apache/cxf/jaxws/

Author: ningjiang
Date: Thu Mar 15 02:31:52 2007
New Revision: 518544

URL: http://svn.apache.org/viewvc?view=rev&rev=518544
Log:
[CXF-457, CXF-458] Fixed the memory leak of ServerRegistry and ThreadLocal

Modified:
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerImpl.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerRegistryImpl.java
    incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServerRegistryImpTest.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java
    incubator/cxf/trunk/rt/pom.xml

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerImpl.java?view=diff&rev=518544&r1=518543&r2=518544
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerImpl.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerImpl.java Thu Mar 15 02:31:52 2007
@@ -87,9 +87,13 @@
 
     public void stop() {
         LOG.fine("Server is stopping.");
-        getDestination().setMessageObserver(null);  
         if (mgr != null) {
             mgr.stopServer(this);
+        }
+        getDestination().setMessageObserver(null);
+        if (null != serverRegistry) {
+            LOG.fine("unregister the server to serverRegistry ");
+            serverRegistry.unregister(this);
         }
     }
 

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerRegistryImpl.java?view=diff&rev=518544&r1=518543&r2=518544
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerRegistryImpl.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerRegistryImpl.java Thu Mar 15 02:31:52 2007
@@ -79,15 +79,18 @@
 
     @PreDestroy
     public void preShutdown() {
-        // Shutdown the service       
-        for (Server server : serversList) {            
+        // Shutdown the service.
+        // To avoid the CurrentModificationException, do not use serversList directly 
+        Object[] servers = serversList.toArray();
+        for (int i = 0; i < servers.length; i++) {
+            Server server = (Server) servers[i];
             server.stop();
-        }
+        }        
     }
 
     public void postShutdown() {
-        // TODO Auto-generated method stub
-        
+        // Clean the serversList
+        serversList.clear();
     }
 
 }

Modified: incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServerRegistryImpTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServerRegistryImpTest.java?view=diff&rev=518544&r1=518543&r2=518544
==============================================================================
--- incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServerRegistryImpTest.java (original)
+++ incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServerRegistryImpTest.java Thu Mar 15 02:31:52 2007
@@ -19,22 +19,23 @@
 
 package org.apache.cxf.endpoint;
 
-import junit.framework.TestCase;
+import org.junit.Assert;
+import org.junit.Test;
 
-import org.easymock.classextension.EasyMock;
-
-public class ServerRegistryImpTest extends TestCase {
+public class ServerRegistryImpTest extends Assert {
     
+    @Test
     public void testServerRegistryPreShutdown() {
         ServerRegistryImpl serverRegistryImpl = new ServerRegistryImpl();        
-        Server server = EasyMock.createMock(Server.class);
-        EasyMock.reset(server);
-        server.stop();
-        EasyMock.expectLastCall();
-        EasyMock.replay(server);
-        serverRegistryImpl.register(server);
+        Server server = new DummyServer(serverRegistryImpl);
+        server.start();
+        assertEquals("The serverList should have one service", serverRegistryImpl.serversList.size(), 1);
         serverRegistryImpl.preShutdown();
-        EasyMock.verify(server);
-    }
+        assertEquals("The serverList should be clear ", serverRegistryImpl.serversList.size(), 0);
+        serverRegistryImpl.postShutdown();
+        assertEquals("The serverList should be clear ", serverRegistryImpl.serversList.size(), 0);
+    }    
+    
+    
 
 }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java?view=diff&rev=518544&r1=518543&r2=518544
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java Thu Mar 15 02:31:52 2007
@@ -64,6 +64,8 @@
         
         //update the webservice response context
         ContextPropertiesMapping.updateWebServiceContext(exchange, ctx);
+        //clear the WebServiceContextImpl's ThreadLocal variable
+        WebServiceContextImpl.clear();
         return res;
     }
 }

Modified: incubator/cxf/trunk/rt/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/pom.xml?view=diff&rev=518544&r1=518543&r2=518544
==============================================================================
--- incubator/cxf/trunk/rt/pom.xml (original)
+++ incubator/cxf/trunk/rt/pom.xml Thu Mar 15 02:31:52 2007
@@ -40,7 +40,6 @@
         <module>frontend/simple</module>
         <module>frontend/jaxws</module>
         <module>frontend/js</module>
-        <module>transports/http</module>
         <module>transports/http2</module>
         <module>transports/jms</module>
         <module>ws/policy</module>