Author: kwall
Date: Sat May 30 17:56:06 2015
New Revision: 1682631

URL: http://svn.apache.org/r1682631
Log:
QPID-6443: [Java Broker] Replace the defaultVirtualHost (at Broker) with 
defaultVirtualHostNode flag (at VHN)

* Moved attribute from Broker to VirtualHostNode
* Updated broker store upgrader to upgrade older config (if possible)
* Updated the UI - user now uses Edit VHN function to update the flag.  VHN/VH 
table on the Broker tab now shows the default VHN

Added:
    
qpid/java/trunk/broker-plugins/memory-store/src/main/java/resources/js/qpid/management/virtualhostnode/memory/edit.js
      - copied, changed from r1682487, 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/show.js
Modified:
    
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/DefaultVirtualHostAliasImpl.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostNodeImpl.java
    qpid/java/trunk/broker-core/src/main/resources/initial-config.json
    
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
    
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java
    
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java
    
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
    
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java
    
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
    
qpid/java/trunk/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhostnode/derby/show.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editBroker.html
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/show.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showBroker.html
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHostNode.html
    
qpid/java/trunk/broker-plugins/memory-store/src/main/java/resources/js/qpid/management/virtualhostnode/memory/show.js
    qpid/java/trunk/systests/etc/config-systests.json
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/AnonymousAccessRestTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java

Modified: 
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
 (original)
+++ 
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
 Sat May 30 17:56:06 2015
@@ -514,7 +514,7 @@ public class BDBHAVirtualHostNodeImpl ex
     }
 
     @Override
-    public void validateOnCreate()
+    protected void validateOnCreate()
     {
         super.validateOnCreate();
 

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
 Sat May 30 17:56:06 2015
@@ -37,7 +37,6 @@ public interface Broker<X extends Broker
     String PLATFORM = "platform";
     String PROCESS_PID = "processPid";
     String PRODUCT_VERSION = "productVersion";
-    String DEFAULT_VIRTUAL_HOST = "defaultVirtualHost";
     String STATISTICS_REPORTING_PERIOD = "statisticsReportingPeriod";
     String STATISTICS_REPORTING_RESET_ENABLED = 
"statisticsReportingResetEnabled";
     String STORE_PATH = "storePath";
@@ -103,9 +102,6 @@ public interface Broker<X extends Broker
     @DerivedAttribute
     String getProductVersion();
 
-    @ManagedAttribute
-    String getDefaultVirtualHost();
-
     @ManagedAttribute( defaultValue = "256" )
     int getConnection_sessionCountLimit();
 
@@ -175,6 +171,8 @@ public interface Broker<X extends Broker
 
     VirtualHost<?,?,?> findVirtualHostByName(String name);
 
+    VirtualHostNode findDefautVirtualHostNode();
+
     Collection<KeyStore<?>> getKeyStores();
 
     Collection<TrustStore<?>> getTrustStores();

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
 Sat May 30 17:56:06 2015
@@ -47,6 +47,7 @@ public final class BrokerModel extends M
      *            supportedPreferencesProviderTypes, 
VH#supportedExchangeTypes, VH#supportedQueueTypes
      *     Renamed FileTrustStore/FileKeyStore.path => 
FileTrustStore/FileKeyStore.storeUrl
      * 3.1 Add BrokerLogger as a child of Broker
+     *     Replace the defaultVirtualHost (at Broker) with 
defaultVirtualHostNode flag (at VHN)
      */
     public static final int MODEL_MAJOR_VERSION = 3;
     public static final int MODEL_MINOR_VERSION = 1;

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java
 Sat May 30 17:56:06 2015
@@ -31,6 +31,7 @@ public interface VirtualHostNode<X exten
     @ManagedContextDefault(name = QPID_INITIAL_CONFIG_VIRTUALHOST_CONFIG_VAR)
     String DEFAULT_INITIAL_CONFIG_VIRTUALHOST_CONFIG_VAR = "{ \"type\" : 
\"DERBY\" }";
 
+    String DEFAULT_VIRTUAL_HOST_NODE = "defaultVirtualHostNode";
 
     String VIRTUALHOST_INITIAL_CONFIGURATION = 
"virtualHostInitialConfiguration";
 
@@ -39,6 +40,9 @@ public interface VirtualHostNode<X exten
     @ManagedContextDefault(name = VIRTUALHOST_BLUEPRINT_CONTEXT_VAR)
     String DEFAULT_INITIAL_CONFIGURATION = "{}";
 
+    @ManagedAttribute( defaultValue = "false")
+    boolean isDefaultVirtualHostNode();
+
     @ManagedAttribute( defaultValue = "${" + VIRTUALHOST_BLUEPRINT_CONTEXT_VAR 
+ "}")
     String getVirtualHostInitialConfiguration();
 
@@ -52,4 +56,5 @@ public interface VirtualHostNode<X exten
     void stop();
 
     void start();
+
 }

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 Sat May 30 17:56:06 2015
@@ -22,6 +22,7 @@ package org.apache.qpid.server.model.ada
 
 import java.security.AccessControlException;
 import java.security.PrivilegedAction;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -33,7 +34,6 @@ import java.util.regex.Pattern;
 
 import javax.security.auth.Subject;
 
-import ch.qos.logback.classic.Level;
 import ch.qos.logback.classic.spi.ILoggingEvent;
 import ch.qos.logback.core.Appender;
 import ch.qos.logback.core.FileAppender;
@@ -94,8 +94,6 @@ public class BrokerAdapter extends Abstr
     private boolean _totalMessageSizeExceedThresholdReported = false,  
_totalMessageSizeWithinThresholdReported = true;
 
     @ManagedAttributeField
-    private String _defaultVirtualHost;
-    @ManagedAttributeField
     private int _connection_sessionCountLimit;
     @ManagedAttributeField
     private int _connection_heartBeatDelay;
@@ -246,20 +244,6 @@ public class BrokerAdapter extends Abstr
             throw new IllegalConfigurationException("Cannot change the model 
version");
         }
 
-        if(changedAttributes.contains(DEFAULT_VIRTUAL_HOST))
-        {
-            String defaultVirtualHost = updated.getDefaultVirtualHost();
-            if (defaultVirtualHost != null)
-            {
-                VirtualHost foundHost = 
findVirtualHostByName(defaultVirtualHost);
-                if (foundHost == null)
-                {
-                    throw new IllegalConfigurationException("Virtual host with 
name " + defaultVirtualHost
-                                                            + " cannot be set 
as a default as it does not exist");
-                }
-            }
-        }
-
         for (String attributeName : POSITIVE_NUMERIC_ATTRIBUTES)
         {
             if(changedAttributes.contains(attributeName))
@@ -395,12 +379,6 @@ public class BrokerAdapter extends Abstr
     }
 
     @Override
-    public String getDefaultVirtualHost()
-    {
-        return _defaultVirtualHost;
-    }
-
-    @Override
     public int getConnection_sessionCountLimit()
     {
         return _connection_sessionCountLimit;
@@ -657,6 +635,22 @@ public class BrokerAdapter extends Abstr
     }
 
     @Override
+    public VirtualHostNode findDefautVirtualHostNode()
+    {
+        VirtualHostNode existingDefault = null;
+        Collection<VirtualHostNode<?>> virtualHostNodes = new 
ArrayList<>(getVirtualHostNodes());
+        for(VirtualHostNode node : virtualHostNodes)
+        {
+            if (node.isDefaultVirtualHostNode())
+            {
+                existingDefault = node;
+                break;
+            }
+        }
+        return existingDefault;
+    }
+
+    @Override
     public Collection<KeyStore<?>> getKeyStores()
     {
         Collection children = getChildren(KeyStore.class);

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
 Sat May 30 17:56:06 2015
@@ -27,8 +27,12 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.UUID;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import 
org.apache.qpid.server.configuration.store.StoreConfigurationChangeListener;
 import org.apache.qpid.server.logging.LogLevel;
@@ -41,6 +45,8 @@ import org.apache.qpid.server.util.Actio
 
 public class BrokerStoreUpgraderAndRecoverer
 {
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(BrokerStoreUpgraderAndRecoverer.class);
+
     public static final String VIRTUALHOSTS = "virtualhosts";
     private final SystemConfig<?> _systemConfig;
     private final Map<String, StoreUpgraderPhase> _upgraders = new 
HashMap<String, StoreUpgraderPhase>();
@@ -314,6 +320,10 @@ public class BrokerStoreUpgraderAndRecov
     }
     private class Upgrader_3_0_to_3_1 extends StoreUpgraderPhase
     {
+        private String _defaultVirtualHost;
+        private final Set<ConfiguredObjectRecord> _knownBdbHaVirtualHostNode = 
new HashSet<>();
+        private final Map<String, ConfiguredObjectRecord> 
_knownNonBdbHaVirtualHostNode = new HashMap<>();
+
         public Upgrader_3_0_to_3_1()
         {
             super("modelVersion", "3.0", "3.1");
@@ -325,12 +335,37 @@ public class BrokerStoreUpgraderAndRecov
             if (record.getType().equals("Broker"))
             {
                 record = upgradeRootRecord(record);
+
+                Map<String, Object> brokerAttributes = new 
HashMap<>(record.getAttributes());
+                _defaultVirtualHost = 
(String)brokerAttributes.remove("defaultVirtualHost");
+
+                if (_defaultVirtualHost != null)
+                {
+                    record = new ConfiguredObjectRecordImpl(record.getId(),
+                                                            record.getType(),
+                                                            brokerAttributes,
+                                                            
record.getParents());
+                    getUpdateMap().put(record.getId(), record);
+                }
+
                 addMemoryLogger(record);
                 addFileLogger(record);
                 getNextUpgrader().configuredObject(record);
-
             }
+            else if (record.getType().equals("VirtualHostNode"))
+            {
+                if ("BDB_HA".equals(record.getAttributes().get("type")))
+                {
+                    _knownBdbHaVirtualHostNode.add(record);
+                }
+                else
+                {
+                    String nodeName = (String) 
record.getAttributes().get("name");
+                    _knownNonBdbHaVirtualHostNode.put(nodeName, record);
+                }
+                getNextUpgrader().configuredObject(record);
 
+            }
         }
 
         private void addMemoryLogger(final ConfiguredObjectRecord record)
@@ -388,6 +423,42 @@ public class BrokerStoreUpgraderAndRecov
         @Override
         public void complete()
         {
+            if (_defaultVirtualHost != null)
+            {
+                final ConfiguredObjectRecord defaultVirtualHostNode;
+                if 
(_knownNonBdbHaVirtualHostNode.containsKey(_defaultVirtualHost))
+                {
+                    defaultVirtualHostNode = 
_knownNonBdbHaVirtualHostNode.get(_defaultVirtualHost);
+                }
+                else if (_knownBdbHaVirtualHostNode.size() == 1)
+                {
+                    // We had a default VHN but it didn't match the 
non-BDBHAVHNs and we have only one BDBHAVHN.
+                    // It has to be the target.
+                    defaultVirtualHostNode = 
_knownBdbHaVirtualHostNode.iterator().next();
+
+                }
+                else
+                {
+                    LOGGER.warn("Unable to identify the target virtual host 
node for old default virtualhost name : '{}'",
+                                _defaultVirtualHost);
+                    defaultVirtualHostNode = null;
+                }
+
+                if (defaultVirtualHostNode != null)
+                {
+                    final Map<String, Object> updatedAttributes = new 
HashMap<>(defaultVirtualHostNode.getAttributes());
+                    updatedAttributes.put("defaultVirtualHostNode", "true");
+
+                    ConfiguredObjectRecordImpl updateRecord =
+                            new 
ConfiguredObjectRecordImpl(defaultVirtualHostNode.getId(),
+                                                           
defaultVirtualHostNode.getType(),
+                                                           updatedAttributes,
+                                                           
defaultVirtualHostNode.getParents());
+                    getUpdateMap().put(updateRecord.getId(), updateRecord);
+
+                }
+
+            }
             getNextUpgrader().complete();
         }
 

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 Sat May 30 17:56:06 2015
@@ -246,14 +246,7 @@ public abstract class AbstractVirtualHos
         {
             throw new IllegalArgumentException(getClass().getSimpleName() + " 
must be durable");
         }
-        if (changedAttributes.contains(DESIRED_STATE))
-        {
-            if (State.DELETED == proxyForValidation.getDesiredState()
-                && getName().equals(_broker.getDefaultVirtualHost()))
-            {
-                throw new IntegrityViolationException("Cannot delete default 
virtual host '" + getName() + "'");
-            }
-        }
+
         if(changedAttributes.contains(GLOBAL_ADDRESS_DOMAINS))
         {
             VirtualHost<?, ?, ?> virtualHost = (VirtualHost<?, ?, ?>) 
proxyForValidation;

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/DefaultVirtualHostAliasImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/DefaultVirtualHostAliasImpl.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/DefaultVirtualHostAliasImpl.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/DefaultVirtualHostAliasImpl.java
 Sat May 30 17:56:06 2015
@@ -26,7 +26,6 @@ import org.apache.qpid.server.model.Brok
 import org.apache.qpid.server.model.DefaultVirtualHostAlias;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
 import org.apache.qpid.server.model.Port;
-import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.VirtualHostNode;
 
 public final class DefaultVirtualHostAliasImpl
@@ -46,17 +45,8 @@ public final class DefaultVirtualHostAli
         if(name == null || name.trim().equals(""))
         {
             Broker<?> broker = getPort().getParent(Broker.class);
-            String defaultHostName = broker.getDefaultVirtualHost();
-            for(VirtualHostNode<?> vhn : broker.getVirtualHostNodes())
-            {
-                VirtualHost vh = vhn.getVirtualHost();
-
-                if(vh != null && vh.getName().equals(defaultHostName))
-                {
-                    return vhn;
-                }
-            }
-
+            VirtualHostNode defaultVirtualHostNode = 
broker.findDefautVirtualHostNode();
+            return defaultVirtualHostNode != null && 
defaultVirtualHostNode.getVirtualHost() != null ? defaultVirtualHostNode : null;
         }
         return null;
     }

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java
 Sat May 30 17:56:06 2015
@@ -42,7 +42,6 @@ import org.apache.qpid.server.model.Brok
 import org.apache.qpid.server.model.HostNameAlias;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
 import org.apache.qpid.server.model.Port;
-import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.model.port.AmqpPort;
 
@@ -88,15 +87,8 @@ public class HostNameAliasImpl
             if(node == null)
             {
                 Broker<?> broker = getPort().getParent(Broker.class);
-                String defaultHostName = broker.getDefaultVirtualHost();
-                for (VirtualHostNode<?> vhn : broker.getVirtualHostNodes())
-                {
-                    VirtualHost vh = vhn.getVirtualHost();
-                    if (vh != null && vh.getName().equals(defaultHostName))
-                    {
-                        return vhn;
-                    }
-                }
+                VirtualHostNode defaultVirtualHostNode = 
broker.findDefautVirtualHostNode();
+                return defaultVirtualHostNode != null && 
defaultVirtualHostNode.getVirtualHost() != null ? defaultVirtualHostNode : null;
             }
 
         }

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
 Sat May 30 17:56:06 2015
@@ -181,7 +181,7 @@ public abstract class AbstractStandardVi
     }
 
     @Override
-    public void validateOnCreate()
+    protected void validateOnCreate()
     {
         super.validateOnCreate();
         DurableConfigurationStore store = createConfigurationStore();

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
 Sat May 30 17:56:06 2015
@@ -55,6 +55,7 @@ import org.apache.qpid.server.model.Brok
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry;
 import org.apache.qpid.server.model.Exchange;
+import org.apache.qpid.server.model.IntegrityViolationException;
 import org.apache.qpid.server.model.LifetimePolicy;
 import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.ManagedObject;
@@ -93,6 +94,10 @@ public abstract class AbstractVirtualHos
     private MessageStoreLogSubject _configurationStoreLogSubject;
 
     private TaskExecutor _virtualHostExecutor;
+
+    @ManagedAttributeField
+    private boolean _defaultVirtualHostNode;
+
     @ManagedAttributeField
     private String _virtualHostInitialConfiguration;
 
@@ -107,7 +112,6 @@ public abstract class AbstractVirtualHos
         _eventLogger = systemConfig.getEventLogger();
     }
 
-
     @Override
     public void onOpen()
     {
@@ -206,6 +210,42 @@ public abstract class AbstractVirtualHos
     }
 
     @Override
+    protected void validateOnCreate()
+    {
+        super.validateOnCreate();
+
+        if (isDefaultVirtualHostNode())
+        {
+            VirtualHostNode existingDefault = 
_broker.findDefautVirtualHostNode();
+
+            if (existingDefault != null)
+            {
+                throw new IllegalConfigurationException("The existing virtual 
host node '" + existingDefault.getName()
+                                                      + "' is already the 
default for the Broker.");
+            }
+        }
+
+    }
+
+    @Override
+    protected void validateChange(final ConfiguredObject<?> 
proxyForValidation, final Set<String> changedAttributes)
+    {
+        super.validateChange(proxyForValidation, changedAttributes);
+        VirtualHostNode updated = (VirtualHostNode) proxyForValidation;
+        if (changedAttributes.contains(DEFAULT_VIRTUAL_HOST_NODE) && 
updated.isDefaultVirtualHostNode())
+        {
+            VirtualHostNode existingDefault = 
_broker.findDefautVirtualHostNode();
+
+            if (existingDefault != null && existingDefault != this)
+            {
+                throw new IntegrityViolationException("Cannot make '" + 
getName() + "' the default virtual host node for"
+                                                      + " the Broker as 
virtual host node '" + existingDefault.getName()
+                                                      + "' is already the 
default.");
+            }
+        }
+    }
+
+    @Override
     public DurableConfigurationStore getConfigurationStore()
     {
         return _durableConfigurationStore;
@@ -350,12 +390,16 @@ public abstract class AbstractVirtualHos
         return _virtualHostInitialConfiguration;
     }
 
+    @Override
+    public boolean isDefaultVirtualHostNode()
+    {
+        return _defaultVirtualHostNode;
+    }
+
     protected abstract DurableConfigurationStore createConfigurationStore();
 
     protected abstract ListenableFuture<Void> activate();
 
-
-
     protected abstract ConfiguredObjectRecord 
enrichInitialVirtualHostRootRecord(final ConfiguredObjectRecord vhostRecord);
 
     protected final ConfiguredObjectRecord[] getInitialRecords() throws 
IOException

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostNodeImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostNodeImpl.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostNodeImpl.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostNodeImpl.java
 Sat May 30 17:56:06 2015
@@ -23,6 +23,7 @@ package org.apache.qpid.server.virtualho
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
+import java.util.Set;
 
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
@@ -32,6 +33,7 @@ import org.slf4j.LoggerFactory;
 import org.apache.qpid.server.model.AbstractConfiguredObject;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.IntegrityViolationException;
 import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
 import org.apache.qpid.server.model.Port;
@@ -39,6 +41,7 @@ import org.apache.qpid.server.model.Remo
 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.store.DurableConfigurationStore;
 
 
@@ -47,12 +50,15 @@ public class RedirectingVirtualHostNodeI
 {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(RedirectingVirtualHostImpl.class);
     public static final String VIRTUAL_HOST_NODE_TYPE = "Redirector";
-
+    private final Broker<?> _broker;
 
     @ManagedAttributeField
     private String _virtualHostInitialConfiguration;
 
     @ManagedAttributeField
+    private boolean _defaultVirtualHostNode;
+
+    @ManagedAttributeField
     private Map<Port<?>,String> _redirects;
 
     private RedirectingVirtualHostImpl _virtualHost;
@@ -62,6 +68,8 @@ public class RedirectingVirtualHostNodeI
     {
         super(Collections.<Class<? extends 
ConfiguredObject>,ConfiguredObject<?>>singletonMap(Broker.class, parent),
               attributes);
+        _broker = parent;
+
     }
 
     @StateTransition( currentState = {State.UNINITIALIZED, State.STOPPED, 
State.ERRORED }, desiredState = State.ACTIVE )
@@ -95,6 +103,12 @@ public class RedirectingVirtualHostNodeI
     }
 
     @Override
+    public boolean isDefaultVirtualHostNode()
+    {
+        return _defaultVirtualHostNode;
+    }
+
+    @Override
     public VirtualHost<?, ?, ?> getVirtualHost()
     {
         return _virtualHost;
@@ -118,6 +132,43 @@ public class RedirectingVirtualHostNodeI
         return _redirects;
     }
 
+
+    @Override
+    protected void validateOnCreate()
+    {
+        super.validateOnCreate();
+
+        if (isDefaultVirtualHostNode())
+        {
+            VirtualHostNode existingDefault = 
_broker.findDefautVirtualHostNode();
+
+            if (existingDefault != null)
+            {
+                throw new IntegrityViolationException("The existing virtual 
host node '" + existingDefault.getName()
+                                                      + "' is already the 
default for the Broker.");
+            }
+        }
+
+    }
+
+    @Override
+    protected void validateChange(final ConfiguredObject<?> 
proxyForValidation, final Set<String> changedAttributes)
+    {
+        super.validateChange(proxyForValidation, changedAttributes);
+        VirtualHostNode updated = (VirtualHostNode) proxyForValidation;
+        if (changedAttributes.contains(DEFAULT_VIRTUAL_HOST_NODE) && 
updated.isDefaultVirtualHostNode())
+        {
+            VirtualHostNode existingDefault = 
_broker.findDefautVirtualHostNode();
+
+            if (existingDefault != null && existingDefault != this)
+            {
+                throw new IntegrityViolationException("Cannot make '" + 
getName() + "' the default virtual host node for"
+                                                      + " the Broker as 
virtual host node '" + existingDefault.getName()
+                                                      + "' is already the 
default.");
+            }
+        }
+    }
+
     public static Map<String, Collection<String>> getSupportedChildTypes()
     {
         Collection<String> validVhostTypes = 
Collections.singleton(RedirectingVirtualHostImpl.TYPE);

Modified: qpid/java/trunk/broker-core/src/main/resources/initial-config.json
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/resources/initial-config.json?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/resources/initial-config.json 
(original)
+++ qpid/java/trunk/broker-core/src/main/resources/initial-config.json Sat May 
30 17:56:06 2015
@@ -21,7 +21,6 @@
 {
   "name": "${broker.name}",
   "modelVersion": "3.1",
-  "defaultVirtualHost" : "default",
   "authenticationproviders" : [ {
     "name" : "passwordFile",
     "type" : "PlainPasswordFile",
@@ -91,6 +90,7 @@
   "virtualhostnodes" : [ {
     "name" : "default",
     "type" : "JSON",
+    "defaultVirtualHostNode" : "true",
     "virtualHostInitialConfiguration" : 
"${qpid.initial_config_virtualhost_config}"
   } ],
   "plugins" : [ {

Modified: 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
 Sat May 30 17:56:06 2015
@@ -55,7 +55,6 @@ import org.apache.qpid.server.configurat
 import 
org.apache.qpid.server.connection.IConnectionRegistry.RegistryChangeListener;
 import org.apache.qpid.server.protocol.AMQConnectionModel;
 import org.apache.qpid.server.security.SecurityManager;
-import org.apache.qpid.server.security.access.Operation;
 import org.apache.qpid.server.store.ConfiguredObjectRecord;
 import org.apache.qpid.server.store.DurableConfigurationStore;
 import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
@@ -152,27 +151,6 @@ public class VirtualHostTest extends Qpi
         verify(_configStore).remove(matchesRecord(virtualHost.getId(), 
virtualHost.getType()));
     }
 
-    public void testDeleteDefaultVirtualHostIsDisallowed()
-    {
-        String virtualHostName = getName();
-        when(_broker.getDefaultVirtualHost()).thenReturn(virtualHostName);
-
-        VirtualHost<?,?,?> virtualHost = createVirtualHost(virtualHostName);
-
-        try
-        {
-            virtualHost.delete();
-            fail("Exception not thrown");
-        }
-        catch(IntegrityViolationException ive)
-        {
-            // PASS
-        }
-
-        assertEquals("Unexpected state", State.ACTIVE, virtualHost.getState());
-        verify(_configStore, 
never()).remove(matchesRecord(virtualHost.getId(), virtualHost.getType()));
-    }
-
     public void testStopAndStartVirtualHost()
     {
         String virtualHostName = getName();

Modified: 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java
 Sat May 30 17:56:06 2015
@@ -99,7 +99,6 @@ public class BrokerRecovererTest extends
     {
         Map<String, Object> attributes = new HashMap<String, Object>();
         attributes.put(Broker.NAME, getName());
-        attributes.put(Broker.DEFAULT_VIRTUAL_HOST, "test");
         attributes.put(Broker.CONNECTION_SESSION_COUNT_LIMIT, 1000);
         attributes.put(Broker.CONNECTION_HEART_BEAT_DELAY, 2000);
         attributes.put(Broker.STATISTICS_REPORTING_PERIOD, 4000);

Modified: 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java
 Sat May 30 17:56:06 2015
@@ -117,6 +117,7 @@ public class BrokerStoreUpgraderAndRecov
         expectedAttributes.put("createdTime", VIRTUALHOST_CREATE_TIME);
         expectedAttributes.put("name", VIRTUALHOST_NAME);
         expectedAttributes.put("type", "JDBC");
+        expectedAttributes.put("defaultVirtualHostNode", "true");
 
         final Map<String, Object> context = new HashMap<>();
         context.put("qpid.jdbcstore.bigIntType", "mybigint");
@@ -166,6 +167,8 @@ public class BrokerStoreUpgraderAndRecov
         expectedAttributes.put("createdTime", VIRTUALHOST_CREATE_TIME);
         expectedAttributes.put("name", VIRTUALHOST_NAME);
         expectedAttributes.put("type", "JDBC");
+        expectedAttributes.put("defaultVirtualHostNode", "true");
+
 
         final Map<String, Object> context = new HashMap<>();
         context.put("qpid.jdbcstore.bigIntType", "mybigint");
@@ -205,6 +208,8 @@ public class BrokerStoreUpgraderAndRecov
         expectedAttributes.put("createdTime", VIRTUALHOST_CREATE_TIME);
         expectedAttributes.put("name", VIRTUALHOST_NAME);
         expectedAttributes.put("type", "DERBY");
+        expectedAttributes.put("defaultVirtualHostNode", "true");
+
         assertEquals("Unexpected attributes", expectedAttributes, 
upgradedVirtualHostNodeRecord.getAttributes());
         assertBrokerRecord(records);
     }
@@ -237,6 +242,7 @@ public class BrokerStoreUpgraderAndRecov
         expectedAttributes.put("createdTime", VIRTUALHOST_CREATE_TIME);
         expectedAttributes.put("name", VIRTUALHOST_NAME);
         expectedAttributes.put("type", "BDB");
+        expectedAttributes.put("defaultVirtualHostNode", "true");
         expectedAttributes.put("context", 
Collections.singletonMap("je.stats.collect", "false"));
         assertEquals("Unexpected attributes", expectedAttributes, 
upgradedVirtualHostNodeRecord.getAttributes());
         assertBrokerRecord(records);
@@ -285,6 +291,7 @@ public class BrokerStoreUpgraderAndRecov
         expectedAttributes.put("helperAddress", "localhost:7000");
         expectedAttributes.put("name", "n1");
         expectedAttributes.put("context", expectedContext);
+        expectedAttributes.put("defaultVirtualHostNode", "true");
 
         assertEquals("Unexpected attributes", expectedAttributes, 
upgradedVirtualHostNodeRecord.getAttributes());
         assertBrokerRecord(records);
@@ -314,6 +321,8 @@ public class BrokerStoreUpgraderAndRecov
         expectedAttributes.put("createdTime", VIRTUALHOST_CREATE_TIME);
         expectedAttributes.put("name", VIRTUALHOST_NAME);
         expectedAttributes.put("type", "Memory");
+        expectedAttributes.put("defaultVirtualHostNode", "true");
+
         assertEquals("Unexpected attributes", expectedAttributes, 
upgradedVirtualHostNodeRecord.getAttributes());
         assertBrokerRecord(records);
     }
@@ -453,11 +462,11 @@ public class BrokerStoreUpgraderAndRecov
         DurableConfigurationStore dcs = new 
DurableConfigurationStoreStub(_brokerRecord);
         List<ConfiguredObjectRecord> records = new 
BrokerStoreUpgraderAndRecoverer(_systemConfig).upgrade(dcs);
 
-        assertVirtualHost(records);
+        assertVirtualHost(records, true);
         assertBrokerRecord(records);
     }
 
-    private void assertVirtualHost(List<ConfiguredObjectRecord> records)
+    private void assertVirtualHost(List<ConfiguredObjectRecord> records, final 
boolean isDefaultVHN)
     {
         ConfiguredObjectRecord upgradedVirtualHostNodeRecord = 
findRecordById(_hostId, records);
         assertEquals("Unexpected type", "VirtualHostNode", 
upgradedVirtualHostNodeRecord.getType());
@@ -466,6 +475,7 @@ public class BrokerStoreUpgraderAndRecov
         expectedAttributes.put("createdTime", VIRTUALHOST_CREATE_TIME);
         expectedAttributes.put("name", VIRTUALHOST_NAME);
         expectedAttributes.put("type", "Memory");
+        expectedAttributes.put("defaultVirtualHostNode", 
Boolean.toString(isDefaultVHN));
         assertEquals("Unexpected attributes", expectedAttributes, 
upgradedVirtualHostNodeRecord.getAttributes());
     }
 
@@ -474,7 +484,6 @@ public class BrokerStoreUpgraderAndRecov
         ConfiguredObjectRecord upgradedBrokerRecord = 
findRecordById(_brokerId, records);
         assertEquals("Unexpected type", "Broker", 
upgradedBrokerRecord.getType());
         Map<String,Object> expectedAttributes = new HashMap<>();
-        expectedAttributes.put("defaultVirtualHost", "test");
         expectedAttributes.put("name", "Broker");
         expectedAttributes.put("modelVersion", BrokerModel.MODEL_VERSION);
         expectedAttributes.put("createdTime", 1401385808828l);

Modified: 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
 Sat May 30 17:56:06 2015
@@ -115,11 +115,11 @@ public class BrokerTestHelper
     {
 
         Broker<?> broker = createBrokerMock();
-        return createVirtualHost(attributes, broker);
+        return createVirtualHost(attributes, broker, false);
     }
 
     private static VirtualHostImpl<?, ?, ?> createVirtualHost(final 
Map<String, Object> attributes,
-                                                                final 
Broker<?> broker)
+                                                                final 
Broker<?> broker, boolean defaultVHN)
     {
         ConfiguredObjectFactory objectFactory = broker.getObjectFactory();
 
@@ -128,6 +128,7 @@ public class BrokerTestHelper
         when(virtualHostNode.getName()).thenReturn( virtualHostNodeName);
         when(virtualHostNode.getTaskExecutor()).thenReturn(TASK_EXECUTOR);
         when(virtualHostNode.getChildExecutor()).thenReturn(TASK_EXECUTOR);
+        
when(virtualHostNode.isDefaultVirtualHostNode()).thenReturn(defaultVHN);
 
         when(virtualHostNode.getParent(eq(Broker.class))).thenReturn(broker);
 
@@ -152,19 +153,18 @@ public class BrokerTestHelper
         return host;
     }
 
-
     public static VirtualHostImpl<?,?,?> createVirtualHost(String name) throws 
Exception
     {
-        return createVirtualHost(name, createBrokerMock());
+        return createVirtualHost(name, createBrokerMock(), false);
     }
 
-    public static VirtualHostImpl<?,?,?> createVirtualHost(String name, 
Broker<?> broker) throws Exception
+    public static VirtualHostImpl<?,?,?> createVirtualHost(String name, 
Broker<?> broker, boolean defaultVHN) throws Exception
     {
-        Map<String,Object> attributes = new HashMap<String, Object>();
+        Map<String,Object> attributes = new HashMap<>();
         attributes.put(org.apache.qpid.server.model.VirtualHost.TYPE, 
TestMemoryVirtualHost.VIRTUAL_HOST_TYPE);
         attributes.put(org.apache.qpid.server.model.VirtualHost.NAME, name);
 
-        return createVirtualHost(attributes, broker);
+        return createVirtualHost(attributes, broker, defaultVHN);
     }
 
     public static AMQSessionModel<?,?> createSession(int channelId, 
AMQConnectionModel<?,?> connection)

Modified: 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java
 Sat May 30 17:56:06 2015
@@ -45,8 +45,8 @@ import org.apache.qpid.test.utils.QpidTe
 
 public class VirtualHostAliasTest extends QpidTestCase
 {
+    private final Map<String, VirtualHost<?,?,?>> _vhosts = new HashMap<>();
     private Broker<?> _broker;
-    private Map<String, VirtualHost<?,?,?>> _vhosts;
     private AmqpPort _port;
 
     @Override
@@ -60,16 +60,20 @@ public class VirtualHostAliasTest extend
         when(dummyAuthProvider.getId()).thenReturn(UUID.randomUUID());
         
when(dummyAuthProvider.getMechanisms()).thenReturn(Arrays.asList("PLAIN"));
         
when(_broker.getChildren(eq(AuthenticationProvider.class))).thenReturn(Collections.singleton(dummyAuthProvider));
-        _vhosts = new HashMap<>();
         for(String name : new String[] { "red", "blue", "purple", "black" })
         {
-            VirtualHostImpl<?, ?, ?> virtualHost = 
BrokerTestHelper.createVirtualHost(name, _broker);
+            boolean defaultVHN = "black".equals(name);
+            VirtualHostImpl<?, ?, ?> virtualHost = 
BrokerTestHelper.createVirtualHost(name, _broker, defaultVHN);
             VirtualHostNode vhn = virtualHost.getParent(VirtualHostNode.class);
             assertNotSame(vhn.getName(), virtualHost.getName());
             _vhosts.put(name, virtualHost);
+
+            if (defaultVHN)
+            {
+                when(_broker.findDefautVirtualHostNode()).thenReturn(vhn);
+            }
         }
         ConfiguredObjectFactory objectFactory = _broker.getObjectFactory();
-        when(_broker.getDefaultVirtualHost()).thenReturn("black");
 
         final Map<String, Object> attributes = new HashMap<>();
         attributes.put(Port.NAME, getTestName());

Modified: 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java
 Sat May 30 17:56:06 2015
@@ -24,6 +24,7 @@ import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -354,19 +355,19 @@ public class AbstractStandardVirtualHost
         assertEquals("Virtual host node state changed unexpectedly", 
State.ACTIVE, node.getState());
     }
 
-    public void testValidateOnCreateFails() throws Exception
+    public void testValidateOnCreateFails_StoreFails() throws Exception
     {
         String nodeName = getTestName();
         Map<String, Object> attributes = Collections.<String, 
Object>singletonMap(TestVirtualHostNode.NAME, nodeName);
 
         final DurableConfigurationStore store = 
mock(DurableConfigurationStore.class);
         doThrow(new RuntimeException("Cannot open 
store")).when(store).openConfigurationStore(any(ConfiguredObject.class), 
any(boolean.class));
-        AbstractStandardVirtualHostNode node = 
createAbstractStandardVirtualHostNode(attributes, store);
+        AbstractStandardVirtualHostNode node = 
createTestStandardVirtualHostNode(attributes, store);
 
         try
         {
-            node.validateOnCreate();
-            fail("Cannot create node");
+            node.create();
+            fail("Exception not thrown");
         }
         catch (IllegalConfigurationException e)
         {
@@ -374,17 +375,43 @@ public class AbstractStandardVirtualHost
         }
     }
 
+    public void testValidateOnCreateFails_ExistingDefaultVHN() throws Exception
+    {
+        String nodeName = getTestName();
+        Map<String, Object> attributes = new HashMap<>();
+        attributes.put(TestVirtualHostNode.NAME, nodeName);
+        attributes.put(TestVirtualHostNode.DEFAULT_VIRTUAL_HOST_NODE, 
Boolean.TRUE);
+
+        VirtualHostNode existingDefault = mock(VirtualHostNode.class);
+        when(existingDefault.getName()).thenReturn("existingDefault");
+
+        when(_broker.findDefautVirtualHostNode()).thenReturn(existingDefault);
+
+        final DurableConfigurationStore store = 
mock(DurableConfigurationStore.class);
+        AbstractStandardVirtualHostNode node = 
createTestStandardVirtualHostNode(attributes, store);
+
+        try
+        {
+            node.create();
+            fail("Exception not thrown");
+        }
+        catch (IllegalConfigurationException e)
+        {
+            assertTrue("Unexpected exception " + e.getMessage(), 
e.getMessage().startsWith("The existing virtual host node 'existingDefault' is 
already the default for the Broker"));
+        }
+    }
+
     public void testValidateOnCreateSucceeds() throws Exception
     {
         String nodeName = getTestName();
         Map<String, Object> attributes = Collections.<String, 
Object>singletonMap(TestVirtualHostNode.NAME, nodeName);
 
         final DurableConfigurationStore store = 
mock(DurableConfigurationStore.class);
-        AbstractStandardVirtualHostNode node = 
createAbstractStandardVirtualHostNode(attributes, store);
+        AbstractStandardVirtualHostNode node = 
createTestStandardVirtualHostNode(attributes, store);
 
-        node.validateOnCreate();
-        verify(store).openConfigurationStore(node, false);
-        verify(store).closeConfigurationStore();
+        node.create();
+        verify(store, times(2)).openConfigurationStore(node, false); // once 
of validation, once for real
+        verify(store, times(1)).closeConfigurationStore();
     }
 
     public void testOpenFails() throws Exception
@@ -440,7 +467,7 @@ public class AbstractStandardVirtualHost
 
         final DurableConfigurationStore store = 
mock(DurableConfigurationStore.class);
         doThrow(new RuntimeException("Cannot open 
store")).when(store).openConfigurationStore(any(ConfiguredObject.class), 
any(boolean.class));
-        AbstractStandardVirtualHostNode node = 
createAbstractStandardVirtualHostNode(attributes, store);
+        AbstractStandardVirtualHostNode node = 
createTestStandardVirtualHostNode(attributes, store);
         node.open();
         assertEquals("Unexpected node state", State.ERRORED, node.getState());
 
@@ -455,7 +482,7 @@ public class AbstractStandardVirtualHost
 
         DurableConfigurationStore store = 
mock(DurableConfigurationStore.class);
         doThrow(new RuntimeException("Cannot open 
store")).when(store).openConfigurationStore(any(ConfiguredObject.class), 
any(boolean.class));
-        AbstractVirtualHostNode node = 
createAbstractStandardVirtualHostNode(attributes, store);
+        AbstractVirtualHostNode node = 
createTestStandardVirtualHostNode(attributes, store);
         node.open();
         assertEquals("Unexpected node state", State.ERRORED, node.getState());
         
doNothing().when(store).openConfigurationStore(any(ConfiguredObject.class), 
any(boolean.class));
@@ -471,7 +498,7 @@ public class AbstractStandardVirtualHost
 
         DurableConfigurationStore store = 
mock(DurableConfigurationStore.class);
         doThrow(new RuntimeException("Cannot open 
store")).when(store).openConfigurationStore(any(ConfiguredObject.class), 
any(boolean.class));
-        AbstractVirtualHostNode node = 
createAbstractStandardVirtualHostNode(attributes, store);
+        AbstractVirtualHostNode node = 
createTestStandardVirtualHostNode(attributes, store);
         node.open();
         assertEquals("Unexpected node state", State.ERRORED, node.getState());
         
doNothing().when(store).openConfigurationStore(any(ConfiguredObject.class), 
any(boolean.class));
@@ -517,7 +544,8 @@ public class AbstractStandardVirtualHost
     }
 
 
-    private AbstractStandardVirtualHostNode 
createAbstractStandardVirtualHostNode(final Map<String, Object> attributes, 
final DurableConfigurationStore store)
+    private AbstractStandardVirtualHostNode 
createTestStandardVirtualHostNode(final Map<String, Object> attributes,
+                                                                              
final DurableConfigurationStore store)
     {
         return new AbstractStandardVirtualHostNode(attributes,  _broker){
 

Modified: 
qpid/java/trunk/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhostnode/derby/show.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhostnode/derby/show.js?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhostnode/derby/show.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhostnode/derby/show.js
 Sat May 30 17:56:06 2015
@@ -31,6 +31,7 @@ define(["qpid/common/util", "dojo/domRea
 
     DerbyNode.prototype.update=function(data)
     {
+      this.parent.editNodeButton.set("disabled", !(data.state == "STOPPED" || 
data.state == "ERRORED"));
       util.updateUI(data, fields, this);
     };
 

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editBroker.html
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editBroker.html?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editBroker.html
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editBroker.html
 Sat May 30 17:56:06 2015
@@ -37,18 +37,6 @@
                   </div>
               </div>
               <div class="clear">
-                  <div class="formLabel-labelCell 
tableContainer-labelCell">Default Virtual Host*:</div>
-                  <div class="formLabel-controlCell tableContainer-valueCell">
-                      <input type="text" id="editBroker.defaultVirtualHost"
-                             data-dojo-type="dijit/form/FilteringSelect"
-                             data-dojo-props="
-                              name: 'defaultVirtualHost',
-                              required: true,
-                              promptMessage: 'Default virtual host used for 
clients that do not specify one when connecting.',
-                              title: 'Select default virtual host' " />
-                  </div>
-              </div>
-              <div class="clear">
                   <div class="formLabel-labelCell 
tableContainer-labelCell">Statistics reporting period (ms):</div>
                   <div class="formLabel-controlCell tableContainer-valueCell">
                       <input type="text" 
id="editBroker.statisticsReportingPeriod"

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html
 Sat May 30 17:56:06 2015
@@ -36,8 +36,18 @@
                               title: 'Enter virtual host name'" />
                       </div>
                   </div>
-
                   <div id="editVirtualHostNode.typeFields"></div>
+                  <div class="clear">
+                      <div class="formLabel-labelCell 
tableContainer-labelCell">Default Virtual Host Node: </div>
+                      <div class="formLabel-controlCell 
tableContainer-valueCell">
+                          <input type="checkbox" 
id="editVirtualHostNode.defaultVirtualHostNode" checked="checked"
+                                 data-dojo-type="dijit/form/CheckBox"
+                                 data-dojo-props="
+                                    name: 'defaultVirtualHostNode',
+                                    required: false,
+                                    title: 'Make this virtual host node 
default. Clients connecting without providing a virtualhost will connect to the 
virtual host beneath this node.'" />
+                      </div>
+                  </div>
 
                   <div class="clear"></div>
 

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
 Sat May 30 17:56:06 2015
@@ -55,7 +55,7 @@ define(["dojo/parser",
         addAuthenticationProvider, addVirtualHostNodeAndVirtualHost, addPort, 
addStore, addGroupProvider, addAccessControlProvider, editBroker, template) {
 
            var brokerAttributeNames = ["name", "operatingSystem", "platform", 
"productVersion", "modelVersion",
-                                        "defaultVirtualHost", 
"statisticsReportingPeriod", "statisticsReportingResetEnabled",
+                                        "statisticsReportingPeriod", 
"statisticsReportingResetEnabled",
                                         "connection.sessionCountLimit", 
"connection.heartBeatDelay"];
 
            function Broker(name, parent, controller) {
@@ -282,10 +282,15 @@ define(["dojo/parser",
                              that.vhostsGrid =
                                 new 
UpdatableStore(that.brokerData.virtualhostnodes, 
query(".broker-virtualhosts")[0],
                                                 [
-                                                  { name: "Node Name", field: 
"name", width: "10%"},
-                                                  { name: "Node State", field: 
"state", width: "10%"},
-                                                  { name: "Node Type", field: 
"type", width: "10%"},
-                                                  { name: "Host Name", field: 
"_item", width: "10%",
+                                                  { name: "Node Name", field: 
"name", width: "8%"},
+                                                  { name: "Node State", field: 
"state", width: "8%"},
+                                                  { name: "Node Type", field: 
"type", width: "8%"},
+                                                  { name: "Default", field: 
"defaultVirtualHostNode", width: "8%",
+                                                    formatter: function(item){
+                                                      return "<input 
type='checkbox' disabled='disabled' "+(item?"checked='checked'": "")+" />";
+                                                    }
+                                                  },
+                                                  { name: "Host Name", field: 
"_item", width: "8%",
                                                     formatter: function(item){
                                                       return item && 
item.virtualhosts? item.virtualhosts[0].name: "N/A";
                                                     }
@@ -314,13 +319,6 @@ define(["dojo/parser",
                                                     formatter: function(item){
                                                         return 
isActiveVH(item)? item.virtualhosts[0].statistics.exchangeCount: "N/A";
                                                     }
-                                                  },
-                                                  {
-                                                    name: "Default", field: 
"_item", width: "6%",
-                                                    formatter: function(item){
-                                                        var val = item && 
item.virtualhosts? item.virtualhosts[0].name: null;
-                                                        return "<input 
type='radio' disabled='disabled' "+(val == that.brokerData.defaultVirtualHost ? 
"checked='checked'": "")+" />";
-                                                    }
                                                   }
                                                 ], function(obj) {
                                                         
connect.connect(obj.grid, "onRowDblClick", obj.grid,

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js
 Sat May 30 17:56:06 2015
@@ -162,7 +162,7 @@ define(["dojo/parser",
                    }
                }
 
-               storeNodes(["name", "state", "type"]);
+               storeNodes(["name", "state", "type", "defaultVirtualHostNode"]);
                this.detailsDiv = findNode("virtualhostnodedetails");
           }
 
@@ -192,12 +192,19 @@ define(["dojo/parser",
 
            Updater.prototype.updateUI = function(data)
            {
+             function showBoolean(val)
+             {
+               return "<input type='checkbox' disabled='disabled' "+(val ? 
"checked='checked'": "")+" />" ;
+             }
+
              this.tabObject.startNodeButton.set("disabled", !(data.state == 
"STOPPED" || data.state == "ERRORED"));
              this.tabObject.stopNodeButton.set("disabled", data.state != 
"ACTIVE");
 
              this.name.innerHTML = entities.encode(String(data[ "name" ]));
              this.state.innerHTML = entities.encode(String(data[ "state" ]));
              this.type.innerHTML = entities.encode(String(data[ "type" ]));
+             this.defaultVirtualHostNode.innerHTML = showBoolean(data[ 
"defaultVirtualHostNode" ]);
+
              if (!this.details)
              {
                var that = this;

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js
 Sat May 30 17:56:06 2015
@@ -45,7 +45,7 @@ define(["dojox/html/entities",
         "dojo/domReady!"],
   function (entities, array, event, lang, win, dom, domConstruct, registry, 
parser, json, query, Memory, ObjectStore, util, template)
   {
-    var fields = [ "name", "defaultVirtualHost", "statisticsReportingPeriod", 
"statisticsReportingResetEnabled", "connection.sessionCountLimit", 
"connection.heartBeatDelay"];
+    var fields = [ "name", "statisticsReportingPeriod", 
"statisticsReportingResetEnabled", "connection.sessionCountLimit", 
"connection.heartBeatDelay"];
     var numericFieldNames = ["statisticsReportingPeriod", 
"connection.sessionCountLimit", "connection.heartBeatDelay"];
 
     var brokerEditor =
@@ -130,21 +130,6 @@ define(["dojox/html/entities",
       _show:function(actualData, effectiveData)
       {
           this.initialData = actualData;
-          var nodes = effectiveData.virtualhostnodes
-          var data = [];
-          if (nodes)
-          {
-             for (var i=0; i< nodes.length; i++)
-             {
-                 if (nodes[i].virtualhosts)
-                 {
-                     data.push({id: nodes[i].virtualhosts[0].name, name: 
nodes[i].virtualhosts[0].name});
-                 }
-             }
-          }
-          var hostsStore = new dojo.store.Memory({ data: data });
-          this["defaultVirtualHost"].set("store", hostsStore);
-
 
           for(var i = 0; i < fields.length; i++)
           {

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/show.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/show.js?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/show.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/show.js
 Sat May 30 17:56:06 2015
@@ -26,11 +26,13 @@
 
      function JSON(data)
      {
+         this.parent = data.parent;
          util.buildUI(data.containerNode, data.parent, 
"virtualhostnode/json/show.html", fields, this);
      }
 
      JSON.prototype.update = function(data)
      {
+         this.parent.editNodeButton.set("disabled", !(data.state == "STOPPED" 
|| data.state == "ERRORED"));
          util.updateUI(data, fields, this);
      }
 

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showBroker.html
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showBroker.html?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showBroker.html
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showBroker.html
 Sat May 30 17:56:06 2015
@@ -41,10 +41,6 @@
                 <div class="formLabel-labelCell">Broker model version:</div>
                 <div id="brokerAttribute.modelVersion"></div>
             </div>
-            <div id="brokerAttribute.defaultVirtualHost.container" 
class="hidden clear">
-                <div class="formLabel-labelCell">Default virtual host:</div>
-                <div id="brokerAttribute.defaultVirtualHost"></div>
-            </div>
             <div id="brokerAttribute.statisticsReportingPeriod.container" 
class="hidden clear">
                 <div class="formLabel-labelCell">Statistics reporting period 
(ms):</div>
                 <div id="brokerAttribute.statisticsReportingPeriod"></div>

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHostNode.html
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHostNode.html?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHostNode.html
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/showVirtualHostNode.html
 Sat May 30 17:56:06 2015
@@ -34,6 +34,10 @@
             <div class="formLabel-labelCell">State:</div>
             <div class="state"></div>
         </div>
+        <div class="clear">
+            <div class="formLabel-labelCell">Default Virtual Host Node:</div>
+            <div class="defaultVirtualHostNode"></div>
+        </div>
         <div class="clear virtualhostnodedetails">
         </div>
         <div class="clear"></div>

Copied: 
qpid/java/trunk/broker-plugins/memory-store/src/main/java/resources/js/qpid/management/virtualhostnode/memory/edit.js
 (from r1682487, 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/show.js)
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/memory-store/src/main/java/resources/js/qpid/management/virtualhostnode/memory/edit.js?p2=qpid/java/trunk/broker-plugins/memory-store/src/main/java/resources/js/qpid/management/virtualhostnode/memory/edit.js&p1=qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/show.js&r1=1682487&r2=1682631&rev=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/show.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/memory-store/src/main/java/resources/js/qpid/management/virtualhostnode/memory/edit.js
 Sat May 30 17:56:06 2015
@@ -1,5 +1,4 @@
 /*
- *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,24 +15,14 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
- *
  */
- define(["qpid/common/util",
-         "dojo/domReady!"],
-   function (util)
+define(["dojo/domReady!"],
+   function (util, registry)
    {
-     var fields = ["storePath"];
-
-     function JSON(data)
-     {
-         util.buildUI(data.containerNode, data.parent, 
"virtualhostnode/json/show.html", fields, this);
-     }
-
-     JSON.prototype.update = function(data)
-     {
-         util.updateUI(data, fields, this);
-     }
-
-     return JSON;
+       return {
+           show: function(data)
+           {
+           }
+       };
    }
- );
+);

Modified: 
qpid/java/trunk/broker-plugins/memory-store/src/main/java/resources/js/qpid/management/virtualhostnode/memory/show.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/memory-store/src/main/java/resources/js/qpid/management/virtualhostnode/memory/show.js?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/memory-store/src/main/java/resources/js/qpid/management/virtualhostnode/memory/show.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/memory-store/src/main/java/resources/js/qpid/management/virtualhostnode/memory/show.js
 Sat May 30 17:56:06 2015
@@ -17,20 +17,17 @@
  * under the License.
  */
 
-define([],
+define(["dojo/domReady!"],
   function ()
   {
     function Memory(data)
     {
         this.parent = data.parent;
-        this.parent.editNodeButton.set("disabled",true);
-        this.parent.editNodeButton.domNode.style.display = "none";
     }
 
     Memory.prototype.update = function(data)
     {
-        this.parent.editNodeButton.set("disabled", true);
-        this.parent.editNodeButton.domNode.style.display = "none";
+      this.parent.editNodeButton.set("disabled", !(data.state == "STOPPED" || 
data.state == "ERRORED"));
     }
 
     return Memory;

Modified: qpid/java/trunk/systests/etc/config-systests.json
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/etc/config-systests.json?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- qpid/java/trunk/systests/etc/config-systests.json (original)
+++ qpid/java/trunk/systests/etc/config-systests.json Sat May 30 17:56:06 2015
@@ -20,7 +20,7 @@
  */
 {
   "name": "Broker",
-  "defaultVirtualHost" : "test",
+  "defaultVirtualHostNode" : "test",
   "modelVersion": "3.1",
   "authenticationproviders" : [ {
     "name" : "plain",
@@ -102,6 +102,7 @@
   "virtualhostnodes" : [ {
     "name" : "test",
     "type" : "${virtualhostnode.type}",
+    "defaultVirtualHostNode" : "true",
     "storePath" : 
"${QPID_WORK}${file.separator}${test.port}${file.separator}test${file.separator}config",
     "context" : {
       "virtualhostBlueprint" : "${virtualhostnode.context.blueprint}"

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java
 Sat May 30 17:56:06 2015
@@ -41,7 +41,6 @@ import org.apache.qpid.server.model.Prot
 import org.apache.qpid.server.model.port.AmqpPort;
 import org.apache.qpid.server.security.SubjectCreator;
 import org.apache.qpid.server.util.BrokerTestHelper;
-import org.apache.qpid.server.virtualhost.VirtualHostImpl;
 import org.apache.qpid.test.utils.QpidTestCase;
 import org.apache.qpid.transport.ByteBufferSender;
 import org.apache.qpid.transport.network.NetworkConnection;
@@ -56,8 +55,7 @@ public class MultiVersionProtocolEngineF
         super.setUp();
         BrokerTestHelper.setUp();
         _broker = BrokerTestHelper.createBrokerMock();
-        
when(_broker.getAttribute(Broker.DEFAULT_VIRTUAL_HOST)).thenReturn("default");
-        when(_broker.getDefaultVirtualHost()).thenReturn("default");
+
         when(_broker.getContextValue(eq(Integer.class), 
eq(Broker.BROKER_FRAME_SIZE))).thenReturn(0xffff);
 
     }

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/AnonymousAccessRestTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/AnonymousAccessRestTest.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/AnonymousAccessRestTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/AnonymousAccessRestTest.java
 Sat May 30 17:56:06 2015
@@ -24,6 +24,8 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.servlet.http.HttpServletResponse;
+
 import org.apache.qpid.server.management.plugin.HttpManagement;
 import org.apache.qpid.server.model.AuthenticationProvider;
 import org.apache.qpid.server.model.Broker;
@@ -79,15 +81,15 @@ public class AnonymousAccessRestTest ext
         startBrokerNow();
 
         Map<String, Object> brokerAttributes = new HashMap<String, Object>();
-        brokerAttributes.put(Broker.DEFAULT_VIRTUAL_HOST, TEST3_VIRTUALHOST);
+        String newBrokerName = getName();
+        brokerAttributes.put(Broker.NAME, newBrokerName);
 
-        int response = getRestTestHelper().submitRequest("broker", "PUT", 
brokerAttributes);
-        assertEquals("Unexpected update response", 200, response);
+        getRestTestHelper().submitRequest("broker", "PUT", brokerAttributes, 
HttpServletResponse.SC_OK);
 
         Map<String, Object> brokerDetails = 
getRestTestHelper().getJsonAsSingletonList("broker");
         assertNotNull("Unexpected broker attributes", brokerDetails);
         assertNotNull("Unexpected value of attribute " + Broker.ID, 
brokerDetails.get(Broker.ID));
-        assertEquals("Unexpected default virtual host", TEST3_VIRTUALHOST, 
brokerDetails.get(Broker.DEFAULT_VIRTUAL_HOST));
+        assertEquals("Unexpected default virtual host", newBrokerName, 
brokerDetails.get(Broker.NAME));
     }
 
     public void testGetWithPasswordAuthProvider() throws Exception
@@ -96,20 +98,19 @@ public class AnonymousAccessRestTest ext
                 TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER);
         startBrokerNow();
 
-        int response = getRestTestHelper().submitRequest("broker", "GET");
-        assertEquals("Anonymous access should be denied", 401, response);
+        getRestTestHelper().submitRequest("broker", "GET", 
HttpServletResponse.SC_UNAUTHORIZED);
     }
 
     public void testPutWithPasswordAuthProvider() throws Exception
     {
+        String newBrokerName = getName();
         getBrokerConfiguration().setObjectAttribute(Port.class, 
TestBrokerConfiguration.ENTRY_NAME_HTTP_PORT, Port.AUTHENTICATION_PROVIDER,
                 TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER);
         startBrokerNow();
 
         Map<String, Object> brokerAttributes = new HashMap<String, Object>();
-        brokerAttributes.put(Broker.DEFAULT_VIRTUAL_HOST, TEST3_VIRTUALHOST);
+        brokerAttributes.put(Broker.NAME, newBrokerName);
 
-        int response = getRestTestHelper().submitRequest("broker", "PUT", 
brokerAttributes);
-        assertEquals("Anonymous access should be denied", 401, response);
+        getRestTestHelper().submitRequest("broker", "PUT", brokerAttributes, 
HttpServletResponse.SC_UNAUTHORIZED);
     }
 }

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
 Sat May 30 17:56:06 2015
@@ -154,7 +154,7 @@ public class AuthenticationProviderRestT
             getRestTestHelper().setUsernameAndPassword(userName, userPassword);
 
             ConnectionURL connectionURL = new AMQConnectionURL("amqp://"+ 
userName + ":" + userPassword +
-                    "@/?brokerlist='tcp://localhost:"+getFailingPort()+"'");
+                    "@/" + TEST1_VIRTUALHOST + 
"?brokerlist='tcp://localhost:"+getFailingPort()+"'");
             Connection connection = getConnection(connectionURL);
             try
             {

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestTest.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/BrokerRestTest.java
 Sat May 30 17:56:06 2015
@@ -135,7 +135,6 @@ public class BrokerRestTest extends Qpid
     public void testPutToUpdateWithInvalidAttributeValues() throws Exception
     {
         Map<String, Object> invalidAttributes = new HashMap<String, Object>();
-        invalidAttributes.put(Broker.DEFAULT_VIRTUAL_HOST, 
"non-existing-host");
         invalidAttributes.put(Broker.CONNECTION_SESSION_COUNT_LIMIT, -10);
         invalidAttributes.put(Broker.CONNECTION_HEART_BEAT_DELAY, -11000);
         invalidAttributes.put(Broker.STATISTICS_REPORTING_PERIOD, -12000);
@@ -181,7 +180,6 @@ public class BrokerRestTest extends Qpid
     private Map<String, Object> getValidBrokerAttributes()
     {
         Map<String, Object> brokerAttributes = new HashMap<String, Object>();
-        brokerAttributes.put(Broker.DEFAULT_VIRTUAL_HOST, TEST3_VIRTUALHOST);
         brokerAttributes.put(Broker.CONNECTION_SESSION_COUNT_LIMIT, 10);
         brokerAttributes.put(Broker.CONNECTION_HEART_BEAT_DELAY, 11000);
         brokerAttributes.put(Broker.STATISTICS_REPORTING_PERIOD, 12000);

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java?rev=1682631&r1=1682630&r2=1682631&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java
 Sat May 30 17:56:06 2015
@@ -181,11 +181,6 @@ public class VirtualHostRestTest extends
         assertEquals("Host should be deleted", 0, hosts.size());
     }
 
-    public void testDeleteDefaultHostFails() throws Exception
-    {
-        getRestTestHelper().submitRequest("virtualhost/" + TEST1_VIRTUALHOST, 
"DELETE", HttpServletResponse.SC_CONFLICT);
-    }
-
     public void testUpdateByPut() throws Exception
     {
         assertVirtualHostUpdate("PUT");



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to