ARTEMIS-19 allow disabling of message load-balancing

Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/20326d0d
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/20326d0d
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/20326d0d

Branch: refs/heads/master
Commit: 20326d0d83a8bae659f3e6c8e2f39c052e8dd104
Parents: 43470f3
Author: jbertram <jbert...@apache.org>
Authored: Fri May 29 16:55:32 2015 -0500
Committer: jbertram <jbert...@apache.org>
Committed: Wed Jun 3 16:21:43 2015 -0500

----------------------------------------------------------------------
 .../config/ActiveMQDefaultConfiguration.java    |  13 +-
 .../management/ClusterConnectionControl.java    |   2 +-
 .../config/ClusterConnectionConfiguration.java  |  24 +--
 .../artemis/core/config/impl/Validators.java    |  17 +-
 .../deployers/impl/FileConfigurationParser.java |  51 ++++--
 .../impl/ClusterConnectionControlImpl.java      |   4 +-
 .../artemis/core/postoffice/Bindings.java       |   3 +-
 .../core/postoffice/impl/BindingsImpl.java      |  18 +-
 .../core/server/ActiveMQMessageBundle.java      |   3 +
 .../core/server/cluster/ClusterManager.java     |   4 +-
 .../cluster/impl/ClusterConnectionImpl.java     |  12 +-
 .../cluster/impl/MessageLoadBalancingType.java  |  34 ++++
 .../resources/schema/artemis-configuration.xsd  |  18 +-
 .../core/config/impl/FileConfigurationTest.java |   5 +-
 .../artemis/tests/util/ActiveMQTestBase.java    |   3 +-
 .../resources/ConfigurationTest-full-config.xml | 112 ++++++------
 .../resources/InvalidConfigurationTest0.xml     | 166 +++++++++---------
 .../resources/InvalidConfigurationTest1.xml     | 166 +++++++++---------
 .../resources/InvalidConfigurationTest2.xml     | 166 +++++++++---------
 .../resources/InvalidConfigurationTest3.xml     | 164 +++++++++---------
 .../resources/InvalidConfigurationTest4.xml     | 164 +++++++++---------
 .../resources/InvalidConfigurationTest5.xml     | 170 +++++++++----------
 docs/user-manual/en/clusters.md                 |  49 +++---
 docs/user-manual/en/configuration-index.md      |   2 +-
 .../clustered-durable-subscription/readme.html  |  44 ++---
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 examples/jms/clustered-grouping/readme.html     |   8 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server2/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 examples/jms/clustered-queue/readme.html        |  30 ++--
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server2/broker.xml  |   2 +-
 .../jms/clustered-static-discovery/readme.html  |  30 ++--
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server2/broker.xml  |   2 +-
 .../main/resources/activemq/server3/broker.xml  |   2 +-
 .../jms/clustered-static-oneway/readme.html     |  24 +--
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server2/broker.xml  |   2 +-
 examples/jms/clustered-topic/readme.html        |  30 ++--
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 examples/jms/symmetric-cluster/readme.html      |  30 ++--
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server2/broker.xml  |   2 +-
 .../main/resources/activemq/server3/broker.xml  |   2 +-
 .../main/resources/activemq/server4/broker.xml  |   2 +-
 .../main/resources/activemq/server5/broker.xml  |   2 +-
 .../extras/byteman/ClusteredGroupingTest.java   |  25 +--
 .../extras/byteman/ScaleDownFailoverTest.java   |   7 +-
 .../extras/byteman/ScaleDownFailureTest.java    |   5 +-
 .../cluster/ClusterControllerTest.java          |   5 +-
 .../distribution/ClusterHeadersRemovedTest.java |   5 +-
 .../cluster/distribution/ClusterTestBase.java   |  29 ++--
 .../distribution/ClusterWithBackupTest.java     |  17 +-
 .../distribution/ClusteredGroupingTest.java     | 121 ++++++-------
 .../ClusteredRequestResponseTest.java           |  15 +-
 .../distribution/MessageLoadBalancingTest.java  | 128 ++++++++++++++
 .../distribution/MessageRedistributionTest.java |  47 ++---
 .../MessageRedistributionWithDiscoveryTest.java |  15 +-
 .../distribution/OneWayChainClusterTest.java    |  91 +++++-----
 .../distribution/OnewayTwoNodeClusterTest.java  |  25 +--
 .../SimpleSymmetricClusterTest.java             |  45 ++---
 .../distribution/SymmetricClusterTest.java      |  39 ++---
 .../SymmetricClusterWithBackupTest.java         |  23 +--
 .../SymmetricClusterWithDiscoveryTest.java      |  15 +-
 .../distribution/TemporaryQueueClusterTest.java |   9 +-
 .../distribution/TwoWayTwoNodeClusterTest.java  |   5 +-
 .../TwoWayTwoNodeClusterWithDiscoveryTest.java  |   6 +-
 .../ClusterWithBackupFailoverTestBase.java      |   5 +-
 .../DiscoveryClusterWithBackupFailoverTest.java |  16 +-
 .../failover/GroupingFailoverTestBase.java      |  13 +-
 .../failover/ReplicatedDistributionTest.java    |   7 +-
 .../StaticClusterWithBackupFailoverTest.java    |  16 +-
 .../ha/HAAutomaticBackupSharedStore.java        |   7 +-
 .../cluster/restart/ClusterRestartTest.java     |   9 +-
 .../cluster/topology/HAClientTopologyTest.java  |  15 +-
 .../HAClientTopologyWithDiscoveryTest.java      |  15 +-
 .../cluster/topology/IsolatedTopologyTest.java  |   5 +
 .../cluster/topology/NonHATopologyTest.java     |   2 +
 .../cluster/util/MultiServerTestBase.java       |   3 +
 .../ClusterConnectionControl2Test.java          |   3 +-
 .../ClusterConnectionControlTest.java           |  15 +-
 .../ClusterConnectionControlUsingCoreTest.java  |   4 +-
 .../paging/SpawnedServerSupport.java            |   3 +-
 .../integration/server/ScaleDown3NodeTest.java  |   7 +-
 .../tests/integration/server/ScaleDownTest.java |   5 +-
 .../tests/util/JMSClusteredTestBase.java        |   9 +-
 .../impl/WildcardAddressManagerUnitTest.java    |   3 +-
 109 files changed, 1389 insertions(+), 1090 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
----------------------------------------------------------------------
diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
index 720a516..5752a5b 100644
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
+++ 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
@@ -339,9 +339,11 @@ public final class ActiveMQDefaultConfiguration
    // should duplicate detection headers be inserted in forwarded messages?
    private static boolean DEFAULT_CLUSTER_DUPLICATE_DETECTION = true;
 
-   // should messages be load balanced if there are no matching consumers on 
target?
    private static boolean DEFAULT_CLUSTER_FORWARD_WHEN_NO_CONSUMERS = false;
 
+   // how should messages be load balanced?
+   private static String DEFAULT_CLUSTER_MESSAGE_LOAD_BALANCING_TYPE = 
"ON_DEMAND";
+
    // maximum number of hops cluster topology is propagated
    private static int DEFAULT_CLUSTER_MAX_HOPS = 1;
 
@@ -950,12 +952,17 @@ public final class ActiveMQDefaultConfiguration
       return DEFAULT_CLUSTER_DUPLICATE_DETECTION;
    }
 
+   public static boolean isDefaultClusterForwardWhenNoConsumers()
+   {
+      return DEFAULT_CLUSTER_FORWARD_WHEN_NO_CONSUMERS;
+   }
+
    /**
     * should messages be load balanced if there are no matching consumers on 
target?
     */
-   public static boolean isDefaultClusterForwardWhenNoConsumers()
+   public static String getDefaultClusterMessageLoadBalancingType()
    {
-      return DEFAULT_CLUSTER_FORWARD_WHEN_NO_CONSUMERS;
+      return DEFAULT_CLUSTER_MESSAGE_LOAD_BALANCING_TYPE;
    }
 
    /**

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ClusterConnectionControl.java
----------------------------------------------------------------------
diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ClusterConnectionControl.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ClusterConnectionControl.java
index aaf7e0b..5767bf6 100644
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ClusterConnectionControl.java
+++ 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ClusterConnectionControl.java
@@ -46,7 +46,7 @@ public interface ClusterConnectionControl extends 
ActiveMQComponentControl
    /**
     * Return whether this cluster connection forward messages when it has no 
local consumers.
     */
-   boolean isForwardWhenNoConsumers();
+   String getMessageLoadBalancingType();
 
    /**
     * Return the Topology that this Cluster Connection knows about

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ClusterConnectionConfiguration.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ClusterConnectionConfiguration.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ClusterConnectionConfiguration.java
index 01c46eb..ccb3e7c 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ClusterConnectionConfiguration.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ClusterConnectionConfiguration.java
@@ -16,13 +16,14 @@
  */
 package org.apache.activemq.artemis.core.config;
 
+import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
+import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
+import 
org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
+
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
 
-import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
-import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
-
 public final class ClusterConnectionConfiguration implements Serializable
 {
    private static final long serialVersionUID = 8948303813427795935L;
@@ -53,7 +54,7 @@ public final class ClusterConnectionConfiguration implements 
Serializable
 
    private boolean duplicateDetection = 
ActiveMQDefaultConfiguration.isDefaultClusterDuplicateDetection();
 
-   private boolean forwardWhenNoConsumers = 
ActiveMQDefaultConfiguration.isDefaultClusterForwardWhenNoConsumers();
+   private MessageLoadBalancingType messageLoadBalancingType = 
Enum.valueOf(MessageLoadBalancingType.class, 
ActiveMQDefaultConfiguration.getDefaultClusterMessageLoadBalancingType());
 
    private List<String> staticConnectors = Collections.emptyList();
 
@@ -171,9 +172,9 @@ public final class ClusterConnectionConfiguration 
implements Serializable
       return duplicateDetection;
    }
 
-   public boolean isForwardWhenNoConsumers()
+   public MessageLoadBalancingType getMessageLoadBalancingType()
    {
-      return forwardWhenNoConsumers;
+      return messageLoadBalancingType;
    }
 
    public int getMaxHops()
@@ -345,11 +346,12 @@ public final class ClusterConnectionConfiguration 
implements Serializable
    }
 
    /**
-    * @param forwardWhenNoConsumers the forwardWhenNoConsumers to set
+    * @param messageLoadBalancingType
+    * @return
     */
-   public ClusterConnectionConfiguration setForwardWhenNoConsumers(boolean 
forwardWhenNoConsumers)
+   public ClusterConnectionConfiguration 
setMessageLoadBalancingType(MessageLoadBalancingType messageLoadBalancingType)
    {
-      this.forwardWhenNoConsumers = forwardWhenNoConsumers;
+      this.messageLoadBalancingType = messageLoadBalancingType;
       return this;
    }
 
@@ -395,7 +397,7 @@ public final class ClusterConnectionConfiguration 
implements Serializable
       result = prime * result + ((connectorName == null) ? 0 : 
connectorName.hashCode());
       result = prime * result + ((discoveryGroupName == null) ? 0 : 
discoveryGroupName.hashCode());
       result = prime * result + (duplicateDetection ? 1231 : 1237);
-      result = prime * result + (forwardWhenNoConsumers ? 1231 : 1237);
+      result = prime * result + (messageLoadBalancingType == null ? 0 : 
messageLoadBalancingType.hashCode());
       result = prime * result + maxHops;
       result = prime * result + (int)(maxRetryInterval ^ (maxRetryInterval >>> 
32));
       result = prime * result + minLargeMessageSize;
@@ -459,7 +461,7 @@ public final class ClusterConnectionConfiguration 
implements Serializable
          return false;
       if (duplicateDetection != other.duplicateDetection)
          return false;
-      if (forwardWhenNoConsumers != other.forwardWhenNoConsumers)
+      if (messageLoadBalancingType != other.messageLoadBalancingType)
          return false;
       if (maxHops != other.maxHops)
          return false;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/Validators.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/Validators.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/Validators.java
index e24d9dc..97c2d4b 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/Validators.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/Validators.java
@@ -18,6 +18,7 @@ package org.apache.activemq.artemis.core.config.impl;
 
 import org.apache.activemq.artemis.core.server.ActiveMQMessageBundle;
 import org.apache.activemq.artemis.core.server.JournalType;
+import 
org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
 import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
 import org.apache.activemq.artemis.core.settings.impl.SlowConsumerPolicy;
 
@@ -176,10 +177,24 @@ public final class Validators
       {
          String val = (String) value;
          if (val == null || !val.equals(SlowConsumerPolicy.KILL.toString()) &&
-            !val.equals(SlowConsumerPolicy.NOTIFY.toString()))
+                 !val.equals(SlowConsumerPolicy.NOTIFY.toString()))
          {
             throw 
ActiveMQMessageBundle.BUNDLE.invalidSlowConsumerPolicyType(val);
          }
       }
    };
+
+   public static final Validator MESSAGE_LOAD_BALANCING_TYPE = new Validator()
+   {
+      public void validate(final String name, final Object value)
+      {
+         String val = (String) value;
+         if (val == null || 
!val.equals(MessageLoadBalancingType.OFF.toString()) &&
+                 !val.equals(MessageLoadBalancingType.STRICT.toString()) &&
+                 !val.equals(MessageLoadBalancingType.ON_DEMAND.toString()))
+         {
+            throw 
ActiveMQMessageBundle.BUNDLE.invalidMessageLoadBalancingType(val);
+         }
+      }
+   };
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
index 44da6b5..3d68b19 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
@@ -16,16 +16,6 @@
  */
 package org.apache.activemq.artemis.core.deployers.impl;
 
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
 import org.apache.activemq.artemis.api.core.BroadcastEndpointFactory;
 import org.apache.activemq.artemis.api.core.BroadcastGroupConfiguration;
@@ -56,6 +46,7 @@ import 
org.apache.activemq.artemis.core.journal.impl.JournalConstants;
 import org.apache.activemq.artemis.core.security.Role;
 import org.apache.activemq.artemis.core.server.ActiveMQServerLogger;
 import org.apache.activemq.artemis.core.server.JournalType;
+import 
org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
 import 
org.apache.activemq.artemis.core.server.group.impl.GroupingHandlerConfiguration;
 import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
 import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
@@ -73,6 +64,16 @@ import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * Parses an XML document according to the {@literal 
artemis-configuration.xsd} schema.
  */
@@ -1159,7 +1160,7 @@ public final class FileConfigurationParser extends 
XMLConfigurationUtil
       configuration.setClusterName(getString(policyNode, "cluster-name", 
configuration.getClusterName(), Validators.NO_CHECK));
 
       configuration.setMaxSavedReplicatedJournalsSize(getInteger(policyNode, 
"max-saved-replicated-journals-size",
-            configuration.getMaxSavedReplicatedJournalsSize(), 
Validators.MINUS_ONE_OR_GE_ZERO));
+                                                                 
configuration.getMaxSavedReplicatedJournalsSize(), 
Validators.MINUS_ONE_OR_GE_ZERO));
 
       
configuration.setScaleDownConfiguration(parseScaleDownConfig(policyNode));
 
@@ -1430,9 +1431,29 @@ public final class FileConfigurationParser extends 
XMLConfigurationUtil
       boolean duplicateDetection =
          getBoolean(e, "use-duplicate-detection", 
ActiveMQDefaultConfiguration.isDefaultClusterDuplicateDetection());
 
-      boolean forwardWhenNoConsumers =
-         getBoolean(e, "forward-when-no-consumers",
-                    
ActiveMQDefaultConfiguration.isDefaultClusterForwardWhenNoConsumers());
+      MessageLoadBalancingType messageLoadBalancingType;
+
+      if (parameterExists(e, "forward-when-no-consumers"))
+      {
+         boolean forwardWhenNoConsumers = getBoolean(e, 
"forward-when-no-consumers",
+                                                     
ActiveMQDefaultConfiguration.isDefaultClusterForwardWhenNoConsumers());
+         if (forwardWhenNoConsumers)
+         {
+            messageLoadBalancingType = MessageLoadBalancingType.STRICT;
+         }
+         else
+         {
+            messageLoadBalancingType = MessageLoadBalancingType.ON_DEMAND;
+         }
+      }
+      else
+      {
+
+         messageLoadBalancingType = 
Enum.valueOf(MessageLoadBalancingType.class,
+                                                 getString(e, 
"message-load-balancing",
+                                                           
ActiveMQDefaultConfiguration.getDefaultClusterMessageLoadBalancingType(),
+                                                           
Validators.MESSAGE_LOAD_BALANCING_TYPE));
+      }
 
       int maxHops = getInteger(e, "max-hops",
                                
ActiveMQDefaultConfiguration.getDefaultClusterMaxHops(),
@@ -1519,7 +1540,7 @@ public final class FileConfigurationParser extends 
XMLConfigurationUtil
          .setCallTimeout(callTimeout)
          .setCallFailoverTimeout(callFailoverTimeout)
          .setDuplicateDetection(duplicateDetection)
-         .setForwardWhenNoConsumers(forwardWhenNoConsumers)
+         .setMessageLoadBalancingType(messageLoadBalancingType)
          .setMaxHops(maxHops)
          .setConfirmationWindowSize(confirmationWindowSize)
          .setAllowDirectConnectionsOnly(allowDirectConnectionsOnly)

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ClusterConnectionControlImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ClusterConnectionControlImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ClusterConnectionControlImpl.java
index 48ec90f..e08474c 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ClusterConnectionControlImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ClusterConnectionControlImpl.java
@@ -194,12 +194,12 @@ public class ClusterConnectionControlImpl extends 
AbstractControl implements Clu
       }
    }
 
-   public boolean isForwardWhenNoConsumers()
+   public String getMessageLoadBalancingType()
    {
       clearIO();
       try
       {
-         return configuration.isForwardWhenNoConsumers();
+         return configuration.getMessageLoadBalancingType().getType();
       }
       finally
       {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/Bindings.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/Bindings.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/Bindings.java
index febc06d..1f6613c 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/Bindings.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/Bindings.java
@@ -21,6 +21,7 @@ import java.util.Collection;
 import org.apache.activemq.artemis.core.server.Queue;
 import org.apache.activemq.artemis.core.server.RoutingContext;
 import org.apache.activemq.artemis.core.server.ServerMessage;
+import 
org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
 import org.apache.activemq.artemis.core.server.group.UnproposalListener;
 
 public interface Bindings extends UnproposalListener
@@ -31,7 +32,7 @@ public interface Bindings extends UnproposalListener
 
    void removeBinding(Binding binding);
 
-   void setRouteWhenNoConsumers(boolean takePriorityIntoAccount);
+   void setMessageLoadBalancingType(MessageLoadBalancingType 
messageLoadBalancingType);
 
    boolean redistribute(ServerMessage message, Queue originatingQueue, 
RoutingContext context) throws Exception;
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/BindingsImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/BindingsImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/BindingsImpl.java
index 268c198..9d3d2bc 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/BindingsImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/BindingsImpl.java
@@ -39,6 +39,7 @@ import org.apache.activemq.artemis.core.server.Queue;
 import org.apache.activemq.artemis.core.server.RoutingContext;
 import org.apache.activemq.artemis.core.server.ServerMessage;
 import org.apache.activemq.artemis.core.server.cluster.RemoteQueueBinding;
+import 
org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
 import org.apache.activemq.artemis.core.server.group.GroupingHandler;
 import org.apache.activemq.artemis.core.server.group.impl.Proposal;
 import org.apache.activemq.artemis.core.server.group.impl.Response;
@@ -58,7 +59,7 @@ public final class BindingsImpl implements Bindings
 
    private final List<Binding> exclusiveBindings = new 
CopyOnWriteArrayList<Binding>();
 
-   private volatile boolean routeWhenNoConsumers;
+   private volatile MessageLoadBalancingType messageLoadBalancingType = 
MessageLoadBalancingType.OFF;
 
    private final GroupingHandler groupingHandler;
 
@@ -73,9 +74,9 @@ public final class BindingsImpl implements Bindings
       this.name = name;
    }
 
-   public void setRouteWhenNoConsumers(final boolean routeWhenNoConsumers)
+   public void setMessageLoadBalancingType(final MessageLoadBalancingType 
messageLoadBalancingType)
    {
-      this.routeWhenNoConsumers = routeWhenNoConsumers;
+      this.messageLoadBalancingType = messageLoadBalancingType;
    }
 
    public Collection<Binding> getBindings()
@@ -164,7 +165,7 @@ public final class BindingsImpl implements Bindings
 
    public boolean redistribute(final ServerMessage message, final Queue 
originatingQueue, final RoutingContext context) throws Exception
    {
-      if (routeWhenNoConsumers)
+      if (messageLoadBalancingType.equals(MessageLoadBalancingType.STRICT) || 
messageLoadBalancingType.equals(MessageLoadBalancingType.OFF))
       {
          return false;
       }
@@ -409,7 +410,7 @@ public final class BindingsImpl implements Bindings
          {
             // bindings.length == 1 ==> only a local queue so we don't check 
for matching consumers (it's an
             // unnecessary overhead)
-            if (length == 1 || (binding.isConnected() && (routeWhenNoConsumers 
|| binding.isHighAcceptPriority(message))))
+            if (length == 1 || (binding.isConnected() && 
(messageLoadBalancingType.equals(MessageLoadBalancingType.STRICT) || 
binding.isHighAcceptPriority(message))))
             {
                theBinding = binding;
 
@@ -421,7 +422,7 @@ public final class BindingsImpl implements Bindings
             {
                //https://issues.jboss.org/browse/HORNETQ-1254 When 
!routeWhenNoConsumers,
                // the localQueue should always have the priority over the 
secondary bindings
-               if (lastLowPriorityBinding == -1 || !routeWhenNoConsumers && 
binding instanceof LocalQueueBinding)
+               if (lastLowPriorityBinding == -1 || 
messageLoadBalancingType.equals(MessageLoadBalancingType.ON_DEMAND) && binding 
instanceof LocalQueueBinding)
                {
                   lastLowPriorityBinding = pos;
                }
@@ -466,6 +467,11 @@ public final class BindingsImpl implements Bindings
       {
          routingNamePositions.put(routingName, pos);
       }
+
+      if (messageLoadBalancingType.equals(MessageLoadBalancingType.OFF) && 
theBinding instanceof RemoteQueueBinding)
+      {
+         theBinding = getNextBinding(message, routingName, bindings);
+      }
       return theBinding;
    }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
index 87c3a8b..bc5b982 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
@@ -362,4 +362,7 @@ public interface ActiveMQMessageBundle
 
    @Message(id = 119112, value = "Cannot set MBeanServer during startup or 
while started")
    IllegalStateException cannotSetMBeanserver();
+
+   @Message(id = 119113, value = "Invalid message load balancing type {0}", 
format = Message.Format.MESSAGE_FORMAT)
+   IllegalArgumentException invalidMessageLoadBalancingType(String val);
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
index 4a3c39d..51cedfe 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
@@ -733,7 +733,7 @@ public final class ClusterManager implements 
ActiveMQComponent
                                                        config.getCallTimeout(),
                                                        
config.getCallFailoverTimeout(),
                                                        
config.isDuplicateDetection(),
-                                                       
config.isForwardWhenNoConsumers(),
+                                                       
config.getMessageLoadBalancingType(),
                                                        
config.getConfirmationWindowSize(),
                                                        executorFactory,
                                                        server,
@@ -775,7 +775,7 @@ public final class ClusterManager implements 
ActiveMQComponent
                                                        config.getCallTimeout(),
                                                        
config.getCallFailoverTimeout(),
                                                        
config.isDuplicateDetection(),
-                                                       
config.isForwardWhenNoConsumers(),
+                                                       
config.getMessageLoadBalancingType(),
                                                        
config.getConfirmationWindowSize(),
                                                        executorFactory,
                                                        server,

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
index 02e4327..9caf330 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
@@ -109,7 +109,7 @@ public final class ClusterConnectionImpl implements 
ClusterConnection, AfterConn
 
    private final boolean useDuplicateDetection;
 
-   private final boolean routeWhenNoConsumers;
+   private final MessageLoadBalancingType messageLoadBalancingType;
 
    private final int confirmationWindowSize;
 
@@ -177,7 +177,7 @@ public final class ClusterConnectionImpl implements 
ClusterConnection, AfterConn
                                 final long callTimeout,
                                 final long callFailoverTimeout,
                                 final boolean useDuplicateDetection,
-                                final boolean routeWhenNoConsumers,
+                                final MessageLoadBalancingType 
messageLoadBalancingType,
                                 final int confirmationWindowSize,
                                 final ExecutorFactory executorFactory,
                                 final ActiveMQServer server,
@@ -216,7 +216,7 @@ public final class ClusterConnectionImpl implements 
ClusterConnection, AfterConn
 
       this.useDuplicateDetection = useDuplicateDetection;
 
-      this.routeWhenNoConsumers = routeWhenNoConsumers;
+      this.messageLoadBalancingType = messageLoadBalancingType;
 
       this.confirmationWindowSize = confirmationWindowSize;
 
@@ -284,7 +284,7 @@ public final class ClusterConnectionImpl implements 
ClusterConnection, AfterConn
                                 final long callTimeout,
                                 final long callFailoverTimeout,
                                 final boolean useDuplicateDetection,
-                                final boolean routeWhenNoConsumers,
+                                final MessageLoadBalancingType 
messageLoadBalancingType,
                                 final int confirmationWindowSize,
                                 final ExecutorFactory executorFactory,
                                 final ActiveMQServer server,
@@ -329,7 +329,7 @@ public final class ClusterConnectionImpl implements 
ClusterConnection, AfterConn
 
       this.useDuplicateDetection = useDuplicateDetection;
 
-      this.routeWhenNoConsumers = routeWhenNoConsumers;
+      this.messageLoadBalancingType = messageLoadBalancingType;
 
       this.confirmationWindowSize = confirmationWindowSize;
 
@@ -1388,7 +1388,7 @@ public final class ClusterConnectionImpl implements 
ClusterConnection, AfterConn
 
          Bindings theBindings = postOffice.getBindingsForAddress(queueAddress);
 
-         theBindings.setRouteWhenNoConsumers(routeWhenNoConsumers);
+         theBindings.setMessageLoadBalancingType(messageLoadBalancingType);
 
       }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/MessageLoadBalancingType.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/MessageLoadBalancingType.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/MessageLoadBalancingType.java
new file mode 100644
index 0000000..38df1a2
--- /dev/null
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/MessageLoadBalancingType.java
@@ -0,0 +1,34 @@
+/*
+ * 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 regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.artemis.core.server.cluster.impl;
+
+public enum MessageLoadBalancingType
+{
+   OFF("OFF"), STRICT("STRICT"), ON_DEMAND("ON_DEMAND");
+
+   private String type;
+
+   MessageLoadBalancingType(final String type)
+   {
+      this.type = type;
+   }
+
+   public String getType()
+   {
+      return type;
+   }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/main/resources/schema/artemis-configuration.xsd
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/resources/schema/artemis-configuration.xsd 
b/artemis-server/src/main/resources/schema/artemis-configuration.xsd
index b86b0b1..af28c09 100644
--- a/artemis-server/src/main/resources/schema/artemis-configuration.xsd
+++ b/artemis-server/src/main/resources/schema/artemis-configuration.xsd
@@ -1223,11 +1223,27 @@
          <xsd:element name="forward-when-no-consumers" type="xsd:boolean" 
default="false" maxOccurs="1" minOccurs="0">
             <xsd:annotation>
                <xsd:documentation>
-                  should messages be load balanced if there are no matching 
consumers on target?
+                  DEPRECATED: use message-load-balancing-type instead. Select 
STRICT to mimic foward-when-no-consumers=true
+                  and ON_DEMAND to mimic forward-when-no-consumers=false.
                </xsd:documentation>
             </xsd:annotation>
          </xsd:element>
 
+         <xsd:element name="message-load-balancing" default="ON_DEMAND" 
maxOccurs="1" minOccurs="0">
+            <xsd:annotation>
+               <xsd:documentation>
+                  how should messages be load balanced between servers in a 
cluster?
+               </xsd:documentation>
+            </xsd:annotation>
+            <xsd:simpleType>
+               <xsd:restriction base="xsd:string">
+                  <xsd:enumeration value="OFF"/>
+                  <xsd:enumeration value="STRICT"/>
+                  <xsd:enumeration value="ON_DEMAND"/>
+               </xsd:restriction>
+            </xsd:simpleType>
+         </xsd:element>
+
          <xsd:element name="max-hops" type="xsd:int" default="1" maxOccurs="1" 
minOccurs="0">
             <xsd:annotation>
                <xsd:documentation>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
index 0b232a2..94118eb 100644
--- 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
+++ 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
@@ -39,6 +39,7 @@ import 
org.apache.activemq.artemis.core.config.ha.LiveOnlyPolicyConfiguration;
 import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
 import org.apache.activemq.artemis.core.security.Role;
 import org.apache.activemq.artemis.core.server.JournalType;
+import 
org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
 import org.apache.activemq.artemis.core.settings.impl.SlowConsumerPolicy;
 import org.junit.Assert;
 import org.junit.Test;
@@ -260,7 +261,7 @@ public class FileConfigurationTest extends 
ConfigurationImplTest
             Assert.assertEquals("queues1", ccc.getAddress());
             Assert.assertEquals(3, ccc.getRetryInterval());
             Assert.assertEquals(true, ccc.isDuplicateDetection());
-            Assert.assertEquals(false, ccc.isForwardWhenNoConsumers());
+            Assert.assertEquals(MessageLoadBalancingType.ON_DEMAND, 
ccc.getMessageLoadBalancingType());
             Assert.assertEquals(1, ccc.getMaxHops());
             Assert.assertEquals(123, ccc.getCallTimeout());
             Assert.assertEquals(123, ccc.getCallFailoverTimeout());
@@ -279,7 +280,7 @@ public class FileConfigurationTest extends 
ConfigurationImplTest
             Assert.assertEquals(456, ccc.getCallTimeout());
             Assert.assertEquals(456, ccc.getCallFailoverTimeout());
             Assert.assertEquals(false, ccc.isDuplicateDetection());
-            Assert.assertEquals(true, ccc.isForwardWhenNoConsumers());
+            Assert.assertEquals(MessageLoadBalancingType.STRICT, 
ccc.getMessageLoadBalancingType());
             Assert.assertEquals(2, ccc.getMaxHops());
             Assert.assertEquals(Collections.emptyList(), 
ccc.getStaticConnectors());
             Assert.assertEquals("dg1", ccc.getDiscoveryGroupName());

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
 
b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
index 69cbcda..bb03d92 100644
--- 
a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
+++ 
b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
@@ -109,6 +109,7 @@ import 
org.apache.activemq.artemis.core.server.ServerMessage;
 import org.apache.activemq.artemis.core.server.cluster.ClusterConnection;
 import org.apache.activemq.artemis.core.server.cluster.ClusterManager;
 import org.apache.activemq.artemis.core.server.cluster.RemoteQueueBinding;
+import 
org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
 import org.apache.activemq.artemis.core.server.impl.Activation;
 import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
 import org.apache.activemq.artemis.core.server.impl.ServerMessageImpl;
@@ -525,9 +526,9 @@ public abstract class ActiveMQTestBase extends Assert
               .setConnectorName(connectorName)
               .setRetryInterval(1000)
               .setDuplicateDetection(false)
-              .setForwardWhenNoConsumers(true)
               .setMaxHops(1)
               .setConfirmationWindowSize(1)
+              .setMessageLoadBalancingType(MessageLoadBalancingType.STRICT)
               .setStaticConnectors(connectors0);
 
       return clusterConnectionConfiguration;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/test/resources/ConfigurationTest-full-config.xml
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/test/resources/ConfigurationTest-full-config.xml 
b/artemis-server/src/test/resources/ConfigurationTest-full-config.xml
index 0f81b75..0514788 100644
--- a/artemis-server/src/test/resources/ConfigurationTest-full-config.xml
+++ b/artemis-server/src/test/resources/ConfigurationTest-full-config.xml
@@ -15,9 +15,9 @@
   limitations under the License.
 -->
 <configuration
-   xmlns="urn:activemq"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-   xsi:schemaLocation="urn:activemq 
../../../../activemq-server/src/main/resources/schema/artemis-server.xsd">
+      xmlns="urn:activemq"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+      xsi:schemaLocation="urn:activemq 
../../../../activemq-server/src/main/resources/schema/artemis-server.xsd">
    <core xmlns="urn:activemq:core">
       <name>SomeNameForUseOnTheApplicationServer</name>
       <resolve-protocols>false</resolve-protocols>
@@ -65,16 +65,16 @@
       </connectors>
       <acceptors>
          
<acceptor>tcp://0.0.0.0:61616?tcpNoDelay=456;connectionTtl=44;connectionsAllowed=92</acceptor>
-            <acceptor>vm://0?e1=z1;e2=567;connectionsAllowed=87</acceptor>
+         <acceptor>vm://0?e1=z1;e2=567;connectionsAllowed=87</acceptor>
       </acceptors>
       <broadcast-groups>
-            <broadcast-group name="bg1">
-               <local-bind-port>10999</local-bind-port>
-               <group-address>192.168.0.120</group-address>
-               <group-port>11999</group-port>
+         <broadcast-group name="bg1">
+            <local-bind-port>10999</local-bind-port>
+            <group-address>192.168.0.120</group-address>
+            <group-port>11999</group-port>
             <broadcast-period>12345</broadcast-period>
             <connector-ref>connector1</connector-ref>
-            </broadcast-group>
+         </broadcast-group>
          <broadcast-group name="bg2">
             <local-bind-port>12999</local-bind-port>
             <group-address>192.168.0.121</group-address>
@@ -118,38 +118,38 @@
       <queues>
          <queue name="queue1">
             <address>address1</address>
-            <filter string="color='red'" />
+            <filter string="color='red'"/>
             <durable>false</durable>
          </queue>
          <queue name="queue2">
             <address>address2</address>
-            <filter string="color='blue'" />
+            <filter string="color='blue'"/>
             <durable>false</durable>
          </queue>
       </queues>
       <bridges>
          <bridge name="bridge1">
-             <queue-name>queue1</queue-name>
-             
<forwarding-address>bridge-forwarding-address1</forwarding-address>
-             <filter string="sku > 1"/>
-             
<transformer-class-name>org.foo.BridgeTransformer</transformer-class-name>
-             <min-large-message-size>4</min-large-message-size>
-             <check-period>31</check-period>
-             <connection-ttl>370</connection-ttl>
-             <retry-interval>3</retry-interval>
-             <retry-interval-multiplier>0.2</retry-interval-multiplier>
-             <max-retry-interval>10002</max-retry-interval>
-             <reconnect-attempts>2</reconnect-attempts>
-             <failover-on-server-shutdown>false</failover-on-server-shutdown>
-             <use-duplicate-detection>true</use-duplicate-detection>
-             <static-connectors>
+            <queue-name>queue1</queue-name>
+            <forwarding-address>bridge-forwarding-address1</forwarding-address>
+            <filter string="sku > 1"/>
+            
<transformer-class-name>org.foo.BridgeTransformer</transformer-class-name>
+            <min-large-message-size>4</min-large-message-size>
+            <check-period>31</check-period>
+            <connection-ttl>370</connection-ttl>
+            <retry-interval>3</retry-interval>
+            <retry-interval-multiplier>0.2</retry-interval-multiplier>
+            <max-retry-interval>10002</max-retry-interval>
+            <reconnect-attempts>2</reconnect-attempts>
+            <failover-on-server-shutdown>false</failover-on-server-shutdown>
+            <use-duplicate-detection>true</use-duplicate-detection>
+            <static-connectors>
                <connector-ref>connector1</connector-ref>
-             </static-connectors>
+            </static-connectors>
          </bridge>
          <bridge name="bridge2">
-             <queue-name>queue2</queue-name>
-             
<forwarding-address>bridge-forwarding-address2</forwarding-address>
-             <discovery-group-ref discovery-group-name="dg1"/>
+            <queue-name>queue2</queue-name>
+            <forwarding-address>bridge-forwarding-address2</forwarding-address>
+            <discovery-group-ref discovery-group-name="dg1"/>
          </bridge>
       </bridges>
       <ha-policy>
@@ -167,35 +167,35 @@
       </ha-policy>
       <cluster-connections>
          <cluster-connection name="cluster-connection1">
-         <address>queues1</address>
-         <connector-ref>connector1</connector-ref>
-         <check-period>331</check-period>
-         <connection-ttl>3370</connection-ttl>
-         <min-large-message-size>321</min-large-message-size>
-         <call-timeout>123</call-timeout>
-         <retry-interval>3</retry-interval>
-         <retry-interval-multiplier>0.25</retry-interval-multiplier>
-         <max-retry-interval>10000</max-retry-interval>
-         <reconnect-attempts>72</reconnect-attempts>
-         <use-duplicate-detection>true</use-duplicate-detection>
-         <forward-when-no-consumers>false</forward-when-no-consumers>
-         <max-hops>1</max-hops>
-         <call-failover-timeout>123</call-failover-timeout>
-         <static-connectors>
+            <address>queues1</address>
             <connector-ref>connector1</connector-ref>
-            <connector-ref>connector2</connector-ref>
-         </static-connectors>
+            <check-period>331</check-period>
+            <connection-ttl>3370</connection-ttl>
+            <min-large-message-size>321</min-large-message-size>
+            <call-timeout>123</call-timeout>
+            <retry-interval>3</retry-interval>
+            <retry-interval-multiplier>0.25</retry-interval-multiplier>
+            <max-retry-interval>10000</max-retry-interval>
+            <reconnect-attempts>72</reconnect-attempts>
+            <use-duplicate-detection>true</use-duplicate-detection>
+            <message-load-balancing>ON_DEMAND</message-load-balancing>
+            <max-hops>1</max-hops>
+            <call-failover-timeout>123</call-failover-timeout>
+            <static-connectors>
+               <connector-ref>connector1</connector-ref>
+               <connector-ref>connector2</connector-ref>
+            </static-connectors>
          </cluster-connection>
          <cluster-connection name="cluster-connection2">
-             <address>queues2</address>
-             <connector-ref>connector2</connector-ref>
-             <call-timeout>456</call-timeout>
-             <retry-interval>4</retry-interval>
-             <use-duplicate-detection>false</use-duplicate-detection>
-             <forward-when-no-consumers>true</forward-when-no-consumers>
-             <max-hops>2</max-hops>
-             <call-failover-timeout>456</call-failover-timeout>
-             <discovery-group-ref discovery-group-name="dg1"/>
+            <address>queues2</address>
+            <connector-ref>connector2</connector-ref>
+            <call-timeout>456</call-timeout>
+            <retry-interval>4</retry-interval>
+            <use-duplicate-detection>false</use-duplicate-detection>
+            <message-load-balancing>STRICT</message-load-balancing>
+            <max-hops>2</max-hops>
+            <call-failover-timeout>456</call-failover-timeout>
+            <discovery-group-ref discovery-group-name="dg1"/>
          </cluster-connection>
       </cluster-connections>
       <grouping-handler name="gh1">
@@ -225,7 +225,7 @@
       <memory-warning-threshold>95</memory-warning-threshold>
       <memory-measure-interval>54321</memory-measure-interval>
       <large-messages-directory>largemessagesdir</large-messages-directory>
-       <security-settings>
+      <security-settings>
          <security-setting match="a1">
             <permission type="createNonDurableQueue" roles="a1.1"/>
          </security-setting>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/test/resources/InvalidConfigurationTest0.xml
----------------------------------------------------------------------
diff --git a/artemis-server/src/test/resources/InvalidConfigurationTest0.xml 
b/artemis-server/src/test/resources/InvalidConfigurationTest0.xml
index e92eb56..db2c2d3 100644
--- a/artemis-server/src/test/resources/InvalidConfigurationTest0.xml
+++ b/artemis-server/src/test/resources/InvalidConfigurationTest0.xml
@@ -15,9 +15,9 @@
   limitations under the License.
 -->
 <configuration
-   xmlns="urn:activemq"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-   xsi:schemaLocation="urn:activemq 
../../src/config/common/schema/artemis-server.xsd">
+      xmlns="urn:activemq"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+      xsi:schemaLocation="urn:activemq 
../../src/config/common/schema/artemis-server.xsd">
    <core xmlns="urn:activemq:core">
       <name>SomeNameForUseOnTheApplicationServer</name>
       <scheduled-thread-pool-max-size>12345</scheduled-thread-pool-max-size>
@@ -76,17 +76,17 @@
       </connectors>
       <acceptors>
          <acceptor name="acceptor1">tcp://localhost:61616</acceptor>
-            <acceptor name="acceptor2">vm://0</acceptor>
+         <acceptor name="acceptor2">vm://0</acceptor>
       </acceptors>
 
       <broadcast-groups>
-            <broadcast-group name="bg1">
-               <local-bind-port>10999</local-bind-port>
-               <group-address>192.168.0.120</group-address>
-               <group-port>11999</group-port>
+         <broadcast-group name="bg1">
+            <local-bind-port>10999</local-bind-port>
+            <group-address>192.168.0.120</group-address>
+            <group-port>11999</group-port>
             <broadcast-period>12345</broadcast-period>
             <connector-ref>connector1</connector-ref>
-            </broadcast-group>
+         </broadcast-group>
          <broadcast-group name="bg2">
             <local-bind-port>12999</local-bind-port>
             <group-address>192.168.0.121</group-address>
@@ -130,102 +130,102 @@
       <queues>
          <queue name="queue1">
             <address>address1</address>
-            <filter string="color='red'" />
+            <filter string="color='red'"/>
             <durable>false</durable>
          </queue>
          <queue name="queue2">
             <address>address2</address>
-            <filter string="color='blue'" />
+            <filter string="color='blue'"/>
             <durable>false</durable>
          </queue>
       </queues>
       <bridges>
          <bridge name="bridge1">
-             <queue-name>queue1</queue-name>
-             
<forwarding-address>bridge-forwarding-address1</forwarding-address>
-             <filter string="sku > 1"/>
-             
<transformer-class-name>org.foo.BridgeTransformer</transformer-class-name>
-             <min-large-message-size>4</min-large-message-size>
-             <check-period>31</check-period>
-             <connection-ttl>370</connection-ttl>
-             <retry-interval>3</retry-interval>
-             <retry-interval-multiplier>0.2</retry-interval-multiplier>
-             <max-retry-interval>10002</max-retry-interval>
-             <reconnect-attempts>2</reconnect-attempts>
-             <failover-on-server-shutdown>false</failover-on-server-shutdown>
-             <use-duplicate-detection>true</use-duplicate-detection>
-             <static-connectors>
+            <queue-name>queue1</queue-name>
+            <forwarding-address>bridge-forwarding-address1</forwarding-address>
+            <filter string="sku > 1"/>
+            
<transformer-class-name>org.foo.BridgeTransformer</transformer-class-name>
+            <min-large-message-size>4</min-large-message-size>
+            <check-period>31</check-period>
+            <connection-ttl>370</connection-ttl>
+            <retry-interval>3</retry-interval>
+            <retry-interval-multiplier>0.2</retry-interval-multiplier>
+            <max-retry-interval>10002</max-retry-interval>
+            <reconnect-attempts>2</reconnect-attempts>
+            <failover-on-server-shutdown>false</failover-on-server-shutdown>
+            <use-duplicate-detection>true</use-duplicate-detection>
+            <static-connectors>
                <connector-ref>connector1</connector-ref>
-             </static-connectors>
+            </static-connectors>
          </bridge>
          <bridge name="bridge2">
-             <queue-name>queue2</queue-name>
-             
<forwarding-address>bridge-forwarding-address2</forwarding-address>
-             <discovery-group-ref discovery-group-name="dg1"/>
+            <queue-name>queue2</queue-name>
+            <forwarding-address>bridge-forwarding-address2</forwarding-address>
+            <discovery-group-ref discovery-group-name="dg1"/>
          </bridge>
       </bridges>
       <cluster-connections>
          <cluster-connection name="cluster-connection1">
-         <address>queues1</address>
-         <connector-ref>connector1</connector-ref>
-         <check-period>331</check-period>
-         <connection-ttl>3370</connection-ttl>
-         <min-large-message-size>321</min-large-message-size>
-         <call-timeout>123</call-timeout>
-         <retry-interval>3</retry-interval>
-         <retry-interval-multiplier>0.25</retry-interval-multiplier>
-         <max-retry-interval>10000</max-retry-interval>
-         <reconnect-attempts>72</reconnect-attempts>
-         <use-duplicate-detection>true</use-duplicate-detection>
-         <forward-when-no-consumers>false</forward-when-no-consumers>
-         <max-hops>1</max-hops>
-         <call-failover-timeout>123</call-failover-timeout>
-         <static-connectors>
+            <address>queues1</address>
             <connector-ref>connector1</connector-ref>
-            <connector-ref>connector2</connector-ref>
-         </static-connectors>
+            <check-period>331</check-period>
+            <connection-ttl>3370</connection-ttl>
+            <min-large-message-size>321</min-large-message-size>
+            <call-timeout>123</call-timeout>
+            <retry-interval>3</retry-interval>
+            <retry-interval-multiplier>0.25</retry-interval-multiplier>
+            <max-retry-interval>10000</max-retry-interval>
+            <reconnect-attempts>72</reconnect-attempts>
+            <use-duplicate-detection>true</use-duplicate-detection>
+            <message-load-balancing>ON_DEMAND</message-load-balancing>
+            <max-hops>1</max-hops>
+            <call-failover-timeout>123</call-failover-timeout>
+            <static-connectors>
+               <connector-ref>connector1</connector-ref>
+               <connector-ref>connector2</connector-ref>
+            </static-connectors>
          </cluster-connection>
          <cluster-connection name="cluster-connection2">
-             <address>queues2</address>
-             <connector-ref>connector2</connector-ref>
-             <call-timeout>456</call-timeout>
-             <retry-interval>4</retry-interval>
-             <use-duplicate-detection>false</use-duplicate-detection>
-             <forward-when-no-consumers>true</forward-when-no-consumers>
-             <max-hops>2</max-hops>
-             <call-failover-timeout>456</call-failover-timeout>
-             <discovery-group-ref discovery-group-name="dg1"/>
+            <address>queues2</address>
+            <connector-ref>connector2</connector-ref>
+            <call-timeout>456</call-timeout>
+            <retry-interval>4</retry-interval>
+            <use-duplicate-detection>false</use-duplicate-detection>
+            <message-load-balancing>STRICT</message-load-balancing>
+            <max-hops>2</max-hops>
+            <call-failover-timeout>456</call-failover-timeout>
+            <discovery-group-ref discovery-group-name="dg1"/>
          </cluster-connection>
       </cluster-connections>
 
-    <security-settings>
-      <security-setting match="a1">
-         <permission type="createNonDurableQueue" roles="a1.1"/>
-      </security-setting>
-      <security-setting match="a2">
-         <permission type="deleteNonDurableQueue" roles="a2.1"/>
-      </security-setting>
-   </security-settings>
+      <security-settings>
+         <security-setting match="a1">
+            <permission type="createNonDurableQueue" roles="a1.1"/>
+         </security-setting>
+         <security-setting match="a2">
+            <permission type="deleteNonDurableQueue" roles="a2.1"/>
+         </security-setting>
+      </security-settings>
 
-   <address-settings>
-      <address-setting match="a1">
-         <dead-letter-address>a1.1</dead-letter-address>
-         <expiry-address>a1.2</expiry-address>
-         <redelivery-delay>1</redelivery-delay>
-         <max-size-bytes>81781728121878</max-size-bytes>
-         <page-size-bytes>81738173872337</page-size-bytes>
-         <page-max-cache-size>10</page-max-cache-size>
-         
<message-counter-history-day-limit>4</message-counter-history-day-limit>
-      </address-setting>
-      <address-setting match="a2">
-         <dead-letter-address>a2.1</dead-letter-address>
-         <expiry-address>a2.2</expiry-address>
-         <redelivery-delay>5</redelivery-delay>
-         <max-size-bytes>932489234928324</max-size-bytes>
-         <page-size-bytes>7126716262626</page-size-bytes>
-         <page-max-cache-size>20</page-max-cache-size>
-         
<message-counter-history-day-limit>AA</message-counter-history-day-limit>
-      </address-setting>
-   </address-settings>
+      <address-settings>
+         <address-setting match="a1">
+            <dead-letter-address>a1.1</dead-letter-address>
+            <expiry-address>a1.2</expiry-address>
+            <redelivery-delay>1</redelivery-delay>
+            <max-size-bytes>81781728121878</max-size-bytes>
+            <page-size-bytes>81738173872337</page-size-bytes>
+            <page-max-cache-size>10</page-max-cache-size>
+            
<message-counter-history-day-limit>4</message-counter-history-day-limit>
+         </address-setting>
+         <address-setting match="a2">
+            <dead-letter-address>a2.1</dead-letter-address>
+            <expiry-address>a2.2</expiry-address>
+            <redelivery-delay>5</redelivery-delay>
+            <max-size-bytes>932489234928324</max-size-bytes>
+            <page-size-bytes>7126716262626</page-size-bytes>
+            <page-max-cache-size>20</page-max-cache-size>
+            
<message-counter-history-day-limit>AA</message-counter-history-day-limit>
+         </address-setting>
+      </address-settings>
    </core>
 </configuration>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/test/resources/InvalidConfigurationTest1.xml
----------------------------------------------------------------------
diff --git a/artemis-server/src/test/resources/InvalidConfigurationTest1.xml 
b/artemis-server/src/test/resources/InvalidConfigurationTest1.xml
index debdc10..907ff34 100644
--- a/artemis-server/src/test/resources/InvalidConfigurationTest1.xml
+++ b/artemis-server/src/test/resources/InvalidConfigurationTest1.xml
@@ -15,9 +15,9 @@
   limitations under the License.
 -->
 <configuration
-   xmlns="urn:activemq"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-   xsi:schemaLocation="urn:activemq 
../../src/config/common/schema/artemis-server.xsd">
+      xmlns="urn:activemq"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+      xsi:schemaLocation="urn:activemq 
../../src/config/common/schema/artemis-server.xsd">
    <core xmlns="urn:activemq:core">
       <name>SomeNameForUseOnTheApplicationServer</name>
       <scheduled-thread-pool-max-size>12345</scheduled-thread-pool-max-size>
@@ -76,17 +76,17 @@
       </connectors>
       <acceptors>
          <acceptor name="acceptor1">tcp://localhost:61616</acceptor>
-            <acceptor name="acceptor2">vm://0</acceptor>
+         <acceptor name="acceptor2">vm://0</acceptor>
       </acceptors>
 
       <broadcast-groups>
-            <broadcast-group name="bg1">
-               <local-bind-port>10999</local-bind-port>
-               <group-address>192.168.0.120</group-address>
-               <group-port>11999</group-port>
+         <broadcast-group name="bg1">
+            <local-bind-port>10999</local-bind-port>
+            <group-address>192.168.0.120</group-address>
+            <group-port>11999</group-port>
             <broadcast-period>12345</broadcast-period>
             <connector-ref>connector1</connector-ref>
-            </broadcast-group>
+         </broadcast-group>
          <broadcast-group name="bg2">
             <local-bind-port>12999</local-bind-port>
             <group-address>192.168.0.121</group-address>
@@ -130,102 +130,102 @@
       <queues>
          <queue name="queue1">
             <address>address1</address>
-            <filter string="color='red'" />
+            <filter string="color='red'"/>
             <durable>false</durable>
          </queue>
          <queue name="queue2">
             <address>address2</address>
-            <filter string="color='blue'" />
+            <filter string="color='blue'"/>
             <durable>false</durable>
          </queue>
       </queues>
       <bridges>
          <bridge name="bridge1">
-             <queue-name>queue1</queue-name>
-             
<forwarding-address>bridge-forwarding-address1</forwarding-address>
-             <filter string="sku > 1"/>
-             
<transformer-class-name>org.foo.BridgeTransformer</transformer-class-name>
-             <min-large-message-size>4</min-large-message-size>
-             <check-period>31</check-period>
-             <connection-ttl>370</connection-ttl>
-             <retry-interval>3</retry-interval>
-             <retry-interval-multiplier>0.2</retry-interval-multiplier>
-             <max-retry-interval>10002</max-retry-interval>
-             <reconnect-attempts>2</reconnect-attempts>
-             <failover-on-server-shutdown>false</failover-on-server-shutdown>
-             <use-duplicate-detection>true</use-duplicate-detection>
-             <static-connectors>
+            <queue-name>queue1</queue-name>
+            <forwarding-address>bridge-forwarding-address1</forwarding-address>
+            <filter string="sku > 1"/>
+            
<transformer-class-name>org.foo.BridgeTransformer</transformer-class-name>
+            <min-large-message-size>4</min-large-message-size>
+            <check-period>31</check-period>
+            <connection-ttl>370</connection-ttl>
+            <retry-interval>3</retry-interval>
+            <retry-interval-multiplier>0.2</retry-interval-multiplier>
+            <max-retry-interval>10002</max-retry-interval>
+            <reconnect-attempts>2</reconnect-attempts>
+            <failover-on-server-shutdown>false</failover-on-server-shutdown>
+            <use-duplicate-detection>true</use-duplicate-detection>
+            <static-connectors>
                <connector-ref>connector1</connector-ref>
-             </static-connectors>
+            </static-connectors>
          </bridge>
          <bridge name="bridge2">
-             <queue-name>queue2</queue-name>
-             
<forwarding-address>bridge-forwarding-address2</forwarding-address>
-             <discovery-group-ref discovery-group-name="dg1"/>
+            <queue-name>queue2</queue-name>
+            <forwarding-address>bridge-forwarding-address2</forwarding-address>
+            <discovery-group-ref discovery-group-name="dg1"/>
          </bridge>
       </bridges>
       <cluster-connections>
          <cluster-connection name="cluster-connection1">
-         <address>queues1</address>
-         <connector-ref>connector1</connector-ref>
-         <check-period>331</check-period>
-         <connection-ttl>3370</connection-ttl>
-         <min-large-message-size>321</min-large-message-size>
-         <call-timeout>123</call-timeout>
-         <retry-interval>3</retry-interval>
-         <retry-interval-multiplier>0.25</retry-interval-multiplier>
-         <max-retry-interval>10000</max-retry-interval>
-         <reconnect-attempts>72</reconnect-attempts>
-         <use-duplicate-detection>true</use-duplicate-detection>
-         <forward-when-no-consumers>false</forward-when-no-consumers>
-         <max-hops>1</max-hops>
-         <call-failover-timeout>123</call-failover-timeout>
-         <static-connectors>
+            <address>queues1</address>
             <connector-ref>connector1</connector-ref>
-            <connector-ref>connector2</connector-ref>
-         </static-connectors>
+            <check-period>331</check-period>
+            <connection-ttl>3370</connection-ttl>
+            <min-large-message-size>321</min-large-message-size>
+            <call-timeout>123</call-timeout>
+            <retry-interval>3</retry-interval>
+            <retry-interval-multiplier>0.25</retry-interval-multiplier>
+            <max-retry-interval>10000</max-retry-interval>
+            <reconnect-attempts>72</reconnect-attempts>
+            <use-duplicate-detection>true</use-duplicate-detection>
+            <message-load-balancing>ON_DEMAND</message-load-balancing>
+            <max-hops>1</max-hops>
+            <call-failover-timeout>123</call-failover-timeout>
+            <static-connectors>
+               <connector-ref>connector1</connector-ref>
+               <connector-ref>connector2</connector-ref>
+            </static-connectors>
          </cluster-connection>
          <cluster-connection name="cluster-connection2">
-             <address>queues2</address>
-             <connector-ref>connector2</connector-ref>
-             <call-timeout>456</call-timeout>
-             <retry-interval>4</retry-interval>
-             <use-duplicate-detection>false</use-duplicate-detection>
-             <forward-when-no-consumers>true</forward-when-no-consumers>
-             <max-hops>2</max-hops>
-             <call-failover-timeout>456</call-failover-timeout>
-             <discovery-group-ref discovery-group-name="dg1"/>
+            <address>queues2</address>
+            <connector-ref>connector2</connector-ref>
+            <call-timeout>456</call-timeout>
+            <retry-interval>4</retry-interval>
+            <use-duplicate-detection>false</use-duplicate-detection>
+            <message-load-balancing>STRICT</message-load-balancing>
+            <max-hops>2</max-hops>
+            <call-failover-timeout>456</call-failover-timeout>
+            <discovery-group-ref discovery-group-name="dg1"/>
          </cluster-connection>
       </cluster-connections>
 
-    <security-settings>
-      <security-setting match="a1">
-         <permission type="createNonDurableQueue" roles="a1.1"/>
-      </security-setting>
-      <security-setting match="a2">
-         <permission type="deleteNonDurableQueue" roles="a2.1"/>
-      </security-setting>
-   </security-settings>
+      <security-settings>
+         <security-setting match="a1">
+            <permission type="createNonDurableQueue" roles="a1.1"/>
+         </security-setting>
+         <security-setting match="a2">
+            <permission type="deleteNonDurableQueue" roles="a2.1"/>
+         </security-setting>
+      </security-settings>
 
-   <address-settings>
-      <address-setting match="a1">
-         <dead-letter-address>a1.1</dead-letter-address>
-         <expiry-address>a1.2</expiry-address>
-         <redelivery-delay>1</redelivery-delay>
-         <max-size-bytes>81781728121878</max-size-bytes>
-         <page-size-bytes>81738173872337</page-size-bytes>
-         <page-max-cache-size>10</page-max-cache-size>
-         
<message-counter-history-day-limit>4</message-counter-history-day-limit>
-      </address-setting>
-      <address-setting match="a2">
-         <dead-letter-address>a2.1</dead-letter-address>
-         <expiry-address>a2.2</expiry-address>
-         <redelivery-delay>5</redelivery-delay>
-         <max-size-bytes>932489234928324</max-size-bytes>
-         <page-size-bytes>7126716262626</page-size-bytes>
-         <page-max-cache-size>20</page-max-cache-size>
-         
<message-counter-history-day-limit>8</message-counter-history-day-limit>
-      </address-setting>
-   </address-settings>
+      <address-settings>
+         <address-setting match="a1">
+            <dead-letter-address>a1.1</dead-letter-address>
+            <expiry-address>a1.2</expiry-address>
+            <redelivery-delay>1</redelivery-delay>
+            <max-size-bytes>81781728121878</max-size-bytes>
+            <page-size-bytes>81738173872337</page-size-bytes>
+            <page-max-cache-size>10</page-max-cache-size>
+            
<message-counter-history-day-limit>4</message-counter-history-day-limit>
+         </address-setting>
+         <address-setting match="a2">
+            <dead-letter-address>a2.1</dead-letter-address>
+            <expiry-address>a2.2</expiry-address>
+            <redelivery-delay>5</redelivery-delay>
+            <max-size-bytes>932489234928324</max-size-bytes>
+            <page-size-bytes>7126716262626</page-size-bytes>
+            <page-max-cache-size>20</page-max-cache-size>
+            
<message-counter-history-day-limit>8</message-counter-history-day-limit>
+         </address-setting>
+      </address-settings>
    </core>
 </configuration>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/20326d0d/artemis-server/src/test/resources/InvalidConfigurationTest2.xml
----------------------------------------------------------------------
diff --git a/artemis-server/src/test/resources/InvalidConfigurationTest2.xml 
b/artemis-server/src/test/resources/InvalidConfigurationTest2.xml
index 26484d2..b95c10e 100644
--- a/artemis-server/src/test/resources/InvalidConfigurationTest2.xml
+++ b/artemis-server/src/test/resources/InvalidConfigurationTest2.xml
@@ -15,9 +15,9 @@
   limitations under the License.
 -->
 <configuration
-   xmlns="urn:activemq"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-   xsi:schemaLocation="urn:activemq 
../../src/config/common/schema/artemis-server.xsd">
+      xmlns="urn:activemq"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+      xsi:schemaLocation="urn:activemq 
../../src/config/common/schema/artemis-server.xsd">
    <core xmlns="urn:activemq:core">
       <name>SomeNameForUseOnTheApplicationServer</name>
       <scheduled-thread-pool-max-size>12345</scheduled-thread-pool-max-size>
@@ -76,17 +76,17 @@
       </connectors>
       <acceptors>
          <acceptor name="acceptor1">tcp://localhost:61616</acceptor>
-            <acceptor name="acceptor2">vm://0</acceptor>
+         <acceptor name="acceptor2">vm://0</acceptor>
       </acceptors>
 
       <broadcast-groups>
-            <broadcast-group name="bg1">
-               <local-bind-port>10999</local-bind-port>
-               <group-address>192.168.0.120</group-address>
-               <group-port>11999</group-port>
+         <broadcast-group name="bg1">
+            <local-bind-port>10999</local-bind-port>
+            <group-address>192.168.0.120</group-address>
+            <group-port>11999</group-port>
             <broadcast-period>12345</broadcast-period>
             <connector-ref>connector1</connector-ref>
-            </broadcast-group>
+         </broadcast-group>
          <broadcast-group name="bg2">
             <local-bind-port>12999</local-bind-port>
             <group-address>192.168.0.121</group-address>
@@ -130,103 +130,103 @@
       <queues>
          <queue name="queue1">
             <address>address1</address>
-            <filter string="color='red'" />
+            <filter string="color='red'"/>
             <durable>false</durable>
          </queue>
          <queue name="queue2">
             <address>address2</address>
-            <filter string="color='blue'" />
+            <filter string="color='blue'"/>
             <durable>false</durable>
          </queue>
       </queues>
       <bridges>
          <bridge name="bridge1">
-             <queue-name>queue1</queue-name>
-             
<forwarding-address>bridge-forwarding-address1</forwarding-address>
-             <filter string="sku > 1"/>
-             
<transformer-class-name>org.foo.BridgeTransformer</transformer-class-name>
-             <min-large-message-size>4</min-large-message-size>
-             <check-period>31</check-period>
-             <connection-ttl>370</connection-ttl>
-             <retry-interval>3</retry-interval>
-             <retry-interval-multiplier>0.2</retry-interval-multiplier>
-             <max-retry-interval>10002</max-retry-interval>
-             <reconnect-attempts>2</reconnect-attempts>
-             <failover-on-server-shutdown>false</failover-on-server-shutdown>
-             <use-duplicate-detection>true</use-duplicate-detection>
-             <static-connectors>
+            <queue-name>queue1</queue-name>
+            <forwarding-address>bridge-forwarding-address1</forwarding-address>
+            <filter string="sku > 1"/>
+            
<transformer-class-name>org.foo.BridgeTransformer</transformer-class-name>
+            <min-large-message-size>4</min-large-message-size>
+            <check-period>31</check-period>
+            <connection-ttl>370</connection-ttl>
+            <retry-interval>3</retry-interval>
+            <retry-interval-multiplier>0.2</retry-interval-multiplier>
+            <max-retry-interval>10002</max-retry-interval>
+            <reconnect-attempts>2</reconnect-attempts>
+            <failover-on-server-shutdown>false</failover-on-server-shutdown>
+            <use-duplicate-detection>true</use-duplicate-detection>
+            <static-connectors>
                <connector-ref>connector1</connector-ref>
-             </static-connectors>
+            </static-connectors>
          </bridge>
          <bridge name="bridge2">
-             <queue-name>queue2</queue-name>
-             
<forwarding-address>bridge-forwarding-address2</forwarding-address>
-             <discovery-group-ref discovery-group-name="dg1"/>
+            <queue-name>queue2</queue-name>
+            <forwarding-address>bridge-forwarding-address2</forwarding-address>
+            <discovery-group-ref discovery-group-name="dg1"/>
          </bridge>
       </bridges>
       <cluster-connections>
          <cluster-connection name="cluster-connection1">
-         <address>queues1</address>
-         <connector-ref>connector1</connector-ref>
-         <check-period>331</check-period>
-         <connection-ttl>3370</connection-ttl>
-         <min-large-message-size>321</min-large-message-size>
-         <call-timeout>123</call-timeout>
-         <retry-interval>3</retry-interval>
-         <retry-interval-multiplier>0.25</retry-interval-multiplier>
-         <max-retry-interval>10000</max-retry-interval>
-         <reconnect-attempts>72</reconnect-attempts>
-         <use-duplicate-detection>true</use-duplicate-detection>
-         <forward-when-no-consumers>false</forward-when-no-consumers>
-         <max-hops>1</max-hops>
-         <call-failover-timeout>123</call-failover-timeout>
-         <static-connectors>
+            <address>queues1</address>
             <connector-ref>connector1</connector-ref>
-            <connector-ref>connector2</connector-ref>
-         </static-connectors>
+            <check-period>331</check-period>
+            <connection-ttl>3370</connection-ttl>
+            <min-large-message-size>321</min-large-message-size>
+            <call-timeout>123</call-timeout>
+            <retry-interval>3</retry-interval>
+            <retry-interval-multiplier>0.25</retry-interval-multiplier>
+            <max-retry-interval>10000</max-retry-interval>
+            <reconnect-attempts>72</reconnect-attempts>
+            <use-duplicate-detection>true</use-duplicate-detection>
+            <message-load-balancing>ON_DEMAND</message-load-balancing>
+            <max-hops>1</max-hops>
+            <call-failover-timeout>123</call-failover-timeout>
+            <static-connectors>
+               <connector-ref>connector1</connector-ref>
+               <connector-ref>connector2</connector-ref>
+            </static-connectors>
          </cluster-connection>
          <cluster-connection name="cluster-connection2">
-             <address>queues2</address>
-             <connector-ref>connector2</connector-ref>
-             <call-timeout>456</call-timeout>
-             <retry-interval>4</retry-interval>
-             <use-duplicate-detection>false</use-duplicate-detection>
-             <forward-when-no-consumers>true</forward-when-no-consumers>
-             <max-hops>2</max-hops>
-             <call-failover-timeout>456</call-failover-timeout>
-             <discovery-group-ref discovery-group-name="dg1"/>
+            <address>queues2</address>
+            <connector-ref>connector2</connector-ref>
+            <call-timeout>456</call-timeout>
+            <retry-interval>4</retry-interval>
+            <use-duplicate-detection>false</use-duplicate-detection>
+            <message-load-balancing>STRICT</message-load-balancing>
+            <max-hops>2</max-hops>
+            <call-failover-timeout>456</call-failover-timeout>
+            <discovery-group-ref discovery-group-name="dg1"/>
          </cluster-connection>
       </cluster-connections>
 
-    <security-settings>
-      <security-setting match="a1">
-         <permission type="createNonDurableQueue" roles="a1.1"/>
-      </security-setting>
-      <security-setting match="a2">
-         <permission type="deleteNonDurableQueue" roles="a2.1"/>
-      </security-setting>
-   </security-settings>
+      <security-settings>
+         <security-setting match="a1">
+            <permission type="createNonDurableQueue" roles="a1.1"/>
+         </security-setting>
+         <security-setting match="a2">
+            <permission type="deleteNonDurableQueue" roles="a2.1"/>
+         </security-setting>
+      </security-settings>
 
-   <address-settings>
-      <address-setting match="a1">
-         <dead-letter-address>a1.1</dead-letter-address>
-         <expiry-address>a1.2</expiry-address>
-         <redelivery-delay>1</redelivery-delay>
-         <max-size-bytes>81781728121878</max-size-bytes>
-         <page-size-bytes>81738173872337</page-size-bytes>
-         <page-max-cache-size>10</page-max-cache-size>
-         
<message-counter-history-day-limit>4</message-counter-history-day-limit>
-      </address-setting>
-      <address-setting match="a2">
-         <dead-letter-address>a2.1</dead-letter-address>
-         <expiry-address>a2.2</expiry-address>
-         <redelivery-delay>5</redelivery-delay>
-         <max-size-bytes>932489234928324</max-size-bytes>
-         <page-size-bytes>7126716262626</page-size-bytes>
-         <page-max-cache-size>20</page-max-cache-size>
-         
<message-counter-history-day-limit>8</message-counter-history-day-limit>
-      </address-setting>
-   </address-settings>
+      <address-settings>
+         <address-setting match="a1">
+            <dead-letter-address>a1.1</dead-letter-address>
+            <expiry-address>a1.2</expiry-address>
+            <redelivery-delay>1</redelivery-delay>
+            <max-size-bytes>81781728121878</max-size-bytes>
+            <page-size-bytes>81738173872337</page-size-bytes>
+            <page-max-cache-size>10</page-max-cache-size>
+            
<message-counter-history-day-limit>4</message-counter-history-day-limit>
+         </address-setting>
+         <address-setting match="a2">
+            <dead-letter-address>a2.1</dead-letter-address>
+            <expiry-address>a2.2</expiry-address>
+            <redelivery-delay>5</redelivery-delay>
+            <max-size-bytes>932489234928324</max-size-bytes>
+            <page-size-bytes>7126716262626</page-size-bytes>
+            <page-max-cache-size>20</page-max-cache-size>
+            
<message-counter-history-day-limit>8</message-counter-history-day-limit>
+         </address-setting>
+      </address-settings>
    </core>
 
 </configuration>

Reply via email to