You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2015/07/21 16:47:23 UTC

svn commit: r1692138 - in /qpid/java/trunk: broker-core/src/main/java/org/apache/qpid/server/model/port/ broker-core/src/main/java/org/apache/qpid/server/transport/ broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/ ...

Author: rgodfrey
Date: Tue Jul 21 14:47:22 2015
New Revision: 1692138

URL: http://svn.apache.org/r1692138
Log:
QPID-6650 : Fix implementation of port "0" across all port types

Modified:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AcceptingTransport.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
    qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java
    qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidRMIServerSocketFactory.java
    qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidSslRMIServerSocketFactory.java
    qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/RegistryProtectingRMIServerSocketFactory.java
    qpid/java/trunk/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java
    qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java?rev=1692138&r1=1692137&r2=1692138&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java Tue Jul 21 14:47:22 2015
@@ -106,7 +106,7 @@ abstract public class AbstractPort<X ext
 
         for (Port p : _broker.getPorts())
         {
-            if (p.getPort() == getPort() && p != this)
+            if (p.getPort() == getPort() && p.getPort() != 0 && p != this)
             {
                 throw new IllegalConfigurationException("Can't add port "
                                                         + getName()

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java?rev=1692138&r1=1692137&r2=1692138&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java Tue Jul 21 14:47:22 2015
@@ -268,7 +268,7 @@ public class AmqpPortImpl extends Abstra
             _transport.start();
             for (Transport transport : getTransports())
             {
-                _broker.getEventLogger().message(BrokerMessages.LISTENING(String.valueOf(transport), getPort()));
+                _broker.getEventLogger().message(BrokerMessages.LISTENING(String.valueOf(transport), _transport.getAcceptingPort()));
             }
 
             return State.ACTIVE;

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AcceptingTransport.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AcceptingTransport.java?rev=1692138&r1=1692137&r2=1692138&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AcceptingTransport.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AcceptingTransport.java Tue Jul 21 14:47:22 2015
@@ -22,6 +22,9 @@ package org.apache.qpid.server.transport
 
 public interface AcceptingTransport
 {
-    public void start();
-    public void close();
+    void start();
+
+    void close();
+
+    int getAcceptingPort();
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java?rev=1692138&r1=1692137&r2=1692138&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java Tue Jul 21 14:47:22 2015
@@ -77,6 +77,7 @@ class TCPandSSLTransport implements Acce
         _networkTransport.start();
     }
 
+    @Override
     public int getAcceptingPort()
     {
         return _networkTransport.getAcceptingPort();

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java?rev=1692138&r1=1692137&r2=1692138&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java Tue Jul 21 14:47:22 2015
@@ -28,6 +28,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.EnumSet;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -146,11 +147,12 @@ public class HttpManagement extends Abst
         getBroker().getEventLogger().message(ManagementConsoleMessages.STARTUP(OPERATIONAL_LOGGING_NAME));
 
         Collection<Port<?>> httpPorts = getHttpPorts(getBroker().getPorts());
-        _server = createServer(httpPorts);
+        Map<Port<?>, Connector> connectors = new HashMap<>();
+        _server = createServer(httpPorts, connectors);
         try
         {
             _server.start();
-            logOperationalListenMessages(httpPorts);
+            logOperationalListenMessages(httpPorts, connectors);
         }
         catch (Exception e)
         {
@@ -186,7 +188,7 @@ public class HttpManagement extends Abst
         return _sessionTimeout;
     }
 
-    private Server createServer(Collection<Port<?>> ports)
+    private Server createServer(Collection<Port<?>> ports, final Map<Port<?>, Connector> connectors)
     {
         if (_logger.isInfoEnabled())
         {
@@ -257,6 +259,7 @@ public class HttpManagement extends Abst
                 }
                 connector.setPort(port.getPort());
                 server.addConnector(connector);
+                connectors.put(port, connector);
             }
             else
             {
@@ -531,14 +534,14 @@ public class HttpManagement extends Abst
         return "v"+String.valueOf(BrokerModel.MODEL_MAJOR_VERSION);
     }
 
-    private void logOperationalListenMessages(Collection<Port<?>> ports)
+    private void logOperationalListenMessages(Collection<Port<?>> ports, final Map<Port<?>, Connector> connectors)
     {
         for (Port port : ports)
         {
             Set<Transport> transports = port.getTransports();
             for (Transport transport: transports)
             {
-                getBroker().getEventLogger().message(ManagementConsoleMessages.LISTENING(Protocol.HTTP.name(), transport.name(), port.getPort()));
+                getBroker().getEventLogger().message(ManagementConsoleMessages.LISTENING(Protocol.HTTP.name(), transport.name(), connectors.get(port).getLocalPort()));
             }
         }
     }

Modified: qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java?rev=1692138&r1=1692137&r2=1692138&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java (original)
+++ qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java Tue Jul 21 14:47:22 2015
@@ -23,6 +23,7 @@ package org.apache.qpid.server.jmx;
 import java.io.IOException;
 import java.lang.management.ManagementFactory;
 import java.net.InetAddress;
+import java.net.MalformedURLException;
 import java.net.UnknownHostException;
 import java.rmi.AlreadyBoundException;
 import java.rmi.NoSuchObjectException;
@@ -61,6 +62,7 @@ import org.apache.qpid.server.model.port
 import org.apache.qpid.server.model.port.RmiPort;
 import org.apache.qpid.server.security.SubjectCreator;
 import org.apache.qpid.server.security.auth.jmx.JMXPasswordAuthenticator;
+import org.apache.qpid.server.util.Action;
 import org.apache.qpid.server.util.ServerScopedRuntimeException;
 
 /**
@@ -81,8 +83,13 @@ public class JMXManagedObjectRegistry im
     private final Broker _broker;
     private final RmiPort _registryPort;
     private final JmxPort _connectorPort;
+    private int _allocatedRmiPort;
+    private int _allocatedConnectorPort;
+    private DelegatingJMXServiceUrl _externalUrl;
+    private DelegatingJMXServiceUrl _internalUrl;
+    private String _localHostName;
 
-     public JMXManagedObjectRegistry(
+    public JMXManagedObjectRegistry(
             Broker broker,
             JmxPort connectorPort, RmiPort registryPort,
             JMXManagementPlugin jmxManagement)
@@ -90,6 +97,8 @@ public class JMXManagedObjectRegistry im
         _broker = broker;
         _registryPort = registryPort;
         _connectorPort = connectorPort;
+        _allocatedRmiPort = _registryPort.getPort();
+        _allocatedConnectorPort = _connectorPort.getPort();
 
         boolean usePlatformServer = (Boolean)jmxManagement.getAttribute(JMXManagementPlugin.USE_PLATFORM_MBEAN_SERVER);
 
@@ -129,6 +138,25 @@ public class JMXManagedObjectRegistry im
         //moment).
         boolean connectorSslEnabled = _connectorPort.getTransports().contains(Transport.SSL);
 
+        final Action<Integer> setAllocatedConnectorPort = new Action<Integer>()
+                                                            {
+                                                                @Override
+                                                                public void performAction(final Integer port)
+                                                                {
+                                                                    if(_allocatedConnectorPort != port)
+                                                                    {
+                                                                        _allocatedConnectorPort = port;
+                                                                        if (_externalUrl != null)
+                                                                        {
+                                                                            _externalUrl.setPort(port);
+                                                                        }
+                                                                        if (_internalUrl != null)
+                                                                        {
+                                                                            _internalUrl.setPort(port);
+                                                                        }
+                                                                    }
+                                                                }
+                                                            };
         if (connectorSslEnabled)
         {
             KeyStore keyStore = _connectorPort.getKeyStore();
@@ -147,16 +175,17 @@ public class JMXManagedObjectRegistry im
 
             //create the SSL RMI socket factories
             csf = new SslRMIClientSocketFactory();
-            ssf = new QpidSslRMIServerSocketFactory(sslContext,_connectorPort.getEnabledCipherSuites(), _connectorPort.getDisabledCipherSuites());
+            ssf = new QpidSslRMIServerSocketFactory(sslContext,
+                                                    _connectorPort.getEnabledCipherSuites(),
+                                                    _connectorPort.getDisabledCipherSuites(),
+                                                    setAllocatedConnectorPort);
         }
         else
         {
             csf = null; // signifies the default
-            ssf = new QpidRMIServerSocketFactory();
+            ssf = new QpidRMIServerSocketFactory(setAllocatedConnectorPort);
         }
 
-        int jmxPortRegistryServer = _registryPort.getPort();
-        int jmxPortConnectorServer = _connectorPort.getPort();
 
         //add a JMXAuthenticator implementation the env map to authenticate the RMI based JMX connector server
         SubjectCreator subjectCreator =_connectorPort.getAuthenticationProvider().getSubjectCreator(connectorSslEnabled);
@@ -177,7 +206,7 @@ public class JMXManagedObjectRegistry im
          * Using custom socket factory to prevent anyone (including us unfortunately) binding to the registry using RMI.
          * As a result, only binds made using the object reference will succeed, thus securing it from external change.
          */
-        _rmiRegistry = createRmiRegistry(jmxPortRegistryServer, useCustomSocketFactory);
+        _rmiRegistry = createRmiRegistry(_allocatedRmiPort, useCustomSocketFactory);
 
         /*
          * We must now create the RMI ConnectorServer manually, as the JMX Factory methods use RMI calls
@@ -187,14 +216,15 @@ public class JMXManagedObjectRegistry im
          *
          * The registry is exported on the defined management port 'port'.
          */
-        final UsernameCachingRMIJRMPServer usernameCachingRmiServer = new UsernameCachingRMIJRMPServer(jmxPortConnectorServer, csf, ssf, connectorEnv);
+        final UsernameCachingRMIJRMPServer usernameCachingRmiServer = new UsernameCachingRMIJRMPServer(_allocatedConnectorPort, csf, ssf, connectorEnv);
+        _localHostName = getLocalhost();
 
-        final String localHostName = getLocalhost();
-        final JMXServiceURL externalUrl = new JMXServiceURL(
-                "service:jmx:rmi://"+localHostName+":"+(jmxPortConnectorServer)+"/jndi/rmi://"+localHostName+":"+jmxPortRegistryServer+"/jmxrmi");
+        _externalUrl = new DelegatingJMXServiceUrl(
+                new JMXServiceURL("service:jmx:rmi://"+_localHostName+":"+(_allocatedConnectorPort)+"/jndi/rmi://"+_localHostName+":"+_allocatedRmiPort+"/jmxrmi"));
 
-        final JMXServiceURL internalUrl = new JMXServiceURL("rmi", localHostName, jmxPortConnectorServer);
-        _cs = new RMIConnectorServer(internalUrl, connectorEnv, usernameCachingRmiServer, _mbeanServer)
+        _internalUrl = new DelegatingJMXServiceUrl(new JMXServiceURL("rmi", _localHostName, _allocatedConnectorPort));
+
+        _cs = new RMIConnectorServer(_internalUrl, connectorEnv, usernameCachingRmiServer, _mbeanServer)
         {
             @Override
             public synchronized void start() throws IOException
@@ -242,7 +272,7 @@ public class JMXManagedObjectRegistry im
             public JMXServiceURL getAddress()
             {
                 //must return our pre-crafted url that includes the full details, inc JNDI details
-                return externalUrl;
+                return _externalUrl;
             }
         };
 
@@ -262,7 +292,7 @@ public class JMXManagedObjectRegistry im
         Set<Transport> connectorTransports = _connectorPort.getTransports();
         for (Transport transport: connectorTransports)
         {
-            getEventLogger().message(ManagementConsoleMessages.LISTENING("JMX RMIConnectorServer", transport.name(), jmxPortConnectorServer));
+            getEventLogger().message(ManagementConsoleMessages.LISTENING("JMX RMIConnectorServer", transport.name(), _allocatedConnectorPort));
         }
 
         getEventLogger().message(ManagementConsoleMessages.READY(OPERATIONAL_LOGGING_NAME));
@@ -271,10 +301,17 @@ public class JMXManagedObjectRegistry im
     private Registry createRmiRegistry(int jmxPortRegistryServer, boolean useCustomRmiRegistry)
             throws RemoteException
     {
-        final RMIServerSocketFactory ssf = getRmiServerSocketFactory(useCustomRmiRegistry);
+        final RMIServerSocketFactory ssf = getRmiServerSocketFactory(useCustomRmiRegistry,
+                                                                     new Action<Integer>()
+                                                                    {
+                                                                        @Override
+                                                                        public void performAction(final Integer port)
+                                                                        {
+                                                                            _allocatedRmiPort = port;
+                                                                        }
+                                                                    });
         Registry rmiRegistry = LocateRegistry.createRegistry(jmxPortRegistryServer, null, ssf);
-
-        getEventLogger().message(ManagementConsoleMessages.LISTENING("RMI Registry", Transport.TCP.name(), jmxPortRegistryServer));
+        getEventLogger().message(ManagementConsoleMessages.LISTENING("RMI Registry", Transport.TCP.name(), _allocatedRmiPort));
         return rmiRegistry;
     }
 
@@ -411,20 +448,89 @@ public class JMXManagedObjectRegistry im
         }
     }
 
-    private RMIServerSocketFactory getRmiServerSocketFactory(final boolean useCustomRmiRegistry)
+    private RMIServerSocketFactory getRmiServerSocketFactory(final boolean useCustomRmiRegistry, Action<Integer> assignPortAction)
     {
+
         final RMIServerSocketFactory ssf;
         if(useCustomRmiRegistry)
         {
             _log.debug("Using registry-protecting RMIServerSocketFactory");
 
-            ssf = new RegistryProtectingRMIServerSocketFactory();
+            ssf = new RegistryProtectingRMIServerSocketFactory(assignPortAction);
         }
         else
         {
-            ssf = new QpidRMIServerSocketFactory();
+            ssf = new QpidRMIServerSocketFactory(assignPortAction);
         }
         return ssf;
     }
 
+    private static class DelegatingJMXServiceUrl extends JMXServiceURL
+    {
+
+        private volatile JMXServiceURL _delegate;
+
+        public DelegatingJMXServiceUrl(JMXServiceURL delegate) throws MalformedURLException
+        {
+            super(delegate.getProtocol(), delegate.getHost(), delegate.getPort(), delegate.getURLPath());
+
+            _delegate = delegate;
+        }
+
+
+        void setPort(int port)
+        {
+            try
+            {
+                _delegate = new JMXServiceURL(_delegate.getProtocol(), _delegate.getHost(), port, _delegate.getURLPath());
+            }
+            catch (MalformedURLException e)
+            {
+                throw new ServerScopedRuntimeException("Unexpected exception when updating port", e);
+            }
+        }
+
+        @Override
+        public String getProtocol()
+        {
+            return _delegate.getProtocol();
+        }
+
+        @Override
+        public String getHost()
+        {
+            return _delegate.getHost();
+        }
+
+        @Override
+        public int getPort()
+        {
+            return _delegate.getPort();
+        }
+
+        @Override
+        public String getURLPath()
+        {
+            return _delegate.getURLPath();
+        }
+
+        @Override
+        public String toString()
+        {
+            return _delegate.toString();
+        }
+
+        @Override
+        public boolean equals(final Object obj)
+        {
+            return _delegate.equals(obj);
+        }
+
+        @Override
+        public int hashCode()
+        {
+            return _delegate.hashCode();
+        }
+    }
+
 }

Modified: qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidRMIServerSocketFactory.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidRMIServerSocketFactory.java?rev=1692138&r1=1692137&r2=1692138&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidRMIServerSocketFactory.java (original)
+++ qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidRMIServerSocketFactory.java Tue Jul 21 14:47:22 2015
@@ -23,14 +23,24 @@ import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.rmi.server.RMIServerSocketFactory;
 
+import org.apache.qpid.server.util.Action;
+
 class QpidRMIServerSocketFactory implements RMIServerSocketFactory
 {
+    private final Action<Integer> _portAllocationAction;
+
+    public QpidRMIServerSocketFactory(Action<Integer> portAllocationAction)
+    {
+        _portAllocationAction = portAllocationAction;
+    }
+
     @Override
     public ServerSocket createServerSocket(final int port) throws IOException
     {
         ServerSocket serverSocket = new ServerSocket();
         serverSocket.setReuseAddress(true);
         serverSocket.bind(new InetSocketAddress(port));
+        _portAllocationAction.performAction(serverSocket.getLocalPort());
         return serverSocket;
     }
 
@@ -46,4 +56,4 @@ class QpidRMIServerSocketFactory impleme
     {
         return obj != null && getClass() == obj.getClass();
     }
-}
\ No newline at end of file
+}

Modified: qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidSslRMIServerSocketFactory.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidSslRMIServerSocketFactory.java?rev=1692138&r1=1692137&r2=1692138&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidSslRMIServerSocketFactory.java (original)
+++ qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidSslRMIServerSocketFactory.java Tue Jul 21 14:47:22 2015
@@ -31,6 +31,7 @@ import javax.net.ssl.SSLSocket;
 import javax.net.ssl.SSLSocketFactory;
 import javax.rmi.ssl.SslRMIServerSocketFactory;
 
+import org.apache.qpid.server.util.Action;
 import org.apache.qpid.transport.network.security.ssl.SSLUtil;
 
 public class QpidSslRMIServerSocketFactory extends SslRMIServerSocketFactory
@@ -38,20 +39,21 @@ public class QpidSslRMIServerSocketFacto
     private final SSLContext _sslContext;
     private final Collection<String> _enabledCipherSuites;
     private final Collection<String> _disabledCipherSuites;
+    private final Action<Integer> _portAllocationAction;
 
     /**
      * SslRMIServerSocketFactory which creates the ServerSocket using the
      * supplied SSLContext rather than the system default context normally
      * used by the superclass, allowing us to use a configuration-specified
      * key store.
-     *
-     * @param sslContext previously created sslContext using the desired key store.
+     *  @param sslContext previously created sslContext using the desired key store.
      * @param enabledCipherSuites
-     *@param disabledCipherSuites @throws NullPointerException if the provided {@link SSLContext} is null.
+     * @param disabledCipherSuites @throws NullPointerException if the provided {@link SSLContext} is null.
+     * @param action
      */
     public QpidSslRMIServerSocketFactory(SSLContext sslContext,
                                          final Collection<String> enabledCipherSuites,
-                                         final Collection<String> disabledCipherSuites) throws NullPointerException
+                                         final Collection<String> disabledCipherSuites, final Action<Integer> action) throws NullPointerException
     {
         super();
 
@@ -63,6 +65,7 @@ public class QpidSslRMIServerSocketFacto
         _sslContext = sslContext;
         _enabledCipherSuites = enabledCipherSuites;
         _disabledCipherSuites = disabledCipherSuites;
+        _portAllocationAction = action;
 
         //TODO: settings + implementation for SSL client auth, updating equals and hashCode appropriately.
     }
@@ -91,6 +94,7 @@ public class QpidSslRMIServerSocketFacto
         };
         serverSocket.setReuseAddress(true);
         serverSocket.bind(new InetSocketAddress(port));
+        _portAllocationAction.performAction(serverSocket.getLocalPort());
         return serverSocket;
     }
 

Modified: qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/RegistryProtectingRMIServerSocketFactory.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/RegistryProtectingRMIServerSocketFactory.java?rev=1692138&r1=1692137&r2=1692138&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/RegistryProtectingRMIServerSocketFactory.java (original)
+++ qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/RegistryProtectingRMIServerSocketFactory.java Tue Jul 21 14:47:22 2015
@@ -26,6 +26,8 @@ import java.net.ServerSocket;
 import java.net.Socket;
 import java.rmi.server.RMIServerSocketFactory;
 
+import org.apache.qpid.server.util.Action;
+
 /**
  * A custom RMIServerSocketFactory class, used to prevent updates to the RMI registry.
  * Supplied to the registry at creation, this will prevent RMI-based operations on the
@@ -36,12 +38,21 @@ import java.rmi.server.RMIServerSocketFa
  */
 class RegistryProtectingRMIServerSocketFactory implements RMIServerSocketFactory
 {
+
+    private final Action<Integer> _portAllocationAction;
+
+    RegistryProtectingRMIServerSocketFactory(Action<Integer> portAllocationAction)
+    {
+        _portAllocationAction = portAllocationAction;
+    }
+
     @Override
     public ServerSocket createServerSocket(int port) throws IOException
     {
         NoLocalAddressServerSocket serverSocket = new NoLocalAddressServerSocket();
         serverSocket.setReuseAddress(true);
         serverSocket.bind(new InetSocketAddress(port));
+        _portAllocationAction.performAction(serverSocket.getLocalPort());
         return serverSocket;
     }
 

Modified: qpid/java/trunk/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java?rev=1692138&r1=1692137&r2=1692138&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java (original)
+++ qpid/java/trunk/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java Tue Jul 21 14:47:22 2015
@@ -194,6 +194,12 @@ class WebSocketProvider implements Accep
 
     }
 
+    @Override
+    public int getAcceptingPort()
+    {
+        return _server == null || _server.getConnectors() == null || _server.getConnectors().length == 0 ? _port.getPort() : _server.getConnectors()[0].getLocalPort();
+    }
+
     private class AmqpWebSocket implements WebSocket,WebSocket.OnBinaryMessage
     {
         private final SocketAddress _localAddress;

Modified: qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java?rev=1692138&r1=1692137&r2=1692138&view=diff
==============================================================================
--- qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java (original)
+++ qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java Tue Jul 21 14:47:22 2015
@@ -273,7 +273,7 @@ public class QpidBrokerTestCase extends
         {
             configuration.setObjectAttribute(Port.class, TestBrokerConfiguration.ENTRY_NAME_AMQP_PORT, Port.PORT, actualPort);
             configuration.setObjectAttribute(Port.class, TestBrokerConfiguration.ENTRY_NAME_RMI_PORT, Port.PORT, getManagementPort(actualPort));
-            configuration.setObjectAttribute(Port.class, TestBrokerConfiguration.ENTRY_NAME_JMX_PORT, Port.PORT, getManagementPort(actualPort) + JMXPORT_CONNECTORSERVER_OFFSET);
+            configuration.setObjectAttribute(Port.class, TestBrokerConfiguration.ENTRY_NAME_JMX_PORT, Port.PORT, getManagementPort(actualPort) + (actualPort == 0 ? 0 : JMXPORT_CONNECTORSERVER_OFFSET));
 
             String remotelogback = "remotelogback";
 
@@ -369,7 +369,7 @@ public class QpidBrokerTestCase extends
      */
     protected int getManagementPort(int mainPort)
     {
-        return mainPort + (DEFAULT_MANAGEMENT_PORT - DEFAULT_PORT);
+        return mainPort == 0 ? 0 : mainPort + (DEFAULT_MANAGEMENT_PORT - DEFAULT_PORT);
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org