Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id A7E08200C7D for ; Tue, 16 May 2017 20:16:47 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id A6804160BC1; Tue, 16 May 2017 18:16:47 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 7AEA6160BA6 for ; Tue, 16 May 2017 20:16:46 +0200 (CEST) Received: (qmail 10597 invoked by uid 500); 16 May 2017 18:16:45 -0000 Mailing-List: contact commits-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list commits@activemq.apache.org Received: (qmail 10587 invoked by uid 99); 16 May 2017 18:16:45 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 16 May 2017 18:16:45 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 77102E038B; Tue, 16 May 2017 18:16:45 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: clebertsuconic@apache.org To: commits@activemq.apache.org Date: Tue, 16 May 2017 18:16:45 -0000 Message-Id: <80a100d2534c4b40bf0388914da8ec3a@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [1/2] activemq-artemis git commit: ARTEMIS-1163 Refactory to polimorphic connectionfactory creation archived-at: Tue, 16 May 2017 18:16:47 -0000 Repository: activemq-artemis Updated Branches: refs/heads/master 1463a5116 -> 17e3f6fb3 ARTEMIS-1163 Refactory to polimorphic connectionfactory creation Move logic to create a connectionfactory from the ActiveMQJMSClient class to the JMSFactoryType enum to eliminate conditional logic in favor of polymorphism. Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/7b5f141a Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/7b5f141a Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/7b5f141a Branch: refs/heads/master Commit: 7b5f141a4c98f6c851818a74e7424d5113e3a1fb Parents: 1463a51 Author: klausboeing Authored: Sat May 13 13:12:07 2017 -0300 Committer: Clebert Suconic Committed: Tue May 16 14:13:05 2017 -0400 ---------------------------------------------------------------------- .../artemis/api/jms/ActiveMQJMSClient.java | 74 +------ .../artemis/api/jms/JMSFactoryType.java | 195 ++++++++++++++++++- 2 files changed, 198 insertions(+), 71 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/7b5f141a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/ActiveMQJMSClient.java ---------------------------------------------------------------------- diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/ActiveMQJMSClient.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/ActiveMQJMSClient.java index 6c146f0..9cf0c4d 100644 --- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/ActiveMQJMSClient.java +++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/ActiveMQJMSClient.java @@ -23,12 +23,6 @@ import org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration; import org.apache.activemq.artemis.api.core.TransportConfiguration; import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import org.apache.activemq.artemis.jms.client.ActiveMQDestination; -import org.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory; -import org.apache.activemq.artemis.jms.client.ActiveMQQueueConnectionFactory; -import org.apache.activemq.artemis.jms.client.ActiveMQTopicConnectionFactory; -import org.apache.activemq.artemis.jms.client.ActiveMQXAConnectionFactory; -import org.apache.activemq.artemis.jms.client.ActiveMQXAQueueConnectionFactory; -import org.apache.activemq.artemis.jms.client.ActiveMQXATopicConnectionFactory; import org.apache.activemq.artemis.uri.ConnectionFactoryParser; /** @@ -64,22 +58,7 @@ public class ActiveMQJMSClient { */ public static ActiveMQConnectionFactory createConnectionFactoryWithHA(final DiscoveryGroupConfiguration groupConfiguration, JMSFactoryType jmsFactoryType) { - ActiveMQConnectionFactory factory = null; - if (jmsFactoryType.equals(JMSFactoryType.CF)) { - factory = new ActiveMQJMSConnectionFactory(true, groupConfiguration); - } else if (jmsFactoryType.equals(JMSFactoryType.QUEUE_CF)) { - factory = new ActiveMQQueueConnectionFactory(true, groupConfiguration); - } else if (jmsFactoryType.equals(JMSFactoryType.TOPIC_CF)) { - factory = new ActiveMQTopicConnectionFactory(true, groupConfiguration); - } else if (jmsFactoryType.equals(JMSFactoryType.XA_CF)) { - factory = new ActiveMQXAConnectionFactory(true, groupConfiguration); - } else if (jmsFactoryType.equals(JMSFactoryType.QUEUE_XA_CF)) { - factory = new ActiveMQXAQueueConnectionFactory(true, groupConfiguration); - } else if (jmsFactoryType.equals(JMSFactoryType.TOPIC_XA_CF)) { - factory = new ActiveMQXATopicConnectionFactory(true, groupConfiguration); - } - - return factory; + return jmsFactoryType.createConnectionFactoryWithHA(groupConfiguration); } /** @@ -93,22 +72,7 @@ public class ActiveMQJMSClient { */ public static ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final DiscoveryGroupConfiguration groupConfiguration, JMSFactoryType jmsFactoryType) { - ActiveMQConnectionFactory factory = null; - if (jmsFactoryType.equals(JMSFactoryType.CF)) { - factory = new ActiveMQJMSConnectionFactory(false, groupConfiguration); - } else if (jmsFactoryType.equals(JMSFactoryType.QUEUE_CF)) { - factory = new ActiveMQQueueConnectionFactory(false, groupConfiguration); - } else if (jmsFactoryType.equals(JMSFactoryType.TOPIC_CF)) { - factory = new ActiveMQTopicConnectionFactory(false, groupConfiguration); - } else if (jmsFactoryType.equals(JMSFactoryType.XA_CF)) { - factory = new ActiveMQXAConnectionFactory(false, groupConfiguration); - } else if (jmsFactoryType.equals(JMSFactoryType.QUEUE_XA_CF)) { - factory = new ActiveMQXAQueueConnectionFactory(false, groupConfiguration); - } else if (jmsFactoryType.equals(JMSFactoryType.TOPIC_XA_CF)) { - factory = new ActiveMQXATopicConnectionFactory(false, groupConfiguration); - } - - return factory; + return jmsFactoryType.createConnectionFactoryWithoutHA(groupConfiguration); } /** @@ -129,22 +93,7 @@ public class ActiveMQJMSClient { */ public static ActiveMQConnectionFactory createConnectionFactoryWithHA(JMSFactoryType jmsFactoryType, final TransportConfiguration... initialServers) { - ActiveMQConnectionFactory factory = null; - if (jmsFactoryType.equals(JMSFactoryType.CF)) { - factory = new ActiveMQJMSConnectionFactory(true, initialServers); - } else if (jmsFactoryType.equals(JMSFactoryType.QUEUE_CF)) { - factory = new ActiveMQQueueConnectionFactory(true, initialServers); - } else if (jmsFactoryType.equals(JMSFactoryType.TOPIC_CF)) { - factory = new ActiveMQTopicConnectionFactory(true, initialServers); - } else if (jmsFactoryType.equals(JMSFactoryType.XA_CF)) { - factory = new ActiveMQXAConnectionFactory(true, initialServers); - } else if (jmsFactoryType.equals(JMSFactoryType.QUEUE_XA_CF)) { - factory = new ActiveMQXAQueueConnectionFactory(true, initialServers); - } else if (jmsFactoryType.equals(JMSFactoryType.TOPIC_XA_CF)) { - factory = new ActiveMQXATopicConnectionFactory(true, initialServers); - } - - return factory; + return jmsFactoryType.createConnectionFactoryWithHA(initialServers); } /** @@ -160,22 +109,7 @@ public class ActiveMQJMSClient { */ public static ActiveMQConnectionFactory createConnectionFactoryWithoutHA(JMSFactoryType jmsFactoryType, final TransportConfiguration... transportConfigurations) { - ActiveMQConnectionFactory factory = null; - if (jmsFactoryType.equals(JMSFactoryType.CF)) { - factory = new ActiveMQJMSConnectionFactory(false, transportConfigurations); - } else if (jmsFactoryType.equals(JMSFactoryType.QUEUE_CF)) { - factory = new ActiveMQQueueConnectionFactory(false, transportConfigurations); - } else if (jmsFactoryType.equals(JMSFactoryType.TOPIC_CF)) { - factory = new ActiveMQTopicConnectionFactory(false, transportConfigurations); - } else if (jmsFactoryType.equals(JMSFactoryType.XA_CF)) { - factory = new ActiveMQXAConnectionFactory(false, transportConfigurations); - } else if (jmsFactoryType.equals(JMSFactoryType.QUEUE_XA_CF)) { - factory = new ActiveMQXAQueueConnectionFactory(false, transportConfigurations); - } else if (jmsFactoryType.equals(JMSFactoryType.TOPIC_XA_CF)) { - factory = new ActiveMQXATopicConnectionFactory(false, transportConfigurations); - } - - return factory; + return jmsFactoryType.createConnectionFactoryWithoutHA(transportConfigurations); } /** http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/7b5f141a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/JMSFactoryType.java ---------------------------------------------------------------------- diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/JMSFactoryType.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/JMSFactoryType.java index 67d3f57..b2e83f4 100644 --- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/JMSFactoryType.java +++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/JMSFactoryType.java @@ -16,9 +16,144 @@ */ package org.apache.activemq.artemis.api.jms; +import org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration; +import org.apache.activemq.artemis.api.core.TransportConfiguration; +import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; +import org.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory; +import org.apache.activemq.artemis.jms.client.ActiveMQQueueConnectionFactory; +import org.apache.activemq.artemis.jms.client.ActiveMQTopicConnectionFactory; +import org.apache.activemq.artemis.jms.client.ActiveMQXAConnectionFactory; +import org.apache.activemq.artemis.jms.client.ActiveMQXATopicConnectionFactory; +import org.apache.activemq.artemis.jms.client.ActiveMQXAQueueConnectionFactory; + // XXX no javadocs public enum JMSFactoryType { - CF, QUEUE_CF, TOPIC_CF, XA_CF, QUEUE_XA_CF, TOPIC_XA_CF; + CF { + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQJMSConnectionFactory(true, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQJMSConnectionFactory(false, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final TransportConfiguration... initialServers) { + return new ActiveMQJMSConnectionFactory(true, initialServers); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final TransportConfiguration... transportConfigurations) { + return new ActiveMQJMSConnectionFactory(false, transportConfigurations); + } + }, + QUEUE_CF { + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQQueueConnectionFactory(true, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQQueueConnectionFactory(false, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final TransportConfiguration... initialServers) { + return new ActiveMQQueueConnectionFactory(true, initialServers); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final TransportConfiguration... transportConfigurations) { + return new ActiveMQQueueConnectionFactory(false, transportConfigurations); + } + }, + TOPIC_CF { + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQTopicConnectionFactory(true, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQTopicConnectionFactory(false, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final TransportConfiguration... initialServers) { + return new ActiveMQTopicConnectionFactory(true, initialServers); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final TransportConfiguration... transportConfigurations) { + return new ActiveMQTopicConnectionFactory(false, transportConfigurations); + } + }, + XA_CF { + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQXAConnectionFactory(true, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQXAConnectionFactory(false, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final TransportConfiguration... initialServers) { + return new ActiveMQXAConnectionFactory(true, initialServers); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final TransportConfiguration... transportConfigurations) { + return new ActiveMQXAConnectionFactory(false, transportConfigurations); + } + }, + QUEUE_XA_CF { + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQXAQueueConnectionFactory(true, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQXAQueueConnectionFactory(false, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final TransportConfiguration... initialServers) { + return new ActiveMQXAQueueConnectionFactory(true, initialServers); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final TransportConfiguration... transportConfigurations) { + return new ActiveMQXAQueueConnectionFactory(false, transportConfigurations); + } + }, + TOPIC_XA_CF { + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQXATopicConnectionFactory(true, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final DiscoveryGroupConfiguration groupConfiguration) { + return new ActiveMQXATopicConnectionFactory(false, groupConfiguration); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithHA(final TransportConfiguration... initialServers) { + return new ActiveMQXATopicConnectionFactory(true, initialServers); + } + + @Override + public ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final TransportConfiguration... transportConfigurations) { + return new ActiveMQXATopicConnectionFactory(false, transportConfigurations); + } + }; public int intValue() { int val = 0; @@ -72,4 +207,62 @@ public enum JMSFactoryType { } return type; } + + /** + * Creates an ActiveMQConnectionFactory that receives cluster topology updates from the cluster as + * servers leave or join and new backups are appointed or removed. + *

+ * The discoveryAddress and discoveryPort parameters in this method are used to listen for UDP + * broadcasts which contain connection information for members of the cluster. The broadcasted + * connection information is simply used to make an initial connection to the cluster, once that + * connection is made, up to date cluster topology information is downloaded and automatically + * updated whenever the cluster topology changes. If the topology includes backup servers that + * information is also propagated to the client so that it can know which server to failover onto + * in case of live server failure. + * + * @param groupConfiguration + * @return the ActiveMQConnectionFactory + */ + public abstract ActiveMQConnectionFactory createConnectionFactoryWithHA(final DiscoveryGroupConfiguration groupConfiguration); + + /** + * Create an ActiveMQConnectionFactory which creates session factories from a set of live servers, no HA backup information is propagated to the client + *

+ * The UDP address and port are used to listen for live servers in the cluster + * + * @param groupConfiguration + * @return the ActiveMQConnectionFactory + */ + public abstract ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final DiscoveryGroupConfiguration groupConfiguration); + + /** + * Create an ActiveMQConnectionFactory which will receive cluster topology updates from the cluster + * as servers leave or join and new backups are appointed or removed. + *

+ * The initial list of servers supplied in this method is simply to make an initial connection to + * the cluster, once that connection is made, up to date cluster topology information is + * downloaded and automatically updated whenever the cluster topology changes. If the topology + * includes backup servers that information is also propagated to the client so that it can know + * which server to failover onto in case of live server failure. + * + * @param initialServers The initial set of servers used to make a connection to the cluster. + * Each one is tried in turn until a successful connection is made. Once a connection + * is made, the cluster topology is downloaded and the rest of the list is ignored. + * @return the ActiveMQConnectionFactory + */ + public abstract ActiveMQConnectionFactory createConnectionFactoryWithHA(final TransportConfiguration... initialServers); + + /** + * Create an ActiveMQConnectionFactory which creates session factories using a static list of + * transportConfigurations. + *

+ * The ActiveMQConnectionFactory is not updated automatically as the cluster topology changes, and + * no HA backup information is propagated to the client + * + * @param transportConfigurations + * @return the ActiveMQConnectionFactory + */ + public abstract ActiveMQConnectionFactory createConnectionFactoryWithoutHA(final TransportConfiguration... transportConfigurations); + + }