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 2014/05/08 15:14:11 UTC

svn commit: r1593264 [4/4] - in /qpid/trunk/qpid: java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/ java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/ java/broker-core/src/main/java/org/apache/qpid/server/...

Modified: qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java Thu May  8 13:14:05 2014
@@ -33,13 +33,12 @@ import org.apache.qpid.server.model.Abst
 import org.apache.qpid.server.model.AccessControlProvider;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.IllegalStateTransitionException;
 import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
 import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.StateTransition;
 import org.apache.qpid.server.security.AccessControl;
 import org.apache.qpid.server.security.access.Operation;
-import org.apache.qpid.server.util.MapValueConverter;
 
 public class ACLFileAccessControlProviderImpl
         extends AbstractConfiguredObject<ACLFileAccessControlProviderImpl>
@@ -50,7 +49,7 @@ public class ACLFileAccessControlProvide
     protected DefaultAccessControl _accessControl;
     protected final Broker _broker;
 
-    private AtomicReference<State> _state;
+    private AtomicReference<State> _state = new AtomicReference<>(State.UNINITIALIZED);
 
     @ManagedAttributeField
     private String _path;
@@ -63,9 +62,6 @@ public class ACLFileAccessControlProvide
 
         _broker = broker;
 
-        State state = MapValueConverter.getEnumAttribute(State.class, STATE, attributes, State.INITIALISING);
-        _state = new AtomicReference<State>(state);
-
     }
 
     @Override
@@ -108,81 +104,68 @@ public class ACLFileAccessControlProvide
     }
 
     @Override
-    public Object getAttribute(String name)
-    {
-        if(STATE.equals(name))
-        {
-            return getState();
-        }
-        return super.getAttribute(name);
-    }
-
-    @Override
     public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz)
     {
         return Collections.emptySet();
     }
 
-    @Override
-    public boolean setState(State desiredState)
-            throws IllegalStateTransitionException, AccessControlException
-    {
-        State state = _state.get();
 
-        if(desiredState == State.DELETED)
-        {
-            deleted();
-            return _state.compareAndSet(state, State.DELETED);
-        }
-        else if (desiredState == State.QUIESCED)
+    @StateTransition(currentState = {State.UNINITIALIZED, State.QUIESCED, State.ERRORED}, desiredState = State.ACTIVE)
+    private void activate()
+    {
+        if(_broker.isManagementMode())
         {
-            return _state.compareAndSet(state, State.QUIESCED);
+
+            _state.set(_accessControl.validate() ? State.QUIESCED : State.ERRORED);
         }
-        else if(desiredState == State.ACTIVE)
+        else
         {
-            if ((state == State.INITIALISING || state == State.QUIESCED) && _state.compareAndSet(state, State.ACTIVE))
+            try
+            {
+                _accessControl.open();
+                _state.set(State.ACTIVE);
+            }
+            catch (RuntimeException e)
             {
-                try
+                _state.set(State.ERRORED);
+                if (_broker.isManagementMode())
                 {
-                    _accessControl.open();
-                    return true;
+                    LOGGER.warn("Failed to activate ACL provider: " + getName(), e);
                 }
-                catch(RuntimeException e)
+                else
                 {
-                    _state.compareAndSet(State.ACTIVE, State.ERRORED);
-                    if (_broker.isManagementMode())
-                    {
-                        LOGGER.warn("Failed to activate ACL provider: " + getName(), e);
-                    }
-                    else
-                    {
-                        throw e;
-                    }
+                    throw e;
                 }
             }
-            else
-            {
-                throw new IllegalStateException("Can't activate access control provider in " + state + " state");
-            }
-        }
-        else if(desiredState == State.STOPPED)
-        {
-            if(_state.compareAndSet(state, State.STOPPED))
-            {
-                _accessControl.close();
-                return true;
-            }
-
-            return false;
         }
-        return false;
     }
 
+    @StateTransition(currentState = {State.ACTIVE, State.QUIESCED}, desiredState = State.STOPPED)
+    private void doStop()
+    {
+        close();
+        _state.set(State.STOPPED);
+    }
 
     @Override
-    protected void changeAttributes(Map<String, Object> attributes)
+    protected void onClose()
+    {
+        super.onClose();
+        _accessControl.close();
+    }
+
+    @StateTransition(currentState = State.UNINITIALIZED, desiredState = State.QUIESCED)
+    private void startQuiesced()
+    {
+        _state.set(State.QUIESCED);
+    }
+
+    @StateTransition(currentState = {State.ACTIVE, State.QUIESCED, State.STOPPED, State.ERRORED}, desiredState = State.DELETED)
+    private void doDelete()
     {
-        throw new UnsupportedOperationException("Changing attributes on AccessControlProvider is not supported");
+        close();
+        _state.set(State.DELETED);
+        deleted();
     }
 
     @Override

Modified: qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControl.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControl.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControl.java Thu May  8 13:14:05 2014
@@ -20,9 +20,9 @@
  */
 package org.apache.qpid.server.security.access.plugins;
 
+import java.io.File;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
-import java.io.File;
 import java.net.SocketAddress;
 import java.security.AccessController;
 import java.util.Set;
@@ -31,12 +31,12 @@ import javax.security.auth.Subject;
 
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.log4j.Logger;
+
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.connection.ConnectionPrincipal;
-import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.logging.EventLoggerProvider;
-import org.apache.qpid.server.security.Result;
 import org.apache.qpid.server.security.AccessControl;
+import org.apache.qpid.server.security.Result;
 import org.apache.qpid.server.security.access.ObjectProperties;
 import org.apache.qpid.server.security.access.ObjectType;
 import org.apache.qpid.server.security.access.Operation;
@@ -73,7 +73,7 @@ public class DefaultAccessControl implem
     {
         if(_aclFile != null)
         {
-            if (!_aclFile.exists())
+            if (!validate())
             {
                 throw new IllegalConfigurationException("ACL file '" + _aclFile + "' is not found");
             }
@@ -84,6 +84,12 @@ public class DefaultAccessControl implem
     }
 
     @Override
+    public boolean validate()
+    {
+        return _aclFile.exists();
+    }
+
+    @Override
     public void close()
     {
         //no-op
@@ -101,7 +107,7 @@ public class DefaultAccessControl implem
         if(_aclFile != null)
         {
             //verify it exists
-            if (!_aclFile.exists())
+            if (!validate())
             {
                 throw new IllegalConfigurationException("ACL file '" + _aclFile + "' is not found");
             }

Modified: qpid/trunk/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java Thu May  8 13:14:05 2014
@@ -30,6 +30,7 @@ import java.util.UUID;
 import java.util.regex.Pattern;
 
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
 import org.apache.qpid.server.model.AccessControlProvider;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.BrokerModel;
@@ -53,6 +54,7 @@ public class ACLFileAccessControlProvide
         when(_broker.getObjectFactory()).thenReturn(_objectFactory);
         when(_broker.getModel()).thenReturn(_objectFactory.getModel());
         when(_broker.getCategoryClass()).thenReturn(Broker.class);
+        when(_broker.getTaskExecutor()).thenReturn(mock(TaskExecutor.class));
     }
 
     public void testCreateInstanceWhenAclFileIsNotPresent()

Modified: qpid/trunk/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java Thu May  8 13:14:05 2014
@@ -496,7 +496,7 @@ class ManagementNode implements MessageS
         responseHeader.setHeader(TYPE_ATTRIBUTE, type);
         try
         {
-            entity.setDesiredState(State.DELETED);
+            entity.delete();
             responseHeader.setHeader(STATUS_CODE_HEADER, STATUS_CODE_NO_CONTENT);
         }
         catch(AccessControlException e)

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java Thu May  8 13:14:05 2014
@@ -67,11 +67,12 @@ import org.apache.qpid.server.management
 import org.apache.qpid.server.model.*;
 import org.apache.qpid.server.model.adapter.AbstractPluginAdapter;
 import org.apache.qpid.server.model.port.HttpPort;
+import org.apache.qpid.server.model.port.PortManager;
 import org.apache.qpid.server.util.ServerScopedRuntimeException;
 import org.apache.qpid.transport.network.security.ssl.QpidMultipleTrustManager;
 
 @ManagedObject( category = false, type = "MANAGEMENT-HTTP" )
-public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implements HttpManagementConfiguration<HttpManagement>
+public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implements HttpManagementConfiguration<HttpManagement>, PortManager
 {
     private final Logger _logger = Logger.getLogger(HttpManagement.class);
 
@@ -106,29 +107,16 @@ public class HttpManagement extends Abst
     @ManagedAttributeField
     private int _sessionTimeout;
 
+    private boolean _allowPortActivation;
+
     @ManagedObjectFactoryConstructor
     public HttpManagement(Map<String, Object> attributes, Broker broker)
     {
         super(attributes, broker);
     }
 
-    @Override
-    protected boolean setState(State desiredState)
-    {
-        if(desiredState == State.ACTIVE)
-        {
-            start();
-            return true;
-        }
-        else if(desiredState == State.STOPPED)
-        {
-            stop();
-            return true;
-        }
-        return false;
-    }
-
-    private void start()
+    @StateTransition(currentState = State.UNINITIALIZED, desiredState = State.ACTIVE)
+    private void doStart()
     {
         getBroker().getEventLogger().message(ManagementConsoleMessages.STARTUP(OPERATIONAL_LOGGING_NAME));
 
@@ -145,9 +133,18 @@ public class HttpManagement extends Abst
         }
 
         getBroker().getEventLogger().message(ManagementConsoleMessages.READY(OPERATIONAL_LOGGING_NAME));
+        setCurrentState(State.ACTIVE);
     }
 
-    private void stop()
+    @StateTransition(currentState = State.ACTIVE, desiredState = State.STOPPED)
+    private void doStop()
+    {
+        close();
+        setCurrentState(State.STOPPED);
+    }
+
+    @Override
+    protected void onClose()
     {
         if (_server != null)
         {
@@ -176,7 +173,7 @@ public class HttpManagement extends Abst
         {
             _logger.info("Starting up web server on " + ports);
         }
-
+        _allowPortActivation = true;
         Server server = new Server();
         int lastPort = -1;
         for (Port<?> port : ports)
@@ -184,11 +181,16 @@ public class HttpManagement extends Abst
             if(port instanceof HttpPort)
             {
 
-                if (State.QUIESCED.equals(port.getState()))
+                if (!State.ACTIVE.equals(port.getDesiredState()))
                 {
                     continue;
                 }
+                ((HttpPort<?>)port).setPortManager(this);
 
+                if(port.getState() != State.ACTIVE)
+                {
+                    port.start();
+                }
                 Connector connector = null;
 
                 Collection<Transport> transports = port.getTransports();
@@ -223,6 +225,8 @@ public class HttpManagement extends Abst
 
         }
 
+        _allowPortActivation = false;
+
         ServletContextHandler root = new ServletContextHandler(ServletContextHandler.SESSIONS);
         root.setContextPath("/");
         server.setHandler(root);
@@ -435,6 +439,12 @@ public class HttpManagement extends Abst
     }
 
     @Override
+    public boolean isActivationAllowed(final Port<?> port)
+    {
+        return _allowPortActivation;
+    }
+
+    @Override
     public boolean isHttpsSaslAuthenticationEnabled()
     {
         return _httpsSaslAuthenticationEnabled;

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java Thu May  8 13:14:05 2014
@@ -43,7 +43,6 @@ import org.codehaus.jackson.map.Serializ
 
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.State;
 
 public class RestServlet extends AbstractServlet
 {
@@ -541,7 +540,7 @@ public class RestServlet extends Abstrac
             Collection<ConfiguredObject<?>> allObjects = getObjects(request);
             for(ConfiguredObject o : allObjects)
             {
-                o.setDesiredState(State.DELETED);
+                o.delete();
             }
 
             response.setStatus(HttpServletResponse.SC_OK);

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementTest.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementTest.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/HttpManagementTest.java Thu May  8 13:14:05 2014
@@ -29,12 +29,15 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.model.AuthenticationProvider;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.BrokerModel;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ConfiguredObjectFactory;
 import org.apache.qpid.server.model.ConfiguredObjectFactoryImpl;
+import org.apache.qpid.server.model.State;
 import org.apache.qpid.test.utils.QpidTestCase;
 
 public class HttpManagementTest extends QpidTestCase
@@ -54,6 +57,8 @@ public class HttpManagementTest extends 
         when(_broker.getObjectFactory()).thenReturn(objectFactory);
         when(_broker.getModel()).thenReturn(objectFactory.getModel());
         when(_broker.getCategoryClass()).thenReturn(Broker.class);
+        when(_broker.getEventLogger()).thenReturn(mock(EventLogger.class));
+        when(_broker.getTaskExecutor()).thenReturn(mock(TaskExecutor.class));
 
         Map<String, Object> attributes = new HashMap<String, Object>();
         attributes.put(HttpManagement.HTTP_BASIC_AUTHENTICATION_ENABLED, false);
@@ -63,6 +68,7 @@ public class HttpManagementTest extends 
         attributes.put(HttpManagement.NAME, getTestName());
         attributes.put(HttpManagement.TIME_OUT, 10000l);
         attributes.put(ConfiguredObject.ID, _id);
+        attributes.put(HttpManagement.DESIRED_STATE, State.QUIESCED);
         _management = new HttpManagement(attributes, _broker);
         _management.open();
     }

Modified: qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java Thu May  8 13:14:05 2014
@@ -31,6 +31,7 @@ import java.util.Set;
 import javax.management.JMException;
 
 import org.apache.log4j.Logger;
+
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.jmx.mbeans.LoggingManagementMBean;
 import org.apache.qpid.server.jmx.mbeans.ServerInformationMBean;
@@ -48,15 +49,19 @@ import org.apache.qpid.server.model.Pass
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.Protocol;
 import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.StateTransition;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.model.adapter.AbstractPluginAdapter;
+import org.apache.qpid.server.model.port.JmxPort;
+import org.apache.qpid.server.model.port.PortManager;
+import org.apache.qpid.server.model.port.RmiPort;
 import org.apache.qpid.server.plugin.QpidServiceLoader;
-import org.apache.qpid.server.util.ServerScopedRuntimeException;
 
 public class JMXManagementPluginImpl
         extends AbstractPluginAdapter<JMXManagementPluginImpl> implements ConfigurationChangeListener,
-                                                                          JMXManagementPlugin<JMXManagementPluginImpl>
+                                                                          JMXManagementPlugin<JMXManagementPluginImpl>,
+                                                                          PortManager
 {
     private static final Logger LOGGER = Logger.getLogger(JMXManagementPluginImpl.class);
 
@@ -81,55 +86,48 @@ public class JMXManagementPluginImpl
     @ManagedAttributeField
     private boolean _usePlatformMBeanServer;
 
+    private boolean _allowPortActivation;
+
     @ManagedObjectFactoryConstructor
     public JMXManagementPluginImpl(Map<String, Object> attributes, Broker broker)
     {
         super(attributes, broker);
     }
 
-    @Override
-    protected boolean setState(State desiredState)
-    {
-        if(desiredState == State.ACTIVE)
-        {
-            try
-            {
-                start();
-            }
-            catch (Exception e)
-            {
-                throw new ServerScopedRuntimeException("Couldn't start JMX management", e);
-            }
-            return true;
-        }
-        else if(desiredState == State.STOPPED)
-        {
-            stop();
-            return true;
-        }
-        return false;
-    }
-
-    private void start() throws JMException, IOException
+    @StateTransition(currentState = State.UNINITIALIZED, desiredState = State.ACTIVE)
+    private void doStart() throws JMException, IOException
     {
+        _allowPortActivation = true;
         Broker<?> broker = getBroker();
-        Port connectorPort = null;
-        Port registryPort = null;
+        JmxPort<?> connectorPort = null;
+        RmiPort registryPort = null;
         Collection<Port<?>> ports = broker.getPorts();
         for (Port port : ports)
         {
-            if (State.QUIESCED.equals(port.getState()))
+            if (port.getDesiredState() != State.ACTIVE)
             {
                 continue;
             }
 
             if(isRegistryPort(port))
             {
-                registryPort = port;
+                registryPort = (RmiPort) port;
+                registryPort.setPortManager(this);
+                if(port.getState() != State.ACTIVE)
+                {
+                    port.start();
+                }
+
             }
             else if(isConnectorPort(port))
             {
-                connectorPort = port;
+                connectorPort = (JmxPort<?>) port;
+                connectorPort.setPortManager(this);
+                if(port.getState() != State.ACTIVE)
+                {
+                    port.start();
+                }
+
             }
         }
         if(connectorPort == null)
@@ -184,6 +182,14 @@ public class JMXManagementPluginImpl
             new LoggingManagementMBean(LoggingManagementFacade.getCurrentInstance(), _objectRegistry);
         }
         _objectRegistry.start();
+        setCurrentState(State.ACTIVE);
+        _allowPortActivation = false;
+    }
+
+    @Override
+    public boolean isActivationAllowed(final Port<?> port)
+    {
+        return _allowPortActivation;
     }
 
     @Override
@@ -203,7 +209,15 @@ public class JMXManagementPluginImpl
         return port.getAvailableProtocols().contains(Protocol.RMI);
     }
 
-    private void stop()
+    @StateTransition( currentState = State.ACTIVE, desiredState = State.STOPPED )
+    private void doStop()
+    {
+        close();
+        setCurrentState(State.STOPPED);
+    }
+
+    @Override
+    protected void onClose()
     {
         synchronized (_childrenLock)
         {

Modified: qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/ManagedObjectRegistry.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/ManagedObjectRegistry.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/ManagedObjectRegistry.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/ManagedObjectRegistry.java Thu May  8 13:14:05 2014
@@ -20,12 +20,10 @@
  */
 package org.apache.qpid.server.jmx;
 
-import org.apache.qpid.common.Closeable;
+import java.io.IOException;
 
 import javax.management.JMException;
 
-import java.io.IOException;
-
 /**
  * Handles the registration (and unregistration and so on) of managed objects.
  *
@@ -38,11 +36,13 @@ import java.io.IOException;
  * be the obvious choice for managed objects.
  *
  */
-public interface ManagedObjectRegistry extends Closeable
+public interface ManagedObjectRegistry
 {
     void start() throws IOException;
 
     void registerObject(ManagedObject managedObject) throws JMException;
 
     void unregisterObject(ManagedObject managedObject) throws JMException;
+
+    void close();
 }

Modified: qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBean.java Thu May  8 13:14:05 2014
@@ -215,7 +215,7 @@ public class VirtualHostManagerMBean ext
 
         try
         {
-            exchange.delete();
+            exchange.deleteWithChecks();
         }
         catch(RequiredExchangeException e)
         {
@@ -291,7 +291,7 @@ public class VirtualHostManagerMBean ext
         {
             throw new OperationsException("No such queue \""+ queueName +"\"");
         }
-        queue.delete();
+        queue.deleteAndReturnCount();
     }
 
     @Override

Modified: qpid/trunk/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/VirtualHostManagerMBeanTest.java Thu May  8 13:14:05 2014
@@ -125,7 +125,7 @@ public class VirtualHostManagerMBeanTest
         when(_mockVirtualHost.getChildByName(eq(Queue.class), eq(QUEUE_1_NAME))).thenReturn(mockQueue);
 
         _virtualHostManagerMBean.deleteQueue(QUEUE_1_NAME);
-        verify(mockQueue).delete();
+        verify(mockQueue).deleteAndReturnCount();
     }
 
     public void testDeleteQueueWhenQueueDoesNotExist() throws Exception
@@ -145,7 +145,7 @@ public class VirtualHostManagerMBeanTest
             // PASS
             assertEquals("No such queue \"unknownqueue\"", oe.getMessage());
         }
-        verify(mockQueue, never()).delete();
+        verify(mockQueue, never()).deleteAndReturnCount();
     }
 
     public void testCreateNewDurableExchange() throws Exception
@@ -182,7 +182,7 @@ public class VirtualHostManagerMBeanTest
 
 
         _virtualHostManagerMBean.unregisterExchange(EXCHANGE_1_NAME);
-        verify(mockExchange).delete();
+        verify(mockExchange).deleteWithChecks();
     }
 
     public void testUnregisterExchangeWhenExchangeDoesNotExist() throws Exception
@@ -203,7 +203,7 @@ public class VirtualHostManagerMBeanTest
             assertEquals("No such exchange \"unknownexchange\"", oe.getMessage());
         }
 
-        verify(mockExchange, never()).delete();
+        verify(mockExchange, never()).deleteWithChecks();
     }
 
     private static Map<String,Object> matchesMap(final String name,

Modified: qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkConnection.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkConnection.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkConnection.java (original)
+++ qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkConnection.java Thu May  8 13:14:05 2014
@@ -28,12 +28,13 @@ import java.security.Principal;
 import javax.net.ssl.SSLPeerUnverifiedException;
 import javax.net.ssl.SSLSocket;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.qpid.transport.Receiver;
 import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.network.Ticker;
 import org.apache.qpid.transport.network.NetworkConnection;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.qpid.transport.network.Ticker;
 
 public class IoNetworkConnection implements NetworkConnection
 {
@@ -59,7 +60,7 @@ public class IoNetworkConnection impleme
 
         _ioSender = new IoSender(_socket, 2 * sendBufferSize, _timeout);
 
-        _ioSender.registerCloseListener(_ioReceiver);
+        _ioSender.setReceiver(_ioReceiver);
 
     }
 

Modified: qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java (original)
+++ qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java Thu May  8 13:14:05 2014
@@ -20,15 +20,6 @@
  */
 package org.apache.qpid.transport.network.io;
 
-import org.apache.qpid.common.Closeable;
-import org.apache.qpid.thread.Threading;
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.TransportException;
-import org.apache.qpid.transport.network.Ticker;
-import org.apache.qpid.transport.util.Logger;
-import org.apache.qpid.util.SystemUtils;
-
-import javax.net.ssl.SSLSocket;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.Socket;
@@ -37,12 +28,21 @@ import java.net.SocketTimeoutException;
 import java.nio.ByteBuffer;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import javax.net.ssl.SSLSocket;
+
+import org.apache.qpid.thread.Threading;
+import org.apache.qpid.transport.Receiver;
+import org.apache.qpid.transport.TransportException;
+import org.apache.qpid.transport.network.Ticker;
+import org.apache.qpid.transport.util.Logger;
+import org.apache.qpid.util.SystemUtils;
+
 /**
  * IoReceiver
  *
  */
 
-final class IoReceiver implements Runnable, Closeable
+final class IoReceiver implements Runnable
 {
 
     private static final Logger log = Logger.get(IoReceiver.class);

Modified: qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java (original)
+++ qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java Thu May  8 13:14:05 2014
@@ -18,24 +18,21 @@
  */
 package org.apache.qpid.transport.network.io;
 
-import org.apache.qpid.common.Closeable;
-import org.apache.qpid.thread.Threading;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.SenderClosedException;
-import org.apache.qpid.transport.SenderException;
-import org.apache.qpid.transport.TransportException;
-import org.apache.qpid.transport.util.Logger;
-
 import static org.apache.qpid.transport.util.Functions.mod;
 
 import java.io.IOException;
 import java.io.OutputStream;
 import java.net.Socket;
 import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.qpid.thread.Threading;
+import org.apache.qpid.transport.Sender;
+import org.apache.qpid.transport.SenderClosedException;
+import org.apache.qpid.transport.SenderException;
+import org.apache.qpid.transport.TransportException;
+import org.apache.qpid.transport.util.Logger;
+
 
 public final class IoSender implements Runnable, Sender<ByteBuffer>
 {
@@ -59,7 +56,7 @@ public final class IoSender implements R
     private final Object notEmpty = new Object();
     private final AtomicBoolean closed = new AtomicBoolean(false);
     private final Thread senderThread;
-    private final List<Closeable> _listeners = new ArrayList<Closeable>();
+    private IoReceiver _receiver;
     private final String _remoteSocketAddress;
 
     private volatile Throwable exception = null;
@@ -222,7 +219,7 @@ public final class IoSender implements R
             }
             finally
             {
-                closeListeners();
+                closeReceiver();
             }
             if (reportException && exception != null)
             {
@@ -231,26 +228,20 @@ public final class IoSender implements R
         }
     }
 
-    private void closeListeners()
+    private void closeReceiver()
     {
-        Exception ex = null;
-        for(Closeable listener : _listeners)
+        if(_receiver != null)
         {
             try
             {
-                listener.close();
+                _receiver.close();
             }
-            catch(Exception e)
+            catch(RuntimeException e)
             {
-                log.error(e, "Exception closing listener for socket %s", _remoteSocketAddress);
-                ex = e;
+                log.error(e, "Exception closing receiver for socket %s", _remoteSocketAddress);
+                throw new SenderException(e.getMessage(), e);
             }
         }
-
-        if (ex != null)
-        {
-            throw new SenderException(ex.getMessage(), ex);
-        }
     }
 
     public void run()
@@ -337,9 +328,9 @@ public final class IoSender implements R
         }
     }
 
-    public void registerCloseListener(Closeable listener)
+    public void setReceiver(IoReceiver receiver)
     {
-        _listeners.add(listener);
+        _receiver = receiver;
     }
 
     private void awaitSenderThreadShutdown()

Modified: qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/transport/network/io/IoTransport.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/transport/network/io/IoTransport.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/transport/network/io/IoTransport.java (original)
+++ qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/transport/network/io/IoTransport.java Thu May  8 13:14:05 2014
@@ -19,13 +19,13 @@
 
 package org.apache.qpid.transport.network.io;
 
+import java.net.Socket;
+import java.nio.ByteBuffer;
+
 import org.apache.qpid.transport.Binding;
 import org.apache.qpid.transport.Sender;
 import org.apache.qpid.transport.util.Logger;
 
-import java.net.Socket;
-import java.nio.ByteBuffer;
-
 /**
  * This class provides a socket based transport using the java.io
  * classes.
@@ -70,7 +70,7 @@ public final class IoTransport<E>
                                        2*readBufferSize, timeout);
         this.receiver.initiate();
 
-        ios.registerCloseListener(this.receiver);
+        ios.setReceiver(this.receiver);
     }
 
     public Sender<ByteBuffer> getSender()

Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/client/AsynchMessageListenerTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/client/AsynchMessageListenerTest.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/client/AsynchMessageListenerTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/client/AsynchMessageListenerTest.java Thu May  8 13:14:05 2014
@@ -46,7 +46,7 @@ public class AsynchMessageListenerTest e
     private static final int MSG_COUNT = 10;
     private static final long AWAIT_MESSAGE_TIMEOUT = 2000;
     private static final long AWAIT_MESSAGE_TIMEOUT_NEGATIVE = 250;
-    private final String _testQueueName = getTestQueueName();
+    private String _testQueueName;
     private Connection _consumerConnection;
     private Session _consumerSession;
     private MessageConsumer _consumer;
@@ -55,7 +55,7 @@ public class AsynchMessageListenerTest e
     protected void setUp() throws Exception
     {
         super.setUp();
-
+        _testQueueName = getTestQueueName();
         _consumerConnection = getConnection();
         _consumerConnection.start();
         _consumerSession = _consumerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);

Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/store/VirtualHostMessageStoreTest.java Thu May  8 13:14:05 2014
@@ -138,7 +138,7 @@ public class VirtualHostMessageStoreTest
         nodeAttributes.put(VirtualHostNode.NAME, hostName);
         nodeAttributes.put(VirtualHostNode.ID, UUID.randomUUID());
         _node = factory.create(VirtualHostNode.class, nodeAttributes, broker);
-        _node.setDesiredState(State.ACTIVE);
+        _node.start();
 
         _virtualHost = (VirtualHostImpl<?,?,?>)_node.getVirtualHost();
 
@@ -152,7 +152,7 @@ public class VirtualHostMessageStoreTest
             if (_virtualHost != null)
             {
                 VirtualHostNode<?> node = _virtualHost.getParent(VirtualHostNode.class);
-                node.setDesiredState(State.STOPPED);
+                node.close();
             }
         }
         finally
@@ -165,10 +165,12 @@ public class VirtualHostMessageStoreTest
     protected void reloadVirtualHost()
     {
         assertEquals("Virtual host node is not active", State.ACTIVE, _virtualHost.getState());
-        State currentState = _node.setDesiredState(State.STOPPED);
+        _node.stop();
+        State currentState = _node.getState();
         assertEquals("Virtual host node is not stopped", State.STOPPED, currentState);
 
-        currentState = _node.setDesiredState(State.ACTIVE);
+        _node.start();
+        currentState = _node.getState();
         assertEquals("Virtual host node is not active", State.ACTIVE, currentState);
         _virtualHost = (VirtualHostImpl<?, ?, ?>) _node.getVirtualHost();
     }

Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ExchangeRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ExchangeRestTest.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ExchangeRestTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ExchangeRestTest.java Thu May  8 13:14:05 2014
@@ -70,7 +70,7 @@ public class ExchangeRestTest extends Qp
         }
     }
 
-    public void testSetExchangeAttributesUnsupported() throws Exception
+    public void testSetExchangeSupported() throws Exception
     {
         String exchangeName = getTestName();
         String exchangeUrl = "exchange/test/test/" + exchangeName;
@@ -89,7 +89,10 @@ public class ExchangeRestTest extends Qp
         attributes.put(Exchange.ALTERNATE_EXCHANGE, "amq.direct");
 
         responseCode = getRestTestHelper().submitRequest(exchangeUrl, "PUT", attributes);
-        assertEquals("Exchange update should be unsupported", 409, responseCode);
+        assertEquals("Exchange update should be supported", 200, responseCode);
+        exchange = getRestTestHelper().getJsonAsSingletonList(exchangeUrl);
+        assertNotNull("Exchange not found", exchange);
+        assertEquals("amq.direct",exchange.get(Exchange.ALTERNATE_EXCHANGE));
     }
 
     private void assertExchange(String exchangeName, Map<String, Object> exchange)

Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PortRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PortRestTest.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PortRestTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PortRestTest.java Thu May  8 13:14:05 2014
@@ -20,6 +20,7 @@
  */
 package org.apache.qpid.systest.rest;
 
+import java.net.ServerSocket;
 import java.net.URLDecoder;
 import java.util.Arrays;
 import java.util.Collection;
@@ -31,15 +32,18 @@ import java.util.Map;
 
 import org.apache.qpid.server.BrokerOptions;
 import org.apache.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.model.Plugin;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.Protocol;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.Transport;
+import org.apache.qpid.server.model.port.JmxPort;
 import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager;
 import org.apache.qpid.test.utils.TestBrokerConfiguration;
 
 public class PortRestTest extends QpidRestTestCase
 {
+
     public void testGet() throws Exception
     {
         List<Map<String, Object>> ports = getRestTestHelper().getJsonAsList("port/");
@@ -99,38 +103,65 @@ public class PortRestTest extends QpidRe
 
     public void testPutRmiPortWithMinimumAttributes() throws Exception
     {
-        String portName = "test-port";
+        String portNameRMI = "test-port-rmi";
         Map<String, Object> attributes = new HashMap<String, Object>();
-        attributes.put(Port.NAME, portName);
-        attributes.put(Port.PORT, findFreePort());
+        attributes.put(Port.NAME, portNameRMI);
+        int rmiPort = findFreePort();
+        attributes.put(Port.PORT, rmiPort);
         attributes.put(Port.PROTOCOLS, Collections.singleton(Protocol.RMI));
 
-        int responseCode = getRestTestHelper().submitRequest("port/" + portName, "PUT", attributes);
+        int responseCode = getRestTestHelper().submitRequest("port/" + portNameRMI, "PUT", attributes);
         assertEquals("Unexpected response code", 201, responseCode);
 
-        List<Map<String, Object>> portDetails = getRestTestHelper().getJsonAsList("port/" + portName);
+
+        List<Map<String, Object>> portDetails = getRestTestHelper().getJsonAsList("port/" + portNameRMI);
         assertNotNull("Port details cannot be null", portDetails);
-        assertEquals("Unexpected number of ports with name " + portName, 1, portDetails.size());
+        assertEquals("Unexpected number of ports with name " + portNameRMI, 1, portDetails.size());
         Map<String, Object> port = portDetails.get(0);
         Asserts.assertPortAttributes(port, State.QUIESCED);
 
+        String portNameJMX = "test-port-jmx";
+        attributes = new HashMap<String, Object>();
+        attributes.put(Port.NAME, portNameJMX);
+        attributes.put(Port.PORT, getNextAvailable(rmiPort + 1));
+        attributes.put(Port.PROTOCOLS, Collections.singleton(Protocol.JMX_RMI));
+        attributes.put(JmxPort.AUTHENTICATION_PROVIDER, TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER);
+
+        responseCode = getRestTestHelper().submitRequest("port/" + portNameJMX, "PUT", attributes);
+        assertEquals("Unexpected response code", 201, responseCode);
+
+
+        portDetails = getRestTestHelper().getJsonAsList("port/" + portNameJMX);
+        assertNotNull("Port details cannot be null", portDetails);
+        assertEquals("Unexpected number of ports with name " + portNameRMI, 1, portDetails.size());
+        port = portDetails.get(0);
+        Asserts.assertPortAttributes(port, State.QUIESCED);
+
+
+        attributes.put(Plugin.TYPE, "MANAGEMENT-JMX");
+        attributes.put(Plugin.NAME, "JmxPlugin");
+        responseCode = getRestTestHelper().submitRequest("plugin/JmxPlugin", "PUT", attributes);
+        assertEquals("Unexpected response code", 201, responseCode);
+
+
+
         // make sure that port is there after broker restart
         restartBroker();
 
-        portDetails = getRestTestHelper().getJsonAsList("port/" + portName);
+        portDetails = getRestTestHelper().getJsonAsList("port/" + portNameRMI);
         assertNotNull("Port details cannot be null", portDetails);
-        assertEquals("Unexpected number of ports with name " + portName, 1, portDetails.size());
+        assertEquals("Unexpected number of ports with name " + portNameRMI, 1, portDetails.size());
         port = portDetails.get(0);
         Asserts.assertPortAttributes(port, State.ACTIVE);
 
         // try to add a second RMI port
-        portName = portName + "2";
+        portNameRMI = portNameRMI + "2";
         attributes = new HashMap<String, Object>();
-        attributes.put(Port.NAME, portName);
+        attributes.put(Port.NAME, portNameRMI);
         attributes.put(Port.PORT, findFreePort());
         attributes.put(Port.PROTOCOLS, Collections.singleton(Protocol.RMI));
 
-        responseCode = getRestTestHelper().submitRequest("port/" + portName, "PUT", attributes);
+        responseCode = getRestTestHelper().submitRequest("port/" + portNameRMI, "PUT", attributes);
         assertEquals("Adding of a second RMI port should fail", 409, responseCode);
     }
 
@@ -301,25 +332,28 @@ public class PortRestTest extends QpidRe
         Asserts.assertPortAttributes(portData, State.QUIESCED);
     }
 
-    public void testNewPortQuiescedIfPortNumberWasUsed() throws Exception
+    public void testNewPortErroredIfPortNumberInUse() throws Exception
     {
         String ampqPortName = TestBrokerConfiguration.ENTRY_NAME_AMQP_PORT;
         Map<String, Object> portData = getRestTestHelper().getJsonAsSingletonList("port/" + URLDecoder.decode(ampqPortName, "UTF-8"));
         int amqpPort = (Integer)portData.get(Port.PORT);
 
+        ServerSocket socket = new ServerSocket(0);
+        int occupiedPort = socket.getLocalPort();
+
         int deleteResponseCode = getRestTestHelper().submitRequest("port/" + ampqPortName, "DELETE");
         assertEquals("Port deletion should be allowed", 200, deleteResponseCode);
 
         String newPortName = "reused-port";
         Map<String, Object> attributes = new HashMap<String, Object>();
         attributes.put(Port.NAME, newPortName);
-        attributes.put(Port.PORT, amqpPort);  // reuses port that was previously in use
+        attributes.put(Port.PORT, occupiedPort);  // port in use
         attributes.put(Port.AUTHENTICATION_PROVIDER, TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER);
 
         int responseCode = getRestTestHelper().submitRequest("port/" + newPortName, "PUT", attributes);
         assertEquals("Unexpected response code for port creation", 201, responseCode);
 
         portData = getRestTestHelper().getJsonAsSingletonList("port/" + URLDecoder.decode(newPortName, "UTF-8"));
-        Asserts.assertPortAttributes(portData, State.QUIESCED);
+        Asserts.assertPortAttributes(portData, State.ERRORED);
     }
 }

Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java Thu May  8 13:14:05 2014
@@ -29,20 +29,20 @@ import java.util.Map;
 import javax.jms.Session;
 import javax.servlet.http.HttpServletResponse;
 
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.map.JsonMappingException;
+
 import org.apache.qpid.client.AMQConnection;
 import org.apache.qpid.server.model.Exchange;
 import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.queue.LastValueQueue;
 import org.apache.qpid.server.queue.PriorityQueue;
 import org.apache.qpid.server.queue.SortedQueue;
-import org.apache.qpid.server.virtualhost.AbstractVirtualHost;
-
-import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.apache.qpid.server.virtualhost.AbstractVirtualHost;
 import org.apache.qpid.util.FileUtils;
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.map.JsonMappingException;
 
 public class VirtualHostRestTest extends QpidRestTestCase
 {
@@ -147,7 +147,7 @@ public class VirtualHostRestTest extends
         assertEquals("Host should be deleted", 1, hosts.size());
     }
 
-    public void testUpdateActiveHostFails() throws Exception
+    public void testUpdateActiveHost() throws Exception
     {
         String hostToUpdate = TEST3_VIRTUALHOST;
         String restHostUrl = "virtualhost/" + hostToUpdate + "/" + hostToUpdate;
@@ -156,16 +156,16 @@ public class VirtualHostRestTest extends
 
         Map<String, Object> newAttributes = new HashMap<String, Object>();
         newAttributes.put(VirtualHost.NAME, hostToUpdate);
-        newAttributes.put("fakeAttribute", "value");
+        newAttributes.put(VirtualHost.DESCRIPTION, "This is a virtual host");
 
         int response = getRestTestHelper().submitRequest(restHostUrl, "PUT", newAttributes);
-        assertEquals("Unexpected response code", 409, response);
+        assertEquals("Unexpected response code", 200, response);
 
         restartBroker();
 
         Map<String, Object> rereadHostDetails = getRestTestHelper().getJsonAsSingletonList(restHostUrl);
         Asserts.assertVirtualHost(hostToUpdate, rereadHostDetails);
-        assertFalse(rereadHostDetails.containsKey("fakeAttribute"));
+        assertEquals("This is a virtual host", rereadHostDetails.get(VirtualHost.DESCRIPTION));
     }
 
     public void testPutCreateQueue() throws Exception

Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java Thu May  8 13:14:05 2014
@@ -836,7 +836,7 @@ public class BrokerACLTest extends QpidR
         assertAccessControlProviderExistence(accessControlProviderName, false);
     }
 
-    public void testSetAccessControlProviderAttributesAllowedButUnsupported() throws Exception
+    public void testSetAccessControlProviderAttributesAllowed() throws Exception
     {
         getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
 
@@ -854,7 +854,7 @@ public class BrokerACLTest extends QpidR
         attributes.put(GroupProvider.TYPE, FileBasedGroupProviderImpl.GROUP_FILE_PROVIDER_TYPE);
         attributes.put(FileBasedGroupProvider.PATH, "/path/to/file");
         responseCode = getRestTestHelper().submitRequest("accesscontrolprovider/" + accessControlProviderName, "PUT", attributes);
-        assertEquals("Setting of access control provider attributes should be allowed but not supported", 409, responseCode);
+        assertEquals("Setting of access control provider attributes should be allowed", 200, responseCode);
     }
 
     public void testSetAccessControlProviderAttributesDenied() throws Exception

Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java Thu May  8 13:14:05 2014
@@ -753,7 +753,7 @@ public class QpidBrokerTestCase extends 
         }
         if (exceptionOccured)
         {
-            throw new RuntimeException("Exception occured on stopping of test broker. Please, examine logs for details");
+            throw new RuntimeException("Exception occurred on stopping of test broker. Please, examine logs for details");
         }
     }
 

Modified: qpid/trunk/qpid/java/test-profiles/JavaTransientExcludes
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/test-profiles/JavaTransientExcludes?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/java/test-profiles/JavaTransientExcludes (original)
+++ qpid/trunk/qpid/java/test-profiles/JavaTransientExcludes Thu May  8 13:14:05 2014
@@ -50,3 +50,5 @@ org.apache.qpid.systest.management.jmx.Q
 org.apache.qpid.systest.management.jmx.QueueManagementTest#testCopyMessageBetweenQueuesWithBrokerRestart
 
 org.apache.qpid.test.unit.client.MaxDeliveryCountTest#testWhenBrokerIsRestartedAfterEnqeuingMessages
+
+org.apache.qpid.systest.rest.VirtualHostRestTest#testUpdateActiveHost

Modified: qpid/trunk/qpid/tools/src/java/qpid-broker-plugins-management-qmf2/src/main/java/org/apache/qpid/server/qmf2/QmfManagementPluginImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/qpid-broker-plugins-management-qmf2/src/main/java/org/apache/qpid/server/qmf2/QmfManagementPluginImpl.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/tools/src/java/qpid-broker-plugins-management-qmf2/src/main/java/org/apache/qpid/server/qmf2/QmfManagementPluginImpl.java (original)
+++ qpid/trunk/qpid/tools/src/java/qpid-broker-plugins-management-qmf2/src/main/java/org/apache/qpid/server/qmf2/QmfManagementPluginImpl.java Thu May  8 13:14:05 2014
@@ -36,6 +36,7 @@ import org.apache.qpid.server.model.Life
 import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
 import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.StateTransition;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.model.adapter.AbstractPluginAdapter;
@@ -122,33 +123,6 @@ public class QmfManagementPluginImpl ext
         _defaultVirtualHost = _broker.getDefaultVirtualHost();
     }
 
-    /**
-     * Set the state of the Plugin, I believe that this is called from the BrokerAdapter object when it
-     * has its own state set to State.ACTIVE or State.STOPPED.
-     * When State.ACTIVE is set this calls the start() method to startup the Plugin, when State.STOPPED
-     * is set this calls the stop() method to shutdown the Plugin.
-     * @param desiredState the desired state of the Plugin (either State.ACTIVE or State.STOPPED).
-     * @return true if a valid state has been set, otherwise false.
-     */
-    @Override // From org.apache.qpid.server.model.adapter.AbstractAdapter
-    protected boolean setState(State desiredState)
-    {
-        if (desiredState == State.ACTIVE)
-        {
-            start();
-            return true;
-        }
-        else if (desiredState == State.STOPPED)
-        {
-            stop();
-            return true;
-        }
-        else
-        {
-            _log.info("QmfManagementPlugin.setState() received invalid desiredState {}", desiredState);
-            return false;
-        }
-    }
 
     /**
      * Start the Plugin. Note that we bind the QMF Connection the the default Virtual Host, this is important
@@ -159,7 +133,8 @@ public class QmfManagementPluginImpl ext
      * as these don't exist by default on the Java Broker, however we have to check if they already exist
      * as attempting to add an Exchange that already exists will cause IllegalArgumentException.
      */
-    private void start()
+    @StateTransition( currentState = State.UNINITIALIZED, desiredState = State.ACTIVE )
+    private void doStart()
     {
         // Log "QMF2 Management Startup" message.
         getBroker().getEventLogger().message(ManagementConsoleMessages.STARTUP(OPERATIONAL_LOGGING_NAME));
@@ -232,7 +207,8 @@ public class QmfManagementPluginImpl ext
     /**
      * Stop the Plugin, closing the QMF Connection and logging "QMF2 Management Stopped".
      */
-    private void stop()
+    @StateTransition( currentState = State.ACTIVE, desiredState = State.STOPPED )
+    private void doStop()
     {
         // When the Plugin state gets set to STOPPED we close the QMF Connection.
         if (_agent != null)

Modified: qpid/trunk/qpid/tools/src/java/qpid-broker-plugins-management-qmf2/src/main/java/org/apache/qpid/server/qmf2/agentdata/Broker.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/qpid-broker-plugins-management-qmf2/src/main/java/org/apache/qpid/server/qmf2/agentdata/Broker.java?rev=1593264&r1=1593263&r2=1593264&view=diff
==============================================================================
--- qpid/trunk/qpid/tools/src/java/qpid-broker-plugins-management-qmf2/src/main/java/org/apache/qpid/server/qmf2/agentdata/Broker.java (original)
+++ qpid/trunk/qpid/tools/src/java/qpid-broker-plugins-management-qmf2/src/main/java/org/apache/qpid/server/qmf2/agentdata/Broker.java Thu May  8 13:14:05 2014
@@ -650,7 +650,7 @@ System.out.println("properties = " + pro
                             Queue queue = nameParser.getQueue();
                             if (queue != null)
                             {
-                                queue.delete();
+                                queue.deleteAndReturnCount();
                             }
                         }
                         else if (type.equals("binding")) // delete binding.



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