org.apache.activemq.artemis.core.server.cluster.ha.ScaleDownPolicy Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.artemis.core.server.cluster.ha;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.activemq.artemis.api.core.ActiveMQException;
import org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
import org.apache.activemq.artemis.core.client.impl.ServerLocatorInternal;
import org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnectorFactory;
import org.apache.activemq.artemis.core.server.ActiveMQMessageBundle;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
public class ScaleDownPolicy {
private List connectors = new ArrayList<>();
private String discoveryGroup = null;
private String groupName = null;
private String clusterName;
private boolean enabled;
public ScaleDownPolicy() {
}
public ScaleDownPolicy(List connectors, String groupName, String clusterName, boolean enabled) {
this.connectors = connectors;
this.groupName = groupName;
this.clusterName = clusterName;
this.enabled = enabled;
}
public ScaleDownPolicy(String discoveryGroup, String groupName, String clusterName, boolean enabled) {
this.discoveryGroup = discoveryGroup;
this.groupName = groupName;
this.clusterName = clusterName;
this.enabled = enabled;
}
public List getConnectors() {
return connectors;
}
public void setConnectors(List connectors) {
this.connectors = connectors;
}
public String getDiscoveryGroup() {
return discoveryGroup;
}
public void setDiscoveryGroup(String discoveryGroup) {
this.discoveryGroup = discoveryGroup;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getClusterName() {
return clusterName;
}
public void setClusterName(String clusterName) {
this.clusterName = clusterName;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public static ServerLocatorInternal getScaleDownConnector(ScaleDownPolicy scaleDownPolicy,
ActiveMQServer activeMQServer) throws ActiveMQException {
if (!scaleDownPolicy.getConnectors().isEmpty()) {
return (ServerLocatorInternal) ActiveMQClient.createServerLocatorWithHA(connectorNameListToArray(scaleDownPolicy.getConnectors(), activeMQServer));
} else if (scaleDownPolicy.getDiscoveryGroup() != null) {
DiscoveryGroupConfiguration dg = activeMQServer.getConfiguration().getDiscoveryGroupConfigurations().get(scaleDownPolicy.getDiscoveryGroup());
if (dg == null) {
throw ActiveMQMessageBundle.BUNDLE.noDiscoveryGroupFound(dg);
}
return (ServerLocatorInternal) ActiveMQClient.createServerLocatorWithHA(dg);
} else {
Map connectorConfigurations = activeMQServer.getConfiguration().getConnectorConfigurations();
for (TransportConfiguration transportConfiguration : connectorConfigurations.values()) {
if (transportConfiguration.getFactoryClassName().equals(InVMConnectorFactory.class.getName())) {
return (ServerLocatorInternal) ActiveMQClient.createServerLocatorWithHA(transportConfiguration);
}
}
}
throw ActiveMQMessageBundle.BUNDLE.noConfigurationFoundForScaleDown();
}
private static TransportConfiguration[] connectorNameListToArray(final List connectorNames,
ActiveMQServer activeMQServer) {
return activeMQServer.getConfiguration().getTransportConfigurations(connectorNames);
}
}