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
