Repository: cxf
Updated Branches:
  refs/heads/master eabac927d -> 14c241f0b


Change RMManager to use the closeable on the Endpoint.  This allows the 
CloseSequense call on the client to complete prior to the decoupled-destination 
being shutdown which could cause a "hang".


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/14c241f0
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/14c241f0
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/14c241f0

Branch: refs/heads/master
Commit: 14c241f0ba605176509620bc2517bec2bd351e4a
Parents: 4391aa5
Author: Daniel Kulp <[email protected]>
Authored: Fri Mar 14 14:17:52 2014 -0400
Committer: Daniel Kulp <[email protected]>
Committed: Fri Mar 14 14:19:01 2014 -0400

----------------------------------------------------------------------
 .../java/org/apache/cxf/ws/rm/RMManager.java    | 12 +++++---
 .../org/apache/cxf/ws/rm/WrappedEndpoint.java   |  9 ++++++
 .../org/apache/cxf/ws/rm/RMManagerTest.java     | 32 +-------------------
 .../systest/ws/policy/RM12PolicyWsdlTest.java   |  2 ++
 4 files changed, 20 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/14c241f0/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
----------------------------------------------------------------------
diff --git a/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java 
b/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
index a3ceb09..37a2460 100644
--- a/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
+++ b/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
@@ -19,6 +19,7 @@
 
 package org.apache.cxf.ws.rm;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.util.Collection;
 import java.util.Map;
@@ -127,12 +128,11 @@ public class RMManager {
     }
 
     public void stopServer(Server server) {
-        shutdownReliableEndpoint(server.getEndpoint());
     }
     
     // ClientLifeCycleListener
     
-    public void clientCreated(Client client) {
+    public void clientCreated(final Client client) {
         if (null == store || null == retransmissionQueue) {
             return;
         }        
@@ -146,7 +146,6 @@ public class RMManager {
     }
     
     public void clientDestroyed(Client client) {
-        shutdownReliableEndpoint(client.getEndpoint());
     }
 
     // Configuration
@@ -625,7 +624,12 @@ public class RMManager {
         //TODO add the redelivery code
     }
 
-    RMEndpoint createReliableEndpoint(Endpoint endpoint) {
+    RMEndpoint createReliableEndpoint(final Endpoint endpoint) {
+        endpoint.addCleanupHook(new Closeable() {
+            public void close() throws IOException {
+                shutdownReliableEndpoint(endpoint);
+            }
+        });
         return new RMEndpoint(this, endpoint);
     }  
     

http://git-wip-us.apache.org/repos/asf/cxf/blob/14c241f0/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/WrappedEndpoint.java
----------------------------------------------------------------------
diff --git a/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/WrappedEndpoint.java 
b/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/WrappedEndpoint.java
index 85cead8..f517d3f 100644
--- a/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/WrappedEndpoint.java
+++ b/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/WrappedEndpoint.java
@@ -19,6 +19,7 @@
 
 package org.apache.cxf.ws.rm;
 
+import java.io.Closeable;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -165,4 +166,12 @@ public class WrappedEndpoint implements Endpoint {
     public List<Feature> getActiveFeatures() {
         return wrappedEndpoint.getActiveFeatures();
     }
+
+    public void addCleanupHook(Closeable c) {
+        wrappedEndpoint.addCleanupHook(c);
+    }
+
+    public List<Closeable> getCleanupHooks() {
+        return wrappedEndpoint.getCleanupHooks();
+    }
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/14c241f0/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java
----------------------------------------------------------------------
diff --git a/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java 
b/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java
index c68c574..ba01bd2 100644
--- a/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java
+++ b/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java
@@ -182,22 +182,7 @@ public class RMManagerTest extends Assert {
         manager.startServer(s);
         control.verify();
     }
-    
-    @Test
-    public void testStopServer() throws NoSuchMethodException {
-        Method m = RMManager.class
-            .getDeclaredMethod("shutdownReliableEndpoint", new Class[] 
{Endpoint.class});
-        manager = control.createMock(RMManager.class, new Method[] {m});
-        Server s = control.createMock(Server.class);
-        Endpoint e = control.createMock(Endpoint.class);
-        EasyMock.expect(s.getEndpoint()).andReturn(e);
-        manager.shutdownReliableEndpoint(e);
-        EasyMock.expectLastCall();
-        control.replay();
-        manager.stopServer(s);
-        control.verify();
-    }
-    
+
     @Test
     public void testClientCreated() throws NoSuchMethodException {
         Method m = RMManager.class.getDeclaredMethod("recoverReliableEndpoint",
@@ -219,21 +204,6 @@ public class RMManagerTest extends Assert {
     }
     
     @Test
-    public void testClientDestroyed() throws NoSuchMethodException {
-        Method m = RMManager.class
-            .getDeclaredMethod("shutdownReliableEndpoint", new Class[] 
{Endpoint.class});
-        manager = control.createMock(RMManager.class, new Method[] {m});
-        Client c = control.createMock(Client.class);
-        Endpoint e = control.createMock(Endpoint.class);
-        EasyMock.expect(c.getEndpoint()).andReturn(e);
-        manager.shutdownReliableEndpoint(e);
-        EasyMock.expectLastCall();
-        control.replay();
-        manager.clientDestroyed(c);
-        control.verify();
-    }
-    
-    @Test
     public void testGetBindingFaultFactory() {
         SoapBinding binding = control.createMock(SoapBinding.class);
         assertNotNull(new RMManager().getBindingFaultFactory(binding));

http://git-wip-us.apache.org/repos/asf/cxf/blob/14c241f0/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM12PolicyWsdlTest.java
----------------------------------------------------------------------
diff --git 
a/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM12PolicyWsdlTest.java
 
b/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM12PolicyWsdlTest.java
index 66f2cda..e31d86f 100644
--- 
a/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM12PolicyWsdlTest.java
+++ 
b/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM12PolicyWsdlTest.java
@@ -26,6 +26,7 @@ import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.greeter_control.Greeter;
 import org.apache.cxf.greeter_control.PingMeFault;
 import org.apache.cxf.greeter_control.Reliable12GreeterService;
+import org.apache.cxf.systest.ws.util.ConnectionHelper;
 import org.apache.cxf.systest.ws.util.MessageFlow;
 import org.apache.cxf.testutil.common.TestUtil;
 import org.apache.cxf.testutil.recorders.MessageRecorder;
@@ -77,6 +78,7 @@ public class RM12PolicyWsdlTest extends RMPolicyWsdlTestBase {
         Reliable12GreeterService gs = new Reliable12GreeterService();
         Greeter greeter = gs.getGreeterPort();
         updateAddressPort(greeter, PORT);
+        ConnectionHelper.setKeepAliveConnection(greeter, true);
         LOG.fine("Created greeter client.");
 
         // oneway

Reply via email to