You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2015/02/12 21:01:43 UTC

[3/8] activemq-6 git commit: ACTIVEMQ6-7 - Improve Serialization on Connection Factory

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/3b76ccc9/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/discovery/DiscoveryTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/discovery/DiscoveryTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/discovery/DiscoveryTest.java
index 24ee708..6078eca 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/discovery/DiscoveryTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/discovery/DiscoveryTest.java
@@ -16,11 +16,7 @@
  */
 package org.apache.activemq.tests.integration.discovery;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
 import java.net.InetAddress;
 import java.net.NetworkInterface;
 import java.util.Arrays;
@@ -30,10 +26,10 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.activemq.api.core.BroadcastEndpoint;
 import org.apache.activemq.api.core.BroadcastEndpointFactory;
-import org.apache.activemq.api.core.JGroupsBroadcastGroupConfiguration;
+import org.apache.activemq.api.core.JGroupsFileBroadcastEndpointFactory;
 import org.apache.activemq.api.core.SimpleString;
 import org.apache.activemq.api.core.TransportConfiguration;
-import org.apache.activemq.api.core.UDPBroadcastGroupConfiguration;
+import org.apache.activemq.api.core.UDPBroadcastEndpointFactory;
 import org.apache.activemq.api.core.management.CoreNotificationType;
 import org.apache.activemq.core.cluster.DiscoveryEntry;
 import org.apache.activemq.core.cluster.DiscoveryGroup;
@@ -102,7 +98,7 @@ public class DiscoveryTest extends DiscoveryBaseTest
 
       bg = new BroadcastGroupImpl(new FakeNodeManager(nodeID),
                                   RandomUtil.randomString(),
-                                  0, null, new UDPBroadcastGroupConfiguration().setGroupAddress(address1).setGroupPort(groupPort).createBroadcastEndpointFactory());
+                                  0, null, new UDPBroadcastEndpointFactory().setGroupAddress(address1).setGroupPort(groupPort));
 
       bg.start();
 
@@ -132,7 +128,9 @@ public class DiscoveryTest extends DiscoveryBaseTest
       final String nodeID = RandomUtil.randomString();
 
       bg = new BroadcastGroupImpl(new FakeNodeManager(nodeID), "broadcast", 100, null,
-                                  new JGroupsBroadcastGroupConfiguration(TEST_JGROUPS_CONF_FILE, "tst").createBroadcastEndpointFactory());
+                                  new JGroupsFileBroadcastEndpointFactory()
+                                       .setChannelName("tst")
+                                       .setFile(TEST_JGROUPS_CONF_FILE));
 
       bg.start();
 
@@ -141,7 +139,9 @@ public class DiscoveryTest extends DiscoveryBaseTest
       bg.addConnector(live1);
 
       dg = new DiscoveryGroup(nodeID + "1", "broadcast", 5000L,
-                              new JGroupsBroadcastGroupConfiguration(TEST_JGROUPS_CONF_FILE, "tst").createBroadcastEndpointFactory(),
+                              new JGroupsFileBroadcastEndpointFactory()
+                              .setChannelName("tst")
+                              .setFile(TEST_JGROUPS_CONF_FILE),
                               null);
 
       dg.start();
@@ -160,9 +160,9 @@ public class DiscoveryTest extends DiscoveryBaseTest
    @Test
    public void testJGropusChannelReferenceCounting() throws Exception
    {
-      JGroupsBroadcastGroupConfiguration jgroupsConfig =
-         new JGroupsBroadcastGroupConfiguration(TEST_JGROUPS_CONF_FILE, "tst");
-      BroadcastEndpointFactory factory = jgroupsConfig.createBroadcastEndpointFactory();
+      BroadcastEndpointFactory factory = new JGroupsFileBroadcastEndpointFactory()
+                                             .setChannelName("tst")
+                                             .setFile(TEST_JGROUPS_CONF_FILE);
       BroadcastEndpoint broadcaster = factory.createBroadcastEndpoint();
       broadcaster.openBroadcaster();
 
@@ -222,9 +222,9 @@ public class DiscoveryTest extends DiscoveryBaseTest
    @Test
    public void testJGropusChannelReferenceCounting1() throws Exception
    {
-      JGroupsBroadcastGroupConfiguration jgroupsConfig =
-         new JGroupsBroadcastGroupConfiguration(TEST_JGROUPS_CONF_FILE, "tst");
-      BroadcastEndpointFactory factory = jgroupsConfig.createBroadcastEndpointFactory();
+      BroadcastEndpointFactory factory = new JGroupsFileBroadcastEndpointFactory()
+                                             .setChannelName("tst")
+                                             .setFile(TEST_JGROUPS_CONF_FILE);
       BroadcastEndpoint broadcaster = factory.createBroadcastEndpoint();
       broadcaster.openBroadcaster();
 
@@ -293,9 +293,9 @@ public class DiscoveryTest extends DiscoveryBaseTest
    @Test
    public void testJGropusChannelReferenceCounting2() throws Exception
    {
-      JGroupsBroadcastGroupConfiguration jgroupsConfig =
-         new JGroupsBroadcastGroupConfiguration(TEST_JGROUPS_CONF_FILE, "tst");
-      BroadcastEndpointFactory factory = jgroupsConfig.createBroadcastEndpointFactory();
+      BroadcastEndpointFactory factory = new JGroupsFileBroadcastEndpointFactory()
+                                             .setChannelName("tst")
+                                             .setFile(TEST_JGROUPS_CONF_FILE);
       BroadcastEndpoint broadcaster = factory.createBroadcastEndpoint();
       broadcaster.openBroadcaster();
 
@@ -374,13 +374,14 @@ public class DiscoveryTest extends DiscoveryBaseTest
       BroadcastEndpoint client = null;
       try
       {
-         JGroupsBroadcastGroupConfiguration jgroupsConfig =
-            new JGroupsBroadcastGroupConfiguration(TEST_JGROUPS_CONF_FILE, "tst");
-         broadcaster = jgroupsConfig.createBroadcastEndpointFactory().createBroadcastEndpoint();
+         JGroupsFileBroadcastEndpointFactory endpointFactory = new JGroupsFileBroadcastEndpointFactory()
+               .setChannelName("tst")
+               .setFile(TEST_JGROUPS_CONF_FILE);
+         broadcaster = endpointFactory.createBroadcastEndpoint();
 
          broadcaster.openBroadcaster();
 
-         client = jgroupsConfig.createBroadcastEndpointFactory().createBroadcastEndpoint();
+         client = endpointFactory.createBroadcastEndpoint();
 
          client.openClient();
 
@@ -1180,26 +1181,4 @@ public class DiscoveryTest extends DiscoveryBaseTest
          .getSimpleStringProperty(new SimpleString("name"))
          .toString());
    }
-
-   /**
-    * https://issues.jboss.org/browse/HORNETQ-1389
-    * @throws Exception
-    */
-   @Test
-   public void testJGroupsBroadcastGroupConfigurationSerializable() throws Exception
-   {
-      JGroupsBroadcastGroupConfiguration jgroupsConfig =
-         new JGroupsBroadcastGroupConfiguration(TEST_JGROUPS_CONF_FILE, "somChannel");
-      ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
-      ObjectOutputStream objectOut = new ObjectOutputStream(byteOut);
-      objectOut.writeObject(jgroupsConfig);
-
-      byte[] serializedData = byteOut.toByteArray();
-      ByteArrayInputStream byteIn = new ByteArrayInputStream(serializedData);
-      ObjectInputStream objectIn = new ObjectInputStream(byteIn);
-
-      Object object = objectIn.readObject();
-      assertNotNull(object);
-      assertTrue(object instanceof JGroupsBroadcastGroupConfiguration);
-   }
 }

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/3b76ccc9/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/ActiveMQConnectionFactoryTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/ActiveMQConnectionFactoryTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/ActiveMQConnectionFactoryTest.java
index 6aace2b..ba40718 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/ActiveMQConnectionFactoryTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/ActiveMQConnectionFactoryTest.java
@@ -34,7 +34,7 @@ import org.junit.Assert;
 import org.apache.activemq.api.core.BroadcastGroupConfiguration;
 import org.apache.activemq.api.core.DiscoveryGroupConfiguration;
 import org.apache.activemq.api.core.TransportConfiguration;
-import org.apache.activemq.api.core.UDPBroadcastGroupConfiguration;
+import org.apache.activemq.api.core.UDPBroadcastEndpointFactory;
 import org.apache.activemq.api.core.client.ActiveMQClient;
 import org.apache.activemq.api.jms.ActiveMQJMSClient;
 import org.apache.activemq.api.jms.JMSFactoryType;
@@ -169,9 +169,9 @@ public class ActiveMQConnectionFactoryTest extends UnitTestCase
    public void testDiscoveryConstructor() throws Exception
    {
       DiscoveryGroupConfiguration groupConfiguration = new DiscoveryGroupConfiguration()
-         .setBroadcastEndpointFactoryConfiguration(new UDPBroadcastGroupConfiguration()
-                                                      .setGroupAddress(groupAddress)
-                                                      .setGroupPort(groupPort));
+         .setBroadcastEndpointFactory(new UDPBroadcastEndpointFactory()
+                                            .setGroupAddress(groupAddress)
+                                            .setGroupPort(groupPort));
       ActiveMQConnectionFactory cf = ActiveMQJMSClient.createConnectionFactoryWithoutHA(groupConfiguration, JMSFactoryType.CF);
       assertFactoryParams(cf,
                           null,
@@ -734,10 +734,10 @@ public class ActiveMQConnectionFactoryTest extends UnitTestCase
          .setName(bcGroupName)
          .setBroadcastPeriod(broadcastPeriod)
          .setConnectorInfos(connectorNames)
-         .setEndpointFactoryConfiguration(new UDPBroadcastGroupConfiguration()
-                                             .setGroupAddress(groupAddress)
-                                             .setGroupPort(groupPort)
-                                             .setLocalBindPort(localBindPort));
+         .setEndpointFactory(new UDPBroadcastEndpointFactory()
+                                   .setGroupAddress(groupAddress)
+                                   .setGroupPort(groupPort)
+                                   .setLocalBindPort(localBindPort));
 
       List<BroadcastGroupConfiguration> bcConfigs1 = new ArrayList<BroadcastGroupConfiguration>();
       bcConfigs1.add(bcConfig1);

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/3b76ccc9/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/SimpleJNDIClientTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/SimpleJNDIClientTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/SimpleJNDIClientTest.java
index 9c48cc7..22edf72 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/SimpleJNDIClientTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/SimpleJNDIClientTest.java
@@ -31,10 +31,14 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.activemq.api.config.ActiveMQDefaultConfiguration;
+import org.apache.activemq.api.core.BroadcastEndpoint;
+import org.apache.activemq.api.core.BroadcastEndpointFactory;
 import org.apache.activemq.api.core.BroadcastGroupConfiguration;
 import org.apache.activemq.api.core.DiscoveryGroupConfiguration;
+import org.apache.activemq.api.core.JGroupsFileBroadcastEndpoint;
+import org.apache.activemq.api.core.JGroupsPropertiesBroadcastEndpointFactory;
 import org.apache.activemq.api.core.TransportConfiguration;
-import org.apache.activemq.api.core.UDPBroadcastGroupConfiguration;
+import org.apache.activemq.api.core.UDPBroadcastEndpointFactory;
 import org.apache.activemq.api.jms.JMSFactoryType;
 import org.apache.activemq.core.config.Configuration;
 import org.apache.activemq.core.config.ha.SharedStoreMasterPolicyConfiguration;
@@ -43,7 +47,6 @@ import org.apache.activemq.core.server.ActiveMQServer;
 import org.apache.activemq.core.server.ActiveMQServers;
 import org.apache.activemq.jms.client.ActiveMQConnectionFactory;
 import org.apache.activemq.jndi.ActiveMQInitialContextFactory;
-import org.apache.activemq.tests.util.RandomUtil;
 import org.apache.activemq.tests.util.UnitTestCase;
 import org.junit.Assert;
 import org.junit.Before;
@@ -68,43 +71,19 @@ public class SimpleJNDIClientTest extends UnitTestCase
    private TransportConfiguration liveTC;
 
    @Test
-   public void testDefaultConnectionFactories() throws NamingException, JMSException
+   public void testMultipleConnectionFactories() throws NamingException, JMSException
    {
       Hashtable<String, Object> props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
+      props.put("connectionFactory.VmConnectionFactory", "vm://0");
+      props.put("connectionFactory.TCPConnectionFactory", "tcp://localhost:5445");
+      props.put("connectionFactory.UDPConnectionFactory", "udp://" + getUDPDiscoveryAddress() + ":" + getUDPDiscoveryPort());
+      props.put("connectionFactory.JGroupsConnectionFactory", "jgroups://mychannelid?file=test-jgroups-file_ping.xml");
       Context ctx = new InitialContext(props);
-
-      ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("ConnectionFactory");
-      Assert.assertEquals(JMSFactoryType.CF.intValue(), ((ActiveMQConnectionFactory)connectionFactory).getFactoryType());
-      connectionFactory.createConnection().close();
-
-      connectionFactory = (ConnectionFactory) ctx.lookup("XAConnectionFactory");
-      Assert.assertEquals(JMSFactoryType.XA_CF.intValue(), ((ActiveMQConnectionFactory)connectionFactory).getFactoryType());
-      connectionFactory.createConnection().close();
-
-      connectionFactory = (ConnectionFactory) ctx.lookup("TopicConnectionFactory");
-      Assert.assertEquals(JMSFactoryType.TOPIC_CF.intValue(), ((ActiveMQConnectionFactory)connectionFactory).getFactoryType());
-      connectionFactory.createConnection().close();
-
-      connectionFactory = (ConnectionFactory) ctx.lookup("QueueConnectionFactory");
-      Assert.assertEquals(JMSFactoryType.QUEUE_CF.intValue(), ((ActiveMQConnectionFactory)connectionFactory).getFactoryType());
-      connectionFactory.createConnection().close();
-   }
-
-   @Test
-   public void testCustomCF() throws NamingException, JMSException
-   {
-      Hashtable props = new Hashtable<>();
-      props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
-      props.put("connection.myConnectionFactory.type", "CF");
-      Context ctx = new InitialContext(props);
-
-      ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("myConnectionFactory");
-
-      Assert.assertEquals(JMSFactoryType.CF.intValue(), ((ActiveMQConnectionFactory)connectionFactory).getFactoryType());
-
-      connectionFactory.createConnection().close();
+      ctx.lookup("VmConnectionFactory");
+      ctx.lookup("TCPConnectionFactory");
+      ctx.lookup("UDPConnectionFactory");
+      ctx.lookup("JGroupsConnectionFactory");
    }
 
    @Test
@@ -112,7 +91,7 @@ public class SimpleJNDIClientTest extends UnitTestCase
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(Context.PROVIDER_URL, "vm://0");
+      props.put("connectionFactory.ConnectionFactory", "vm://0");
       Context ctx = new InitialContext(props);
 
       ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("ConnectionFactory");
@@ -125,7 +104,7 @@ public class SimpleJNDIClientTest extends UnitTestCase
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(Context.PROVIDER_URL, "vm://1");
+      props.put("connectionFactory.ConnectionFactory", "vm://1");
       Context ctx = new InitialContext(props);
 
       ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("ConnectionFactory");
@@ -138,8 +117,7 @@ public class SimpleJNDIClientTest extends UnitTestCase
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
-      props.put("connection.myConnectionFactory.type", "XA_CF");
+      props.put("connectionFactory.myConnectionFactory", "vm://0?type=XA_CF");
       Context ctx = new InitialContext(props);
 
       ActiveMQConnectionFactory connectionFactory = (ActiveMQConnectionFactory) ctx.lookup("myConnectionFactory");
@@ -152,8 +130,7 @@ public class SimpleJNDIClientTest extends UnitTestCase
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
-      props.put("connection.myConnectionFactory.type", "QUEUE_CF");
+      props.put("connectionFactory.myConnectionFactory", "vm://0?type=QUEUE_CF");
       Context ctx = new InitialContext(props);
 
       ActiveMQConnectionFactory connectionFactory = (ActiveMQConnectionFactory) ctx.lookup("myConnectionFactory");
@@ -166,8 +143,7 @@ public class SimpleJNDIClientTest extends UnitTestCase
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
-      props.put("connection.myConnectionFactory.type", "QUEUE_XA_CF");
+      props.put("connectionFactory.myConnectionFactory", "vm://0?type=QUEUE_XA_CF");
       Context ctx = new InitialContext(props);
 
       ActiveMQConnectionFactory connectionFactory = (ActiveMQConnectionFactory) ctx.lookup("myConnectionFactory");
@@ -180,8 +156,7 @@ public class SimpleJNDIClientTest extends UnitTestCase
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
-      props.put("connection.myConnectionFactory.type", "TOPIC_CF");
+      props.put("connectionFactory.myConnectionFactory", "vm://0?type=TOPIC_CF");
       Context ctx = new InitialContext(props);
 
       ActiveMQConnectionFactory connectionFactory = (ActiveMQConnectionFactory) ctx.lookup("myConnectionFactory");
@@ -194,8 +169,7 @@ public class SimpleJNDIClientTest extends UnitTestCase
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
-      props.put("connection.myConnectionFactory.type", "TOPIC_XA_CF");
+      props.put("connectionFactory.myConnectionFactory", "vm://0?type=TOPIC_XA_CF");
       Context ctx = new InitialContext(props);
 
       ActiveMQConnectionFactory connectionFactory = (ActiveMQConnectionFactory) ctx.lookup("myConnectionFactory");
@@ -204,280 +178,97 @@ public class SimpleJNDIClientTest extends UnitTestCase
    }
 
    @Test
-   public void testCFWithProperties() throws NamingException, JMSException
+   public void testRemoteCFWithTCP() throws NamingException, JMSException
    {
-      // we don't test the 'ha' property here because it's not supported on a local connection factory (i.e. one
-      // constructed from an InitialContext where the environment doesn't contain the property "java.naming.provider.url")
-
-      long callFailoverTimeout = RandomUtil.randomPositiveLong();
-      long callTimeout = RandomUtil.randomPositiveLong();
-      long clientFailureCheckPeriod = RandomUtil.randomPositiveLong();
-      String clientID = RandomUtil.randomString();
-      int confirmationWindowSize = RandomUtil.randomPositiveInt();
-      String connectionLoadBalancingPolicyClassName = RandomUtil.randomString();
-      long connectionTTL = RandomUtil.randomPositiveLong();
-      int consumerMaxRate = RandomUtil.randomPositiveInt();
-      int consumerWindowSize = RandomUtil.randomPositiveInt();
-      int minLargeMessageSize = RandomUtil.randomPositiveInt();
-      int dupsOKBatchSize = RandomUtil.randomPositiveInt();
-      String groupID = RandomUtil.randomString();
-      int initialConnectAttempts = RandomUtil.randomPositiveInt();
-      int initialMessagePacketSize = RandomUtil.randomPositiveInt();
-      long maxRetryInterval = RandomUtil.randomPositiveLong();
-      int producerMaxRate = RandomUtil.randomPositiveInt();
-      int producerWindowSize = RandomUtil.randomPositiveInt();
-      int reconnectAttempts = RandomUtil.randomPositiveInt();
-      long retryInterval = RandomUtil.randomPositiveLong();
-      double retryIntervalMultiplier = RandomUtil.randomDouble();
-      int scheduledThreadPoolMaxSize = RandomUtil.randomPositiveInt();
-      int threadPoolMaxSize = RandomUtil.randomPositiveInt();
-      int transactionBatchSize = RandomUtil.randomPositiveInt();
-      boolean autoGroup = RandomUtil.randomBoolean();
-      boolean blockOnAcknowledge = RandomUtil.randomBoolean();
-      boolean blockOnDurableSend = RandomUtil.randomBoolean();
-      boolean blockOnNonDurableSend = RandomUtil.randomBoolean();
-      boolean cacheLargeMessagesClient = RandomUtil.randomBoolean();
-      boolean compressLargeMessage = RandomUtil.randomBoolean();
-      boolean failoverOnInitialConnection = RandomUtil.randomBoolean();
-      boolean preAcknowledge = RandomUtil.randomBoolean();
-      boolean useGlobalPools = RandomUtil.randomBoolean();
-
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
-      props.put("connection.myConnectionFactory.callFailoverTimeout", callFailoverTimeout);
-      props.put("connection.myConnectionFactory.callTimeout", callTimeout);
-      props.put("connection.myConnectionFactory.clientFailureCheckPeriod", clientFailureCheckPeriod);
-      props.put("connection.myConnectionFactory.clientID", clientID);
-      props.put("connection.myConnectionFactory.confirmationWindowSize", confirmationWindowSize);
-      props.put("connection.myConnectionFactory.connectionLoadBalancingPolicyClassName", connectionLoadBalancingPolicyClassName);
-      props.put("connection.myConnectionFactory.connectionTTL", connectionTTL);
-      props.put("connection.myConnectionFactory.consumerMaxRate", consumerMaxRate);
-      props.put("connection.myConnectionFactory.consumerWindowSize", consumerWindowSize);
-      props.put("connection.myConnectionFactory.minLargeMessageSize", minLargeMessageSize);
-      props.put("connection.myConnectionFactory.dupsOKBatchSize", dupsOKBatchSize);
-      props.put("connection.myConnectionFactory.groupID", groupID);
-      props.put("connection.myConnectionFactory.initialConnectAttempts", initialConnectAttempts);
-      props.put("connection.myConnectionFactory.initialMessagePacketSize", initialMessagePacketSize);
-      props.put("connection.myConnectionFactory.maxRetryInterval", maxRetryInterval);
-      props.put("connection.myConnectionFactory.producerMaxRate", producerMaxRate);
-      props.put("connection.myConnectionFactory.producerWindowSize", producerWindowSize);
-      props.put("connection.myConnectionFactory.reconnectAttempts", reconnectAttempts);
-      props.put("connection.myConnectionFactory.retryInterval", retryInterval);
-      props.put("connection.myConnectionFactory.retryIntervalMultiplier", retryIntervalMultiplier);
-      props.put("connection.myConnectionFactory.scheduledThreadPoolMaxSize", scheduledThreadPoolMaxSize);
-      props.put("connection.myConnectionFactory.threadPoolMaxSize", threadPoolMaxSize);
-      props.put("connection.myConnectionFactory.transactionBatchSize", transactionBatchSize);
-      props.put("connection.myConnectionFactory.blockOnAcknowledge", blockOnAcknowledge);
-      props.put("connection.myConnectionFactory.blockOnDurableSend", blockOnDurableSend);
-      props.put("connection.myConnectionFactory.blockOnNonDurableSend", blockOnNonDurableSend);
-      props.put("connection.myConnectionFactory.cacheLargeMessagesClient", cacheLargeMessagesClient);
-      props.put("connection.myConnectionFactory.compressLargeMessage", compressLargeMessage);
-      props.put("connection.myConnectionFactory.failoverOnInitialConnection", failoverOnInitialConnection);
-      props.put("connection.myConnectionFactory.autoGroup", autoGroup);
-      props.put("connection.myConnectionFactory.preAcknowledge", preAcknowledge);
-      props.put("connection.myConnectionFactory.useGlobalPools", useGlobalPools);
+      props.put("connectionFactory.myConnectionFactory", "tcp://127.0.0.1:5445");
       Context ctx = new InitialContext(props);
 
-      ActiveMQConnectionFactory cf = (ActiveMQConnectionFactory) ctx.lookup("myConnectionFactory");
+      ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("myConnectionFactory");
 
-      Assert.assertEquals(callFailoverTimeout, cf.getCallFailoverTimeout());
-      Assert.assertEquals(callTimeout, cf.getCallTimeout());
-      Assert.assertEquals(clientFailureCheckPeriod, cf.getClientFailureCheckPeriod());
-      Assert.assertEquals(clientID, cf.getClientID());
-      Assert.assertEquals(confirmationWindowSize, cf.getConfirmationWindowSize());
-      Assert.assertEquals(connectionLoadBalancingPolicyClassName, cf.getConnectionLoadBalancingPolicyClassName());
-      Assert.assertEquals(connectionTTL, cf.getConnectionTTL());
-      Assert.assertEquals(consumerMaxRate, cf.getConsumerMaxRate());
-      Assert.assertEquals(consumerWindowSize, cf.getConsumerWindowSize());
-      Assert.assertEquals(minLargeMessageSize, cf.getMinLargeMessageSize());
-      Assert.assertEquals(dupsOKBatchSize, cf.getDupsOKBatchSize());
-      Assert.assertEquals(groupID, cf.getGroupID());
-      Assert.assertEquals(initialConnectAttempts, cf.getInitialConnectAttempts());
-      Assert.assertEquals(initialMessagePacketSize, cf.getInitialMessagePacketSize());
-      Assert.assertEquals(maxRetryInterval, cf.getMaxRetryInterval());
-      Assert.assertEquals(producerMaxRate, cf.getProducerMaxRate());
-      Assert.assertEquals(producerWindowSize, cf.getProducerWindowSize());
-      Assert.assertEquals(reconnectAttempts, cf.getReconnectAttempts());
-      Assert.assertEquals(retryInterval, cf.getRetryInterval());
-      Assert.assertEquals(retryIntervalMultiplier, cf.getRetryIntervalMultiplier(), 0.0001);
-      Assert.assertEquals(scheduledThreadPoolMaxSize, cf.getScheduledThreadPoolMaxSize());
-      Assert.assertEquals(threadPoolMaxSize, cf.getThreadPoolMaxSize());
-      Assert.assertEquals(transactionBatchSize, cf.getTransactionBatchSize());
-      Assert.assertEquals(autoGroup, cf.isAutoGroup());
-      Assert.assertEquals(blockOnAcknowledge, cf.isBlockOnAcknowledge());
-      Assert.assertEquals(blockOnDurableSend, cf.isBlockOnDurableSend());
-      Assert.assertEquals(blockOnNonDurableSend, cf.isBlockOnNonDurableSend());
-      Assert.assertEquals(cacheLargeMessagesClient, cf.isCacheLargeMessagesClient());
-      Assert.assertEquals(compressLargeMessage, cf.isCompressLargeMessage());
-      Assert.assertEquals(failoverOnInitialConnection, cf.isFailoverOnInitialConnection());
-      Assert.assertEquals(preAcknowledge, cf.isPreAcknowledge());
-      Assert.assertEquals(useGlobalPools, cf.isUseGlobalPools());
+      connectionFactory.createConnection().close();
    }
 
    @Test
-   public void testCFWithStringProperties() throws NamingException, JMSException
+   public void testRemoteCFWithTCPandHA() throws NamingException, JMSException
    {
-      // we don't test the 'ha' property here because it's not supported on a local connection factory (i.e. one
-      // constructed from an InitialContext where the environment doesn't contain the property "java.naming.provider.url")
-
-      String callFailoverTimeout = Long.toString(RandomUtil.randomPositiveLong());
-      String callTimeout = Long.toString(RandomUtil.randomPositiveLong());
-      String clientFailureCheckPeriod = Long.toString(RandomUtil.randomPositiveLong());
-      String clientID = RandomUtil.randomString();
-      String confirmationWindowSize = Integer.toString(RandomUtil.randomPositiveInt());
-      String connectionLoadBalancingPolicyClassName = RandomUtil.randomString();
-      String connectionTTL = Long.toString(RandomUtil.randomPositiveLong());
-      String consumerMaxRate = Integer.toString(RandomUtil.randomPositiveInt());
-      String consumerWindowSize = Integer.toString(RandomUtil.randomPositiveInt());
-      String minLargeMessageSize = Integer.toString(RandomUtil.randomPositiveInt());
-      String dupsOKBatchSize = Integer.toString(RandomUtil.randomPositiveInt());
-      String groupID = RandomUtil.randomString();
-      String initialConnectAttempts = Integer.toString(RandomUtil.randomPositiveInt());
-      String initialMessagePacketSize = Integer.toString(RandomUtil.randomPositiveInt());
-      String maxRetryInterval = Long.toString(RandomUtil.randomPositiveLong());
-      String producerMaxRate = Integer.toString(RandomUtil.randomPositiveInt());
-      String producerWindowSize = Integer.toString(RandomUtil.randomPositiveInt());
-      String reconnectAttempts = Integer.toString(RandomUtil.randomPositiveInt());
-      String retryInterval = Long.toString(RandomUtil.randomPositiveLong());
-      String retryIntervalMultiplier = Double.toString(RandomUtil.randomDouble());
-      String scheduledThreadPoolMaxSize = Integer.toString(RandomUtil.randomPositiveInt());
-      String threadPoolMaxSize = Integer.toString(RandomUtil.randomPositiveInt());
-      String transactionBatchSize = Integer.toString(RandomUtil.randomPositiveInt());
-      String autoGroup = Boolean.toString(RandomUtil.randomBoolean());
-      String blockOnAcknowledge = Boolean.toString(RandomUtil.randomBoolean());
-      String blockOnDurableSend = Boolean.toString(RandomUtil.randomBoolean());
-      String blockOnNonDurableSend = Boolean.toString(RandomUtil.randomBoolean());
-      String cacheLargeMessagesClient = Boolean.toString(RandomUtil.randomBoolean());
-      String compressLargeMessage = Boolean.toString(RandomUtil.randomBoolean());
-      String failoverOnInitialConnection = Boolean.toString(RandomUtil.randomBoolean());
-      String preAcknowledge = Boolean.toString(RandomUtil.randomBoolean());
-      String useGlobalPools = Boolean.toString(RandomUtil.randomBoolean());
-
-      Hashtable props = new Hashtable<String, String>();
+      Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
-      props.put("connection.myConnectionFactory.callFailoverTimeout", callFailoverTimeout);
-      props.put("connection.myConnectionFactory.callTimeout", callTimeout);
-      props.put("connection.myConnectionFactory.clientFailureCheckPeriod", clientFailureCheckPeriod);
-      props.put("connection.myConnectionFactory.clientID", clientID);
-      props.put("connection.myConnectionFactory.confirmationWindowSize", confirmationWindowSize);
-      props.put("connection.myConnectionFactory.connectionLoadBalancingPolicyClassName", connectionLoadBalancingPolicyClassName);
-      props.put("connection.myConnectionFactory.connectionTTL", connectionTTL);
-      props.put("connection.myConnectionFactory.consumerMaxRate", consumerMaxRate);
-      props.put("connection.myConnectionFactory.consumerWindowSize", consumerWindowSize);
-      props.put("connection.myConnectionFactory.minLargeMessageSize", minLargeMessageSize);
-      props.put("connection.myConnectionFactory.dupsOKBatchSize", dupsOKBatchSize);
-      props.put("connection.myConnectionFactory.groupID", groupID);
-      props.put("connection.myConnectionFactory.initialConnectAttempts", initialConnectAttempts);
-      props.put("connection.myConnectionFactory.initialMessagePacketSize", initialMessagePacketSize);
-      props.put("connection.myConnectionFactory.maxRetryInterval", maxRetryInterval);
-      props.put("connection.myConnectionFactory.producerMaxRate", producerMaxRate);
-      props.put("connection.myConnectionFactory.producerWindowSize", producerWindowSize);
-      props.put("connection.myConnectionFactory.reconnectAttempts", reconnectAttempts);
-      props.put("connection.myConnectionFactory.retryInterval", retryInterval);
-      props.put("connection.myConnectionFactory.retryIntervalMultiplier", retryIntervalMultiplier);
-      props.put("connection.myConnectionFactory.scheduledThreadPoolMaxSize", scheduledThreadPoolMaxSize);
-      props.put("connection.myConnectionFactory.threadPoolMaxSize", threadPoolMaxSize);
-      props.put("connection.myConnectionFactory.transactionBatchSize", transactionBatchSize);
-      props.put("connection.myConnectionFactory.blockOnAcknowledge", blockOnAcknowledge);
-      props.put("connection.myConnectionFactory.blockOnDurableSend", blockOnDurableSend);
-      props.put("connection.myConnectionFactory.blockOnNonDurableSend", blockOnNonDurableSend);
-      props.put("connection.myConnectionFactory.cacheLargeMessagesClient", cacheLargeMessagesClient);
-      props.put("connection.myConnectionFactory.compressLargeMessage", compressLargeMessage);
-      props.put("connection.myConnectionFactory.failoverOnInitialConnection", failoverOnInitialConnection);
-      props.put("connection.myConnectionFactory.autoGroup", autoGroup);
-      props.put("connection.myConnectionFactory.preAcknowledge", preAcknowledge);
-      props.put("connection.myConnectionFactory.useGlobalPools", useGlobalPools);
+      props.put("connectionFactory.myConnectionFactory", "tcp://127.0.0.1:5445?ha=true");
       Context ctx = new InitialContext(props);
 
       ActiveMQConnectionFactory cf = (ActiveMQConnectionFactory) ctx.lookup("myConnectionFactory");
 
-      Assert.assertEquals(Long.parseLong(callFailoverTimeout), cf.getCallFailoverTimeout());
-      Assert.assertEquals(Long.parseLong(callTimeout), cf.getCallTimeout());
-      Assert.assertEquals(Long.parseLong(clientFailureCheckPeriod), cf.getClientFailureCheckPeriod());
-      Assert.assertEquals(clientID, cf.getClientID());
-      Assert.assertEquals(Integer.parseInt(confirmationWindowSize), cf.getConfirmationWindowSize());
-      Assert.assertEquals(connectionLoadBalancingPolicyClassName, cf.getConnectionLoadBalancingPolicyClassName());
-      Assert.assertEquals(Long.parseLong(connectionTTL), cf.getConnectionTTL());
-      Assert.assertEquals(Integer.parseInt(consumerMaxRate), cf.getConsumerMaxRate());
-      Assert.assertEquals(Integer.parseInt(consumerWindowSize), cf.getConsumerWindowSize());
-      Assert.assertEquals(Integer.parseInt(minLargeMessageSize), cf.getMinLargeMessageSize());
-      Assert.assertEquals(Integer.parseInt(dupsOKBatchSize), cf.getDupsOKBatchSize());
-      Assert.assertEquals(groupID, cf.getGroupID());
-      Assert.assertEquals(Integer.parseInt(initialConnectAttempts), cf.getInitialConnectAttempts());
-      Assert.assertEquals(Integer.parseInt(initialMessagePacketSize), cf.getInitialMessagePacketSize());
-      Assert.assertEquals(Long.parseLong(maxRetryInterval), cf.getMaxRetryInterval());
-      Assert.assertEquals(Integer.parseInt(producerMaxRate), cf.getProducerMaxRate());
-      Assert.assertEquals(Integer.parseInt(producerWindowSize), cf.getProducerWindowSize());
-      Assert.assertEquals(Integer.parseInt(reconnectAttempts), cf.getReconnectAttempts());
-      Assert.assertEquals(Long.parseLong(retryInterval), cf.getRetryInterval());
-      Assert.assertEquals(Double.parseDouble(retryIntervalMultiplier), cf.getRetryIntervalMultiplier(), 0.0001);
-      Assert.assertEquals(Integer.parseInt(scheduledThreadPoolMaxSize), cf.getScheduledThreadPoolMaxSize());
-      Assert.assertEquals(Integer.parseInt(threadPoolMaxSize), cf.getThreadPoolMaxSize());
-      Assert.assertEquals(Integer.parseInt(transactionBatchSize), cf.getTransactionBatchSize());
-      Assert.assertEquals(Boolean.parseBoolean(autoGroup), cf.isAutoGroup());
-      Assert.assertEquals(Boolean.parseBoolean(blockOnAcknowledge), cf.isBlockOnAcknowledge());
-      Assert.assertEquals(Boolean.parseBoolean(blockOnDurableSend), cf.isBlockOnDurableSend());
-      Assert.assertEquals(Boolean.parseBoolean(blockOnNonDurableSend), cf.isBlockOnNonDurableSend());
-      Assert.assertEquals(Boolean.parseBoolean(cacheLargeMessagesClient), cf.isCacheLargeMessagesClient());
-      Assert.assertEquals(Boolean.parseBoolean(compressLargeMessage), cf.isCompressLargeMessage());
-      Assert.assertEquals(Boolean.parseBoolean(failoverOnInitialConnection), cf.isFailoverOnInitialConnection());
-      Assert.assertEquals(Boolean.parseBoolean(preAcknowledge), cf.isPreAcknowledge());
-      Assert.assertEquals(Boolean.parseBoolean(useGlobalPools), cf.isUseGlobalPools());
+      Assert.assertEquals(true, cf.isHA());
    }
 
    @Test
-   public void testRemoteCFWithTCP() throws NamingException, JMSException
+   public void testRemoteCFWithJGroups() throws Exception
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(Context.PROVIDER_URL, "tcp://127.0.0.1:5445");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
+      props.put("connectionFactory.myConnectionFactory", "jgroups://mychannelid?file=test-jgroups-file_ping.xml");
       Context ctx = new InitialContext(props);
 
-      ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("myConnectionFactory");
-
-      connectionFactory.createConnection().close();
+      ActiveMQConnectionFactory connectionFactory = (ActiveMQConnectionFactory) ctx.lookup("myConnectionFactory");
+      connectionFactory.getDiscoveryGroupConfiguration().getBroadcastEndpointFactory().createBroadcastEndpoint().close(false);
    }
 
    @Test
-   public void testRemoteCFWithTCPandHA() throws NamingException, JMSException
+   public void testRemoteCFWithJgroupsWithTransportConfigFile() throws Exception
    {
-      boolean ha = true;
-
       Hashtable props = new Hashtable<>();
-      props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(Context.PROVIDER_URL, "tcp://127.0.0.1:5445");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
-      props.put("connection.myConnectionFactory.ha", ha);
+      props.put(Context.INITIAL_CONTEXT_FACTORY, ActiveMQInitialContextFactory.class.getCanonicalName());
+      props.put("connectionFactory.myConnectionFactory", "jgroups://testChannelName?file=test-jgroups-file_ping.xml&" +
+         ActiveMQInitialContextFactory.REFRESH_TIMEOUT + "=5000&" +
+         ActiveMQInitialContextFactory.DISCOVERY_INITIAL_WAIT_TIMEOUT + "=6000");
       Context ctx = new InitialContext(props);
 
       ActiveMQConnectionFactory cf = (ActiveMQConnectionFactory) ctx.lookup("myConnectionFactory");
 
-      Assert.assertEquals(ha, cf.isHA());
+      DiscoveryGroupConfiguration discoveryGroupConfiguration = cf.getDiscoveryGroupConfiguration();
+      Assert.assertEquals(5000, discoveryGroupConfiguration.getRefreshTimeout());
+      Assert.assertEquals(6000, discoveryGroupConfiguration.getDiscoveryInitialWaitTimeout());
+
+      BroadcastEndpoint broadcastEndpoint = cf.getDiscoveryGroupConfiguration().getBroadcastEndpointFactory().createBroadcastEndpoint();
+      Assert.assertTrue(broadcastEndpoint instanceof JGroupsFileBroadcastEndpoint);
+      broadcastEndpoint.close(false);
    }
 
    @Test
-   public void testRemoteCFWithJGroups() throws Exception
+   public void testRemoteCFWithJgroupsWithTransportConfigProps() throws Exception
    {
       Hashtable props = new Hashtable<>();
-      props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(Context.PROVIDER_URL, "jgroups://test-jgroups-file_ping.xml/");
+      props.put(Context.INITIAL_CONTEXT_FACTORY, ActiveMQInitialContextFactory.class.getCanonicalName());
+      props.put("connectionFactory.ConnectionFactory", "jgroups://testChannelName?properties=param=value&" +
+                                      ActiveMQInitialContextFactory.REFRESH_TIMEOUT + "=5000&" +
+                                      ActiveMQInitialContextFactory.DISCOVERY_INITIAL_WAIT_TIMEOUT + "=6000");
       Context ctx = new InitialContext(props);
 
-      ActiveMQConnectionFactory connectionFactory = (ActiveMQConnectionFactory) ctx.lookup("ConnectionFactory");
-      connectionFactory.getDiscoveryGroupConfiguration().getBroadcastEndpointFactoryConfiguration().createBroadcastEndpointFactory().createBroadcastEndpoint().close(false);
+      ActiveMQConnectionFactory cf = (ActiveMQConnectionFactory) ctx.lookup("ConnectionFactory");
+
+      DiscoveryGroupConfiguration discoveryGroupConfiguration = cf.getDiscoveryGroupConfiguration();
+      Assert.assertEquals(5000, discoveryGroupConfiguration.getRefreshTimeout());
+      Assert.assertEquals(6000, discoveryGroupConfiguration.getDiscoveryInitialWaitTimeout());
+
+      BroadcastEndpointFactory broadcastEndpointFactory = cf.getDiscoveryGroupConfiguration().getBroadcastEndpointFactory();
+      Assert.assertTrue(broadcastEndpointFactory instanceof JGroupsPropertiesBroadcastEndpointFactory);
+      JGroupsPropertiesBroadcastEndpointFactory endpointFactory =  (JGroupsPropertiesBroadcastEndpointFactory) broadcastEndpointFactory;
+      Assert.assertEquals(endpointFactory.getProperties(), "param=value");
+      Assert.assertEquals(endpointFactory.getChannelName(), "testChannelName");
    }
 
+
+
    @Test
-   public void testRemoteCFWithJgroupsWithTransportConfig() throws Exception
+   public void testRemoteCFWithJgroupsWithTransportConfigNullProps() throws Exception
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, ActiveMQInitialContextFactory.class.getCanonicalName());
-      props.put(Context.PROVIDER_URL, "jgroups://test-jgroups-file_ping.xml?" +
-         ActiveMQInitialContextFactory.REFRESH_TIMEOUT + "=5000&" +
-         ActiveMQInitialContextFactory.DISCOVERY_INITIAL_WAIT_TIMEOUT + "=6000");
+      props.put("connectionFactory.ConnectionFactory", "jgroups://testChannelName?" +
+                                      ActiveMQInitialContextFactory.REFRESH_TIMEOUT + "=5000&" +
+                                      ActiveMQInitialContextFactory.DISCOVERY_INITIAL_WAIT_TIMEOUT + "=6000");
       Context ctx = new InitialContext(props);
 
       ActiveMQConnectionFactory cf = (ActiveMQConnectionFactory) ctx.lookup("ConnectionFactory");
@@ -486,16 +277,20 @@ public class SimpleJNDIClientTest extends UnitTestCase
       Assert.assertEquals(5000, discoveryGroupConfiguration.getRefreshTimeout());
       Assert.assertEquals(6000, discoveryGroupConfiguration.getDiscoveryInitialWaitTimeout());
 
-      cf.getDiscoveryGroupConfiguration().getBroadcastEndpointFactoryConfiguration().createBroadcastEndpointFactory().createBroadcastEndpoint().close(false);
+      BroadcastEndpointFactory broadcastEndpointFactory = cf.getDiscoveryGroupConfiguration().getBroadcastEndpointFactory();
+      Assert.assertTrue(broadcastEndpointFactory instanceof JGroupsPropertiesBroadcastEndpointFactory);
+      JGroupsPropertiesBroadcastEndpointFactory endpointFactory =  (JGroupsPropertiesBroadcastEndpointFactory) broadcastEndpointFactory;
+      Assert.assertEquals(endpointFactory.getProperties(), null);
+      Assert.assertEquals(endpointFactory.getChannelName(), "testChannelName");
    }
 
+
    @Test
    public void testRemoteCFWithUDP() throws NamingException, JMSException
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(Context.PROVIDER_URL, "udp://" + getUDPDiscoveryAddress() + ":" + getUDPDiscoveryPort());
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
+      props.put("connectionFactory.myConnectionFactory", "udp://" + getUDPDiscoveryAddress() + ":" + getUDPDiscoveryPort());
       Context ctx = new InitialContext(props);
 
       ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("myConnectionFactory");
@@ -508,12 +303,11 @@ public class SimpleJNDIClientTest extends UnitTestCase
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, ActiveMQInitialContextFactory.class.getCanonicalName());
-      props.put(Context.PROVIDER_URL, "udp://" + getUDPDiscoveryAddress() + ":" + getUDPDiscoveryPort() + "?" +
+      props.put("connectionFactory.myConnectionFactory", "udp://" + getUDPDiscoveryAddress() + ":" + getUDPDiscoveryPort() + "?" +
          TransportConstants.LOCAL_ADDRESS_PROP_NAME + "=127.0.0.1&" +
          TransportConstants.LOCAL_PORT_PROP_NAME + "=1198&" +
          ActiveMQInitialContextFactory.REFRESH_TIMEOUT + "=5000&" +
          ActiveMQInitialContextFactory.DISCOVERY_INITIAL_WAIT_TIMEOUT + "=6000");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
       Context ctx = new InitialContext(props);
 
       ActiveMQConnectionFactory cf = (ActiveMQConnectionFactory) ctx.lookup("myConnectionFactory");
@@ -522,11 +316,12 @@ public class SimpleJNDIClientTest extends UnitTestCase
       Assert.assertEquals(5000, discoveryGroupConfiguration.getRefreshTimeout());
       Assert.assertEquals(6000, discoveryGroupConfiguration.getDiscoveryInitialWaitTimeout());
 
-      UDPBroadcastGroupConfiguration udpBroadcastGroupConfiguration = (UDPBroadcastGroupConfiguration) discoveryGroupConfiguration.getBroadcastEndpointFactoryConfiguration();
-      Assert.assertEquals("127.0.0.1", udpBroadcastGroupConfiguration.getLocalBindAddress());
-      Assert.assertEquals(1198, udpBroadcastGroupConfiguration.getLocalBindPort());
-      Assert.assertEquals(getUDPDiscoveryAddress(), udpBroadcastGroupConfiguration.getGroupAddress());
-      Assert.assertEquals(getUDPDiscoveryPort(), udpBroadcastGroupConfiguration.getGroupPort());
+      UDPBroadcastEndpointFactory udpBroadcastEndpointFactory = (UDPBroadcastEndpointFactory) discoveryGroupConfiguration.getBroadcastEndpointFactory();
+      //these 2 are transient so are ignored
+      Assert.assertEquals(null, udpBroadcastEndpointFactory.getLocalBindAddress());
+      Assert.assertEquals(-1, udpBroadcastEndpointFactory.getLocalBindPort());
+      Assert.assertEquals(getUDPDiscoveryAddress(), udpBroadcastEndpointFactory.getGroupAddress());
+      Assert.assertEquals(getUDPDiscoveryPort(), udpBroadcastEndpointFactory.getGroupPort());
    }
 
    @Test
@@ -534,8 +329,7 @@ public class SimpleJNDIClientTest extends UnitTestCase
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(Context.PROVIDER_URL, "tcp://127.0.0.1:5445,127.0.0.2:5446");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
+      props.put("connectionFactory.myConnectionFactory", "tcp://127.0.0.1:5445/httpEnabled=true&foo=bar,tcp://127.0.0.2:5446?httpEnabled=false?clientID=myClientID");
       Context ctx = new InitialContext(props);
 
       ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("myConnectionFactory");
@@ -548,7 +342,7 @@ public class SimpleJNDIClientTest extends UnitTestCase
    {
       Hashtable props = new Hashtable<>();
       props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
-      props.put(Context.PROVIDER_URL, "tcp://127.0.0.1:5445?" +
+      props.put("connectionFactory.myConnectionFactory", "tcp://127.0.0.1:5445?" +
          TransportConstants.SSL_ENABLED_PROP_NAME + "=mySSLEnabledPropValue&" +
          TransportConstants.HTTP_ENABLED_PROP_NAME + "=myHTTPEnabledPropValue&" +
          TransportConstants.HTTP_CLIENT_IDLE_PROP_NAME + "=myHTTPClientIdlePropValue&" +
@@ -578,7 +372,6 @@ public class SimpleJNDIClientTest extends UnitTestCase
          ActiveMQDefaultConfiguration.getPropMaskPassword() + "=myPropMaskPassword&" +
          ActiveMQDefaultConfiguration.getPropPasswordCodec() + "=myPropPasswordCodec&" +
          TransportConstants.NETTY_CONNECT_TIMEOUT + "=myNettyConnectTimeout&");
-      props.put(ActiveMQInitialContextFactory.CONNECTION_FACTORY_NAMES, "myConnectionFactory");
       Context ctx = new InitialContext(props);
 
       ActiveMQConnectionFactory cf = (ActiveMQConnectionFactory) ctx.lookup("myConnectionFactory");
@@ -634,7 +427,7 @@ public class SimpleJNDIClientTest extends UnitTestCase
       connectorNames.add(liveTC.getName());
 
       Map params = new HashMap();
-      params.put("server-id", 1);
+      params.put(org.apache.activemq.core.remoting.impl.invm.TransportConstants.SERVER_ID_PROP_NAME, 1);
 
       Configuration liveConf = createBasicConfig()
          .addAcceptorConfiguration(new TransportConfiguration(INVM_ACCEPTOR_FACTORY))
@@ -653,10 +446,10 @@ public class SimpleJNDIClientTest extends UnitTestCase
          .setName(bcGroupName)
          .setBroadcastPeriod(broadcastPeriod)
          .setConnectorInfos(connectorNames)
-         .setEndpointFactoryConfiguration(new UDPBroadcastGroupConfiguration()
-                                             .setGroupAddress(groupAddress)
-                                             .setGroupPort(groupPort)
-                                             .setLocalBindPort(localBindPort));
+         .setEndpointFactory(new UDPBroadcastEndpointFactory()
+                                   .setGroupAddress(groupAddress)
+                                   .setGroupPort(groupPort)
+                                   .setLocalBindPort(localBindPort));
 
       List<BroadcastGroupConfiguration> bcConfigs1 = new ArrayList<BroadcastGroupConfiguration>();
       bcConfigs1.add(bcConfig1);

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/3b76ccc9/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/connection/ConnectionFactorySerializationTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/connection/ConnectionFactorySerializationTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/connection/ConnectionFactorySerializationTest.java
index 7b75c6a..37b0dc3 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/connection/ConnectionFactorySerializationTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/connection/ConnectionFactorySerializationTest.java
@@ -16,22 +16,35 @@
  */
 package org.apache.activemq.tests.integration.jms.connection;
 
+import java.beans.PropertyDescriptor;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.apache.activemq.api.core.DiscoveryGroupConfiguration;
-import org.apache.activemq.api.core.UDPBroadcastGroupConfiguration;
+import org.apache.activemq.api.core.JGroupsFileBroadcastEndpointFactory;
+import org.apache.activemq.api.core.JGroupsPropertiesBroadcastEndpointFactory;
+import org.apache.activemq.api.core.TransportConfiguration;
+import org.apache.activemq.api.core.UDPBroadcastEndpointFactory;
 import org.apache.activemq.api.jms.JMSFactoryType;
+import org.apache.activemq.core.remoting.impl.netty.TransportConstants;
 import org.apache.activemq.jms.client.ActiveMQConnectionFactory;
+import org.apache.activemq.jms.server.config.ConnectionFactoryConfiguration;
+import org.apache.activemq.jms.server.config.impl.ConnectionFactoryConfigurationImpl;
 import org.apache.activemq.tests.util.JMSTestBase;
+import org.apache.activemq.tests.util.RandomUtil;
+import org.apache.commons.beanutils.BeanUtilsBean;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -53,57 +66,297 @@ public class ConnectionFactorySerializationTest extends JMSTestBase
    @Before
    public void setUp() throws Exception
    {
-      try
-      {
-         super.setUp();
-         // Deploy a connection factory with discovery
-         List<String> bindings = new ArrayList<String>();
-         bindings.add("MyConnectionFactory");
-         final String groupAddress = getUDPDiscoveryAddress();
-         final int port = getUDPDiscoveryPort();
-         String localBindAddress = getLocalHost().getHostAddress();
-
-         UDPBroadcastGroupConfiguration config = new UDPBroadcastGroupConfiguration()
-            .setGroupAddress(groupAddress)
-            .setGroupPort(port)
-            .setLocalBindAddress(localBindAddress)
-            .setLocalBindPort(8580);
-
-         DiscoveryGroupConfiguration dcConfig = new DiscoveryGroupConfiguration()
-            .setName("dg1")
-            .setRefreshTimeout(5000)
-            .setDiscoveryInitialWaitTimeout(5000)
-            .setBroadcastEndpointFactoryConfiguration(config);
+      super.setUp();
+   }
 
-         jmsServer.getActiveMQServer().getConfiguration().getDiscoveryGroupConfigurations().put(dcConfig.getName(), dcConfig);
+   // Public --------------------------------------------------------
 
-         jmsServer.createConnectionFactory("MyConnectionFactory",
-                                           false,
-                                           JMSFactoryType.CF,
-                                           dcConfig.getName(),
-                                           "/MyConnectionFactory");
-      }
-      catch (Exception e)
-      {
-         e.printStackTrace();
-      }
+   @Test
+   public void testConnectionFactoryUDP() throws Exception
+   {
+      createDiscoveryFactoryUDP();
+      cf = (ActiveMQConnectionFactory) namingContext.lookup("/MyConnectionFactory");
 
+      // apparently looking up the connection factory with the org.apache.activemq.jms.tests.tools.container.InVMInitialContextFactory
+      // is not enough to actually serialize it so we serialize it manually
+      byte[] x = serialize(cf);
+      ActiveMQConnectionFactory y = deserialize(x, ActiveMQConnectionFactory.class);
+      checkEquals(cf, y);
+      DiscoveryGroupConfiguration dgc = y.getDiscoveryGroupConfiguration();
+      Assert.assertEquals(dgc.getName(), "dg1");
+      Assert.assertEquals(dgc.getDiscoveryInitialWaitTimeout(), 5000);
+      Assert.assertEquals(dgc.getRefreshTimeout(), 5000);
+      Assert.assertTrue(dgc.getBroadcastEndpointFactory() instanceof UDPBroadcastEndpointFactory);
+      UDPBroadcastEndpointFactory befc = (UDPBroadcastEndpointFactory) dgc.getBroadcastEndpointFactory();
+      Assert.assertEquals(-1, befc.getLocalBindPort());
+      Assert.assertEquals(null, befc.getLocalBindAddress());
+      Assert.assertEquals(1234, befc.getGroupPort());
+      Assert.assertEquals("1.2.3.4", befc.getGroupAddress());
    }
 
-   // Public --------------------------------------------------------
+   @Test
+   public void testConnectionFactoryJgroupsFile() throws Exception
+   {
+      createDiscoveryFactoryJGroupsFile();
+      cf = (ActiveMQConnectionFactory) namingContext.lookup("/MyConnectionFactory");
+
+      // apparently looking up the connection factory with the org.apache.activemq.jms.tests.tools.container.InVMInitialContextFactory
+      // is not enough to actually serialize it so we serialize it manually
+      byte[] x = serialize(cf);
+      ActiveMQConnectionFactory y = deserialize(x, ActiveMQConnectionFactory.class);
+      checkEquals(cf, y);
+      DiscoveryGroupConfiguration dgc = y.getDiscoveryGroupConfiguration();
+      Assert.assertEquals(dgc.getName(), "dg1");
+      Assert.assertEquals(dgc.getDiscoveryInitialWaitTimeout(), 5000);
+      Assert.assertEquals(dgc.getRefreshTimeout(), 5000);
+      Assert.assertTrue(dgc.getBroadcastEndpointFactory() instanceof JGroupsFileBroadcastEndpointFactory);
+      JGroupsFileBroadcastEndpointFactory befc = (JGroupsFileBroadcastEndpointFactory) dgc.getBroadcastEndpointFactory();
+      Assert.assertEquals("myChannel", befc.getChannelName());
+      Assert.assertEquals("/META-INF/myfile.xml", befc.getFile());
+   }
 
    @Test
-   public void testNullLocalBindAddress() throws Exception
+   public void testConnectionFactoryJgroupsProperties() throws Exception
    {
+      createDiscoveryFactoryJGroupsProperties();
       cf = (ActiveMQConnectionFactory) namingContext.lookup("/MyConnectionFactory");
 
       // apparently looking up the connection factory with the org.apache.activemq.jms.tests.tools.container.InVMInitialContextFactory
       // is not enough to actually serialize it so we serialize it manually
       byte[] x = serialize(cf);
       ActiveMQConnectionFactory y = deserialize(x, ActiveMQConnectionFactory.class);
-      Assert.assertEquals(null, ((UDPBroadcastGroupConfiguration) y.getDiscoveryGroupConfiguration().getBroadcastEndpointFactoryConfiguration()).getLocalBindAddress());
+      checkEquals(cf, y);
+      DiscoveryGroupConfiguration dgc = y.getDiscoveryGroupConfiguration();
+      Assert.assertEquals(dgc.getName(), "dg1");
+      Assert.assertEquals(dgc.getDiscoveryInitialWaitTimeout(), 5000);
+      Assert.assertEquals(dgc.getRefreshTimeout(), 5000);
+      Assert.assertTrue(dgc.getBroadcastEndpointFactory() instanceof JGroupsPropertiesBroadcastEndpointFactory);
+      JGroupsPropertiesBroadcastEndpointFactory befc = (JGroupsPropertiesBroadcastEndpointFactory) dgc.getBroadcastEndpointFactory();
+      Assert.assertEquals("myChannel", befc.getChannelName());
+      Assert.assertEquals("param=1,param2=2", befc.getProperties());
    }
 
+   @Test
+   public void testConnectionFactoryStatic1() throws Exception
+   {
+      createStaticFactory(true);
+      cf = (ActiveMQConnectionFactory) namingContext.lookup("/MyConnectionFactory");
+
+      // apparently looking up the connection factory with the org.apache.activemq.jms.tests.tools.container.InVMInitialContextFactory
+      // is not enough to actually serialize it so we serialize it manually
+      byte[] x = serialize(cf);
+      ActiveMQConnectionFactory y = deserialize(x, ActiveMQConnectionFactory.class);
+      checkEquals(cf, y);
+      TransportConfiguration[] staticConnectors = y.getStaticConnectors();
+      Assert.assertEquals(staticConnectors.length, 2);
+      TransportConfiguration tc0 = cf.getStaticConnectors()[0];
+      TransportConfiguration y0 = y.getStaticConnectors()[0];
+      Map<String, Object> ctParams = tc0.getParams();
+      Map<String, Object> y0Params = y0.getParams();
+      Assert.assertEquals(ctParams.size(), y0Params.size());
+      for (String key : y0Params.keySet())
+      {
+         Assert.assertEquals(ctParams.get(key), y0Params.get(key));
+      }
+   }
+
+   private void createDiscoveryFactoryUDP() throws Exception
+   {
+      // Deploy a connection factory with discovery
+      List<String> bindings = new ArrayList<String>();
+      bindings.add("MyConnectionFactory");
+      final String groupAddress = "1.2.3.4";
+      final int port = 1234;
+      String localBindAddress = getLocalHost().getHostAddress();
+
+      UDPBroadcastEndpointFactory config = new UDPBroadcastEndpointFactory()
+         .setGroupAddress(groupAddress)
+         .setGroupPort(port)
+         .setLocalBindAddress(localBindAddress)
+         .setLocalBindPort(8580);
+
+      DiscoveryGroupConfiguration dcConfig = new DiscoveryGroupConfiguration()
+         .setName("dg1")
+         .setRefreshTimeout(5000)
+         .setDiscoveryInitialWaitTimeout(5000)
+         .setBroadcastEndpointFactory(config);
+
+      jmsServer.getActiveMQServer().getConfiguration().getDiscoveryGroupConfigurations().put(dcConfig.getName(), dcConfig);
+
+      jmsServer.createConnectionFactory("MyConnectionFactory",
+                                        false,
+                                        JMSFactoryType.CF,
+                                        dcConfig.getName(),
+                                        "/MyConnectionFactory");
+   }
+
+   private void createDiscoveryFactoryJGroupsFile() throws Exception
+   {
+      // Deploy a connection factory with discovery
+      List<String> bindings = new ArrayList<String>();
+      bindings.add("MyConnectionFactory");
+
+      JGroupsFileBroadcastEndpointFactory config = new JGroupsFileBroadcastEndpointFactory()
+            .setChannelName("myChannel")
+            .setFile("/META-INF/myfile.xml");
+
+      DiscoveryGroupConfiguration dcConfig = new DiscoveryGroupConfiguration()
+            .setName("dg1")
+         .setRefreshTimeout(5000)
+         .setDiscoveryInitialWaitTimeout(5000)
+         .setBroadcastEndpointFactory(config);
+
+      jmsServer.getActiveMQServer().getConfiguration().getDiscoveryGroupConfigurations().put(dcConfig.getName(), dcConfig);
+
+      jmsServer.createConnectionFactory("MyConnectionFactory",
+                                        false,
+                                        JMSFactoryType.CF,
+                                        dcConfig.getName(),
+                                        "/MyConnectionFactory");
+   }
+
+   private void createDiscoveryFactoryJGroupsProperties() throws Exception
+   {
+      // Deploy a connection factory with discovery
+      List<String> bindings = new ArrayList<String>();
+      bindings.add("MyConnectionFactory");
+
+      JGroupsPropertiesBroadcastEndpointFactory config = new JGroupsPropertiesBroadcastEndpointFactory()
+            .setChannelName("myChannel")
+            .setProperties("param=1,param2=2");
+
+      DiscoveryGroupConfiguration dcConfig = new DiscoveryGroupConfiguration()
+            .setName("dg1")
+         .setRefreshTimeout(5000)
+         .setDiscoveryInitialWaitTimeout(5000)
+         .setBroadcastEndpointFactory(config);
+
+      jmsServer.getActiveMQServer().getConfiguration().getDiscoveryGroupConfigurations().put(dcConfig.getName(), dcConfig);
+
+      jmsServer.createConnectionFactory("MyConnectionFactory",
+                                        false,
+                                        JMSFactoryType.CF,
+                                        dcConfig.getName(),
+                                        "/MyConnectionFactory");
+   }
+
+   private void createStaticFactory(boolean b) throws Exception
+   {
+      HashMap<String, Object> params = new HashMap<>();
+      Set<String> allowableConnectorKeys = TransportConstants.ALLOWABLE_CONNECTOR_KEYS;
+      for (String allowableConnectorKey : allowableConnectorKeys)
+      {
+         String value = RandomUtil.randomString();
+         params.put(allowableConnectorKey, value);
+      }
+      params.put("host", "localhost0");
+      params.put("port", "1234");
+
+      TransportConfiguration main = new TransportConfiguration(NETTY_CONNECTOR_FACTORY, params);
+
+      jmsServer.getActiveMQServer().getConfiguration().getConnectorConfigurations().put(main.getName(), main);
+
+      HashMap<String, Object> params2 = new HashMap<>();
+      for (String allowableConnectorKey : allowableConnectorKeys)
+      {
+         String value = RandomUtil.randomString();
+         params2.put(allowableConnectorKey, value);
+      }
+      params2.put("host", "localhost1");
+      params2.put("port", "5678");
+
+      TransportConfiguration main2 = new TransportConfiguration(NETTY_CONNECTOR_FACTORY, params2);
+
+      jmsServer.getActiveMQServer().getConfiguration().getConnectorConfigurations().put(main2.getName(), main2);
+
+      ArrayList<String> connectorNames = new ArrayList<String>();
+      connectorNames.add(main.getName());
+      connectorNames.add(main2.getName());
+      ConnectionFactoryConfiguration configuration = new ConnectionFactoryConfigurationImpl()
+            .setName("MyConnectionFactory")
+            .setHA(b)
+            .setConnectorNames(connectorNames)
+            .setClientID("clientID")
+            .setClientFailureCheckPeriod(-1)
+            .setConnectionTTL(-2)
+            .setFactoryType(JMSFactoryType.CF)
+            .setCallTimeout(-3)
+            .setCallFailoverTimeout(-4)
+            .setCacheLargeMessagesClient(b)
+            .setMinLargeMessageSize(-5)
+            .setConsumerWindowSize(-6)
+            .setConsumerMaxRate(-7)
+            .setConfirmationWindowSize(-8)
+            .setProducerWindowSize(-9)
+            .setProducerMaxRate(-10)
+            .setBlockOnAcknowledge(b)
+            .setBlockOnDurableSend(b)
+            .setBlockOnNonDurableSend(b)
+            .setAutoGroup(b)
+            .setPreAcknowledge(b)
+            .setLoadBalancingPolicyClassName("foobar")
+            .setTransactionBatchSize(-11)
+            .setDupsOKBatchSize(-12)
+            .setUseGlobalPools(b)
+            .setScheduledThreadPoolMaxSize(-13)
+            .setThreadPoolMaxSize(-14)
+            .setRetryInterval(-15)
+            .setRetryIntervalMultiplier(-16)
+            .setMaxRetryInterval(-17)
+            .setReconnectAttempts(-18)
+            .setFailoverOnInitialConnection(b)
+            .setGroupID("groupID");
+
+      jmsServer.createConnectionFactory(false, configuration, "/MyConnectionFactory");
+   }
+
+   private void populate(StringBuilder sb, BeanUtilsBean bean, ActiveMQConnectionFactory factory) throws IllegalAccessException, InvocationTargetException
+   {
+      PropertyDescriptor[] descriptors = bean.getPropertyUtils().getPropertyDescriptors(factory);
+      for (PropertyDescriptor descriptor : descriptors)
+      {
+         if (descriptor.getWriteMethod() != null && descriptor.getReadMethod() != null)
+         {
+            if (descriptor.getPropertyType() == String.class)
+            {
+               String value = RandomUtil.randomString();
+               bean.setProperty(factory, descriptor.getName(), value);
+               sb.append("&").append(descriptor.getName()).append("=").append(value);
+            }
+            else if (descriptor.getPropertyType() == int.class)
+            {
+               int value = RandomUtil.randomPositiveInt();
+               bean.setProperty(factory, descriptor.getName(), value);
+               sb.append("&").append(descriptor.getName()).append("=").append(value);
+            }
+            else if (descriptor.getPropertyType() == long.class)
+            {
+               long value = RandomUtil.randomPositiveLong();
+               bean.setProperty(factory, descriptor.getName(), value);
+               sb.append("&").append(descriptor.getName()).append("=").append(value);
+            }
+            else if (descriptor.getPropertyType() == double.class)
+            {
+               double value = RandomUtil.randomDouble();
+               bean.setProperty(factory, descriptor.getName(), value);
+               sb.append("&").append(descriptor.getName()).append("=").append(value);
+            }
+         }
+      }
+   }
+
+   private static void checkEquals(Object factory, Object factory2) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException
+   {
+      BeanUtilsBean bean = new BeanUtilsBean();
+      PropertyDescriptor[] descriptors = bean.getPropertyUtils().getPropertyDescriptors(factory);
+      for (PropertyDescriptor descriptor : descriptors)
+      {
+         if (descriptor.getWriteMethod() != null && descriptor.getReadMethod() != null)
+         {
+            Assert.assertEquals(descriptor.getName() + " incorrect", bean.getProperty(factory, descriptor.getName()),bean.getProperty(factory2, descriptor.getName()));
+         }
+      }
+   }
    private static <T extends Serializable> byte[] serialize(T obj) throws IOException
    {
       ByteArrayOutputStream baos = new ByteArrayOutputStream();

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/3b76ccc9/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/connection/ConnectionFactoryWithJGroupsSerializationTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/connection/ConnectionFactoryWithJGroupsSerializationTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/connection/ConnectionFactoryWithJGroupsSerializationTest.java
index ab643ec..6a033c0 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/connection/ConnectionFactoryWithJGroupsSerializationTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/connection/ConnectionFactoryWithJGroupsSerializationTest.java
@@ -25,9 +25,10 @@ import java.io.Serializable;
 
 import javax.jms.Queue;
 
-import org.apache.activemq.api.core.BroadcastEndpointFactoryConfiguration;
+import org.apache.activemq.api.core.BroadcastEndpointFactory;
+import org.apache.activemq.api.core.ChannelBroadcastEndpointFactory;
 import org.apache.activemq.api.core.DiscoveryGroupConfiguration;
-import org.apache.activemq.api.core.JGroupsBroadcastGroupConfiguration;
+import org.apache.activemq.api.core.JGroupsFileBroadcastEndpointFactory;
 import org.apache.activemq.api.jms.JMSFactoryType;
 import org.apache.activemq.jms.client.ActiveMQConnectionFactory;
 import org.apache.activemq.tests.util.JMSTestBase;
@@ -93,20 +94,22 @@ public class ConnectionFactoryWithJGroupsSerializationTest extends JMSTestBase
          String channelName1 = "channel1";
          String channelName2 = "channel2";
 
-         JGroupsBroadcastGroupConfiguration jgroupsBroadcastCfg1 = new JGroupsBroadcastGroupConfiguration(channel, channelName1);
-         JGroupsBroadcastGroupConfiguration jgroupsBroadcastCfg2 = new JGroupsBroadcastGroupConfiguration(jgroupsConfigString, channelName2);
+         BroadcastEndpointFactory jgroupsBroadcastCfg1 = new ChannelBroadcastEndpointFactory(channel, channelName1);
+         BroadcastEndpointFactory jgroupsBroadcastCfg2 = new JGroupsFileBroadcastEndpointFactory()
+               .setChannelName(channelName2)
+               .setFile(jgroupsConfigString);
 
          DiscoveryGroupConfiguration dcConfig1 = new DiscoveryGroupConfiguration()
             .setName("dg1")
             .setRefreshTimeout(5000)
             .setDiscoveryInitialWaitTimeout(5000)
-            .setBroadcastEndpointFactoryConfiguration(jgroupsBroadcastCfg1);
+            .setBroadcastEndpointFactory(jgroupsBroadcastCfg1);
 
          DiscoveryGroupConfiguration dcConfig2 = new DiscoveryGroupConfiguration()
             .setName("dg2")
             .setRefreshTimeout(5000)
             .setDiscoveryInitialWaitTimeout(5000)
-            .setBroadcastEndpointFactoryConfiguration(jgroupsBroadcastCfg2);
+            .setBroadcastEndpointFactory(jgroupsBroadcastCfg2);
 
          jmsServer.getActiveMQServer().getConfiguration().getDiscoveryGroupConfigurations().put(dcConfig1.getName(), dcConfig1);
          jmsServer.getActiveMQServer().getConfiguration().getDiscoveryGroupConfigurations().put(dcConfig2.getName(), dcConfig2);
@@ -160,8 +163,8 @@ public class ConnectionFactoryWithJGroupsSerializationTest extends JMSTestBase
       byte[] x = serialize(jmsCf2);
       ActiveMQConnectionFactory jmsCf2Copy = deserialize(x, ActiveMQConnectionFactory.class);
       assertNotNull(jmsCf2Copy);
-      BroadcastEndpointFactoryConfiguration broadcastEndpoint = jmsCf2Copy.getDiscoveryGroupConfiguration().getBroadcastEndpointFactoryConfiguration();
-      assertTrue(broadcastEndpoint instanceof JGroupsBroadcastGroupConfiguration);
+      BroadcastEndpointFactory broadcastEndpoint = jmsCf2Copy.getDiscoveryGroupConfiguration().getBroadcastEndpointFactory();
+      assertTrue(broadcastEndpoint instanceof JGroupsFileBroadcastEndpointFactory);
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/3b76ccc9/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/server/JMSServerDeployerTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/server/JMSServerDeployerTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/server/JMSServerDeployerTest.java
index c3b3de3..2ebaf0e 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/server/JMSServerDeployerTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/jms/server/JMSServerDeployerTest.java
@@ -22,7 +22,7 @@ import javax.naming.Context;
 
 import org.apache.activemq.api.core.DiscoveryGroupConfiguration;
 import org.apache.activemq.api.core.TransportConfiguration;
-import org.apache.activemq.api.core.UDPBroadcastGroupConfiguration;
+import org.apache.activemq.api.core.UDPBroadcastEndpointFactory;
 import org.apache.activemq.core.config.Configuration;
 import org.apache.activemq.core.registry.JndiBindingRegistry;
 import org.apache.activemq.core.remoting.impl.netty.NettyConnectorFactory;
@@ -126,10 +126,10 @@ public class JMSServerDeployerTest extends ServiceTestBase
          .setName("mygroup")
          .setRefreshTimeout(5432)
          .setDiscoveryInitialWaitTimeout(5432)
-         .setBroadcastEndpointFactoryConfiguration(new UDPBroadcastGroupConfiguration()
-                                                      .setGroupAddress("243.7.7.7")
-                                                      .setGroupPort(12345)
-                                                      .setLocalBindAddress("172.16.8.10"));
+         .setBroadcastEndpointFactory(new UDPBroadcastEndpointFactory()
+                                            .setGroupAddress("243.7.7.7")
+                                            .setGroupPort(12345)
+                                            .setLocalBindAddress("172.16.8.10"));
 
       config = createBasicConfig()
          .addConnectorConfiguration("netty", new TransportConfiguration(NettyConnectorFactory.class.getName()))

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/3b76ccc9/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ActiveMQServerControlTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ActiveMQServerControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ActiveMQServerControlTest.java
index 3016d05..806a3fa 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ActiveMQServerControlTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ActiveMQServerControlTest.java
@@ -42,6 +42,7 @@ import org.apache.activemq.core.config.Configuration;
 import org.apache.activemq.core.messagecounter.impl.MessageCounterManagerImpl;
 import org.apache.activemq.core.remoting.impl.invm.InVMAcceptorFactory;
 import org.apache.activemq.core.remoting.impl.invm.InVMConnectorFactory;
+import org.apache.activemq.core.remoting.impl.invm.TransportConstants;
 import org.apache.activemq.core.server.ActiveMQServer;
 import org.apache.activemq.core.server.ActiveMQServers;
 import org.apache.activemq.core.settings.impl.SlowConsumerPolicy;
@@ -1019,7 +1020,7 @@ public class ActiveMQServerControlTest extends ManagementTestBase
       conf.setSecurityEnabled(false);
       conf.getAcceptorConfigurations().clear();
       HashMap<String, Object> params = new HashMap<String, Object>();
-      params.put("server-id", "2");
+      params.put(TransportConstants.SERVER_ID_PROP_NAME, "2");
       conf.getAcceptorConfigurations().add(new TransportConfiguration(InVMAcceptorFactory.class.getName(), params));
       ActiveMQServer server2 = ActiveMQServers.newActiveMQServer(conf, null, true);
       this.conf.getConnectorConfigurations().clear();

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/3b76ccc9/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/BroadcastGroupControlTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/BroadcastGroupControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/BroadcastGroupControlTest.java
index 3462601..ccd41b8 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/BroadcastGroupControlTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/BroadcastGroupControlTest.java
@@ -25,7 +25,7 @@ import org.junit.Assert;
 
 import org.apache.activemq.api.core.BroadcastGroupConfiguration;
 import org.apache.activemq.api.core.TransportConfiguration;
-import org.apache.activemq.api.core.UDPBroadcastGroupConfiguration;
+import org.apache.activemq.api.core.UDPBroadcastEndpointFactory;
 import org.apache.activemq.api.core.management.BroadcastGroupControl;
 import org.apache.activemq.core.config.Configuration;
 import org.apache.activemq.core.server.ActiveMQServer;
@@ -50,10 +50,10 @@ public class BroadcastGroupControlTest extends ManagementTestBase
          .setName(RandomUtil.randomString())
          .setBroadcastPeriod(RandomUtil.randomPositiveInt())
          .setConnectorInfos(connectorInfos)
-         .setEndpointFactoryConfiguration(new UDPBroadcastGroupConfiguration()
-            .setGroupAddress("231.7.7.7")
-            .setGroupPort(1199)
-            .setLocalBindPort(1198));
+         .setEndpointFactory(new UDPBroadcastEndpointFactory()
+                                   .setGroupAddress("231.7.7.7")
+                                   .setGroupPort(1199)
+                                   .setLocalBindPort(1198));
    }
 
    public static Pair<String, String> randomPair()
@@ -82,7 +82,7 @@ public class BroadcastGroupControlTest extends ManagementTestBase
 
       BroadcastGroupControl broadcastGroupControl = createManagementControl(broadcastGroupConfig.getName());
 
-      UDPBroadcastGroupConfiguration udpCfg = (UDPBroadcastGroupConfiguration) broadcastGroupConfig.getEndpointFactoryConfiguration();
+      UDPBroadcastEndpointFactory udpCfg = (UDPBroadcastEndpointFactory) broadcastGroupConfig.getEndpointFactory();
       Assert.assertEquals(broadcastGroupConfig.getName(), broadcastGroupControl.getName());
       Assert.assertEquals(udpCfg.getGroupAddress(), broadcastGroupControl.getGroupAddress());
       Assert.assertEquals(udpCfg.getGroupPort(), broadcastGroupControl.getGroupPort());

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/3b76ccc9/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ClusterConnectionControl2Test.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ClusterConnectionControl2Test.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ClusterConnectionControl2Test.java
index 93f6e63..8c4341c 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ClusterConnectionControl2Test.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ClusterConnectionControl2Test.java
@@ -33,7 +33,7 @@ import org.junit.Assert;
 import org.apache.activemq.api.core.BroadcastGroupConfiguration;
 import org.apache.activemq.api.core.DiscoveryGroupConfiguration;
 import org.apache.activemq.api.core.TransportConfiguration;
-import org.apache.activemq.api.core.UDPBroadcastGroupConfiguration;
+import org.apache.activemq.api.core.UDPBroadcastEndpointFactory;
 import org.apache.activemq.api.core.management.ClusterConnectionControl;
 import org.apache.activemq.core.config.ClusterConnectionConfiguration;
 import org.apache.activemq.core.config.Configuration;
@@ -133,17 +133,17 @@ public class ClusterConnectionControl2Test extends ManagementTestBase
          .setName(discoveryName)
          .setBroadcastPeriod(250)
          .setConnectorInfos(connectorInfos)
-         .setEndpointFactoryConfiguration(new UDPBroadcastGroupConfiguration()
-            .setGroupAddress(groupAddress)
-            .setGroupPort(groupPort));
+         .setEndpointFactory(new UDPBroadcastEndpointFactory()
+                                   .setGroupAddress(groupAddress)
+                                   .setGroupPort(groupPort));
 
       DiscoveryGroupConfiguration discoveryGroupConfig = new DiscoveryGroupConfiguration()
          .setName(discoveryName)
          .setRefreshTimeout(0)
          .setDiscoveryInitialWaitTimeout(0)
-         .setBroadcastEndpointFactoryConfiguration(new UDPBroadcastGroupConfiguration()
-            .setGroupAddress(groupAddress)
-            .setGroupPort(groupPort));
+         .setBroadcastEndpointFactory(new UDPBroadcastEndpointFactory()
+                                            .setGroupAddress(groupAddress)
+                                            .setGroupPort(groupPort));
 
       clusterConnectionConfig_0 = new ClusterConnectionConfiguration()
          .setName(clusterName)

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/3b76ccc9/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ClusterConnectionControlTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ClusterConnectionControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ClusterConnectionControlTest.java
index c787678..041cd3e 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ClusterConnectionControlTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/management/ClusterConnectionControlTest.java
@@ -31,7 +31,7 @@ import org.junit.Assert;
 import org.apache.activemq.api.core.DiscoveryGroupConfiguration;
 import org.apache.activemq.api.core.SimpleString;
 import org.apache.activemq.api.core.TransportConfiguration;
-import org.apache.activemq.api.core.UDPBroadcastGroupConfiguration;
+import org.apache.activemq.api.core.UDPBroadcastEndpointFactory;
 import org.apache.activemq.api.core.management.ClusterConnectionControl;
 import org.apache.activemq.api.core.management.CoreNotificationType;
 import org.apache.activemq.api.core.management.ObjectNameBuilder;
@@ -236,9 +236,9 @@ public class ClusterConnectionControlTest extends ManagementTestBase
          .setName(discoveryGroupName)
          .setRefreshTimeout(500)
          .setDiscoveryInitialWaitTimeout(0)
-         .setBroadcastEndpointFactoryConfiguration(new UDPBroadcastGroupConfiguration()
-                                                      .setGroupAddress("230.1.2.3")
-                                                      .setGroupPort(6745));
+         .setBroadcastEndpointFactory(new UDPBroadcastEndpointFactory()
+                                            .setGroupAddress("230.1.2.3")
+                                            .setGroupPort(6745));
 
       Configuration conf_1 = createBasicConfig()
          .addAcceptorConfiguration(acceptorConfig)

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/3b76ccc9/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/ActiveMQRAClusteredTestBase.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/ActiveMQRAClusteredTestBase.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/ActiveMQRAClusteredTestBase.java
index b33e43d..aeccc02 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/ActiveMQRAClusteredTestBase.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/ActiveMQRAClusteredTestBase.java
@@ -21,6 +21,7 @@ import java.util.HashMap;
 import org.apache.activemq.api.core.TransportConfiguration;
 import org.apache.activemq.core.config.Configuration;
 import org.apache.activemq.core.config.impl.ConfigurationImpl;
+import org.apache.activemq.core.remoting.impl.invm.TransportConstants;
 import org.apache.activemq.core.server.ActiveMQServer;
 import org.apache.activemq.core.server.ActiveMQServers;
 import org.apache.activemq.jms.server.impl.JMSServerManagerImpl;
@@ -42,7 +43,7 @@ public class ActiveMQRAClusteredTestBase extends ActiveMQRATestBase
 
       primaryConnector = new TransportConfiguration(INVM_CONNECTOR_FACTORY);
       HashMap<String, Object> params = new HashMap();
-      params.put("server-id", "1");
+      params.put(TransportConstants.SERVER_ID_PROP_NAME, "1");
       secondaryConnector = new TransportConfiguration(INVM_CONNECTOR_FACTORY, params);
       Configuration conf = createSecondaryDefaultConfig(true, true);
 
@@ -77,7 +78,7 @@ public class ActiveMQRAClusteredTestBase extends ActiveMQRATestBase
 
       if (secondary)
       {
-         invmMap.put("server-id", "1");
+         invmMap.put(TransportConstants.SERVER_ID_PROP_NAME, "1");
          nettyMap.put("port", "5545");
          primaryConnectorName = "invm";
          secondaryConnectorName = "invm2";