blob: 5d0546f6a78613e90ebf8d3509e02738b004df25 [file] [log] [blame]
/*
* 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.qpid.server.configuration;
import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.ConfigurationFactory;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.configuration.SystemConfiguration;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.log4j.Logger;
import org.apache.qpid.server.configuration.plugins.ConfigurationPlugin;
import org.apache.qpid.server.exchange.DefaultExchangeFactory;
import org.apache.qpid.server.protocol.AmqpProtocolVersion;
import org.apache.qpid.server.queue.AMQQueueFactory;
import org.apache.qpid.server.registry.ApplicationRegistry;
import org.apache.qpid.server.signal.SignalHandlerTask;
import org.apache.qpid.server.virtualhost.VirtualHost;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
import static org.apache.qpid.transport.ConnectionSettings.WILDCARD_ADDRESS;
import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import javax.net.ssl.KeyManagerFactory;
public class ServerConfiguration extends ConfigurationPlugin
{
protected static final Logger _logger = Logger.getLogger(ServerConfiguration.class);
// Default Configuration values
public static final int DEFAULT_BUFFER_SIZE = 262144;
public static final String DEFAULT_STATUS_UPDATES = "on";
public static final String SECURITY_CONFIG_RELOADED = "SECURITY CONFIGURATION RELOADED";
public static final int DEFAULT_FRAME_SIZE = 65536;
public static final int DEFAULT_PORT = 5672;
public static final int DEFAULT_SSL_PORT = 5671;
public static final long DEFAULT_HOUSEKEEPING_PERIOD = 30000L;
public static final int DEFAULT_JMXPORT_REGISTRYSERVER = 8999;
public static final int JMXPORT_CONNECTORSERVER_OFFSET = 100;
public static final String QPID_HOME = "QPID_HOME";
public static final String QPID_WORK = "QPID_WORK";
public static final String LIB_DIR = "lib";
public static final String PLUGIN_DIR = "plugins";
public static final String CACHE_DIR = "cache";
private Map<String, VirtualHostConfiguration> _virtualHosts = new HashMap<String, VirtualHostConfiguration>();
private File _configFile;
private File _vhostsFile;
// Map of environment variables to config items
private static final Map<String, String> envVarMap = new HashMap<String, String>();
// Configuration values to be read from the configuration file
//todo Move all properties to static values to ensure system testing can be performed.
public static final String MGMT_CUSTOM_REGISTRY_SOCKET = "management.custom-registry-socket";
public static final String MGMT_JMXPORT_REGISTRYSERVER = "management.jmxport.registryServer";
public static final String MGMT_JMXPORT_CONNECTORSERVER = "management.jmxport.connectorServer";
public static final String STATUS_UPDATES = "status-updates";
public static final String ADVANCED_LOCALE = "advanced.locale";
public static final String CONNECTOR_AMQP010ENABLED = "connector.amqp010enabled";
public static final String CONNECTOR_AMQP091ENABLED = "connector.amqp091enabled";
public static final String CONNECTOR_AMQP09ENABLED = "connector.amqp09enabled";
public static final String CONNECTOR_AMQP08ENABLED = "connector.amqp08enabled";
public static final String CONNECTOR_AMQP_SUPPORTED_REPLY = "connector.amqpDefaultSupportedProtocolReply";
{
envVarMap.put("QPID_PORT", "connector.port");
envVarMap.put("QPID_SSLPORT", "connector.ssl.port");
envVarMap.put("QPID_JMXPORT_REGISTRYSERVER", MGMT_JMXPORT_REGISTRYSERVER);
envVarMap.put("QPID_JMXPORT_CONNECTORSERVER", MGMT_JMXPORT_CONNECTORSERVER);
envVarMap.put("QPID_FRAMESIZE", "advanced.framesize");
envVarMap.put("QPID_MSGAUTH", "security.msg-auth");
envVarMap.put("QPID_AUTOREGISTER", "auto_register");
envVarMap.put("QPID_MANAGEMENTENABLED", "management.enabled");
envVarMap.put("QPID_HEARTBEATDELAY", "heartbeat.delay");
envVarMap.put("QPID_HEARTBEATTIMEOUTFACTOR", "heartbeat.timeoutFactor");
envVarMap.put("QPID_MAXIMUMMESSAGEAGE", "maximumMessageAge");
envVarMap.put("QPID_MAXIMUMMESSAGECOUNT", "maximumMessageCount");
envVarMap.put("QPID_MAXIMUMQUEUEDEPTH", "maximumQueueDepth");
envVarMap.put("QPID_MAXIMUMMESSAGESIZE", "maximumMessageSize");
envVarMap.put("QPID_MAXIMUMCHANNELCOUNT", "maximumChannelCount");
envVarMap.put("QPID_MINIMUMALERTREPEATGAP", "minimumAlertRepeatGap");
envVarMap.put("QPID_QUEUECAPACITY", "capacity");
envVarMap.put("QPID_FLOWRESUMECAPACITY", "flowResumeCapacity");
envVarMap.put("QPID_SOCKETRECEIVEBUFFER", "connector.socketReceiveBuffer");
envVarMap.put("QPID_SOCKETWRITEBUFFER", "connector.socketWriteBuffer");
envVarMap.put("QPID_TCPNODELAY", "connector.tcpNoDelay");
envVarMap.put("QPID_STATUS-UPDATES", "status-updates");
}
/**
* Loads the given file and sets up the HUP signal handler.
*
* This will load the file and present the root level properties but will
* not perform any virtualhost configuration.
* <p>
* To perform this {@link #initialise()} must be called.
* <p>
* This has been made a two step process to allow the Plugin Manager and
* Configuration Manager to be initialised in the Application Registry.
* <p>
* If using this ServerConfiguration via an ApplicationRegistry there is no
* need to explicitly call {@link #initialise()} as this is done via the
* {@link ApplicationRegistry#initialise()} method.
*
* @param configurationURL
* @throws org.apache.commons.configuration.ConfigurationException
*/
public ServerConfiguration(File configurationURL) throws ConfigurationException
{
this(parseConfig(configurationURL));
_configFile = configurationURL;
SignalHandlerTask hupReparseTask = new SignalHandlerTask()
{
public void handle()
{
try
{
reparseConfigFileSecuritySections();
}
catch (ConfigurationException e)
{
_logger.error("Could not reload configuration file security sections", e);
}
}
};
if(!hupReparseTask.register("HUP"))
{
_logger.info("Unable to register Signal HUP handler to reload security configuration.");
_logger.info("Signal HUP not supported for this OS / JVM combination - " + SignalHandlerTask.getPlatformDescription());
}
}
/**
* Wraps the given Commons Configuration as a ServerConfiguration.
*
* Mainly used during testing and in locations where configuration is not
* desired but the interface requires configuration.
* <p>
* If the given configuration has VirtualHost configuration then
* {@link #initialise()} must be called to perform the required setup.
* <p>
* This has been made a two step process to allow the Plugin Manager and
* Configuration Manager to be initialised in the Application Registry.
* <p>
* If using this ServerConfiguration via an ApplicationRegistry there is no
* need to explicitly call {@link #initialise()} as this is done via the
* {@link ApplicationRegistry#initialise()} method.
*
* @param conf
*/
public ServerConfiguration(Configuration conf)
{
setConfig(conf);
}
/**
* Processes this configuration and setups any VirtualHosts defined in the
* configuration.
*
* This has been separated from the constructor to allow the PluginManager
* time to be created and provide plugins to the ConfigurationManager for
* processing here.
* <p>
* Called by {@link ApplicationRegistry#initialise()}.
* <p>
* NOTE: A DEFAULT ApplicationRegistry must exist when using this method
* or a new ApplicationRegistry will be created.
*
* @throws ConfigurationException
*/
public void initialise() throws ConfigurationException
{
setConfiguration("", getConfig());
setupVirtualHosts(getConfig());
}
public String[] getElementsProcessed()
{
return new String[] { "" };
}
@Override
public void validateConfiguration() throws ConfigurationException
{
// Support for security.jmx.access was removed when JMX access rights were incorporated into the main ACL.
// This ensure that users remove the element from their configuration file.
if (getListValue("security.jmx.access").size() > 0)
{
String message = "Validation error : security/jmx/access is no longer a supported element within the configuration xml."
+ (_configFile == null ? "" : " Configuration file : " + _configFile);
throw new ConfigurationException(message);
}
if (getListValue("security.jmx.principal-database").size() > 0)
{
String message = "Validation error : security/jmx/principal-database is no longer a supported element within the configuration xml."
+ (_configFile == null ? "" : " Configuration file : " + _configFile);
throw new ConfigurationException(message);
}
if (getListValue("security.principal-databases.principal-database(0).class").size() > 0)
{
String message = "Validation error : security/principal-databases is no longer supported within the configuration xml."
+ (_configFile == null ? "" : " Configuration file : " + _configFile);
throw new ConfigurationException(message);
}
// QPID-3266. Tidy up housekeeping configuration option for scheduling frequency
if (contains("housekeeping.expiredMessageCheckPeriod"))
{
String message = "Validation error : housekeeping/expiredMessageCheckPeriod must be replaced by housekeeping/checkPeriod."
+ (_configFile == null ? "" : " Configuration file : " + _configFile);
throw new ConfigurationException(message);
}
// QPID-3517: Inconsistency in capitalisation in the SSL configuration keys used within the connector and management configuration
// sections. For the moment, continue to understand both but generate a deprecated warning if the less preferred keystore is used.
for (String key : new String[] {"management.ssl.keystorePath",
"management.ssl.keystorePassword," +
"connector.ssl.keystorePath",
"connector.ssl.keystorePassword"})
{
if (contains(key))
{
final String deprecatedXpath = key.replaceAll("\\.", "/");
final String preferredXpath = deprecatedXpath.replaceAll("keystore", "keyStore");
_logger.warn("Validation warning: " + deprecatedXpath + " is deprecated and must be replaced by " + preferredXpath
+ (_configFile == null ? "" : " Configuration file : " + _configFile));
}
}
// QPID-3739 certType was a misleading name.
if (contains("connector.ssl.certType"))
{
_logger.warn("Validation warning: connector/ssl/certType is deprecated and must be replaced by connector/ssl/keyManagerFactoryAlgorithm"
+ (_configFile == null ? "" : " Configuration file : " + _configFile));
}
}
/*
* Modified to enforce virtualhosts configuration in external file or main file, but not
* both, as a fix for QPID-2360 and QPID-2361.
*/
@SuppressWarnings("unchecked")
protected void setupVirtualHosts(Configuration conf) throws ConfigurationException
{
List<String> vhostFiles = conf.getList("virtualhosts");
Configuration vhostConfig = conf.subset("virtualhosts");
// Only one configuration mechanism allowed
if (!vhostFiles.isEmpty() && !vhostConfig.subset("virtualhost").isEmpty())
{
throw new ConfigurationException("Only one of external or embedded virtualhosts configuration allowed.");
}
// We can only have one vhosts XML file included
if (vhostFiles.size() > 1)
{
throw new ConfigurationException("Only one external virtualhosts configuration file allowed, multiple filenames found.");
}
// Virtualhost configuration object
Configuration vhostConfiguration = new HierarchicalConfiguration();
// Load from embedded configuration if possible
if (!vhostConfig.subset("virtualhost").isEmpty())
{
vhostConfiguration = vhostConfig;
}
else
{
// Load from the external configuration if possible
for (String fileName : vhostFiles)
{
// Open the vhosts XML file and copy values from it to our config
_vhostsFile = new File(fileName);
if (!_vhostsFile.exists())
{
throw new ConfigurationException("Virtualhosts file does not exist");
}
vhostConfiguration = parseConfig(new File(fileName));
// save the default virtualhost name
String defaultVirtualHost = vhostConfiguration.getString("default");
getConfig().setProperty("virtualhosts.default", defaultVirtualHost);
}
}
// Now extract the virtual host names from the configuration object
List hosts = vhostConfiguration.getList("virtualhost.name");
for (int j = 0; j < hosts.size(); j++)
{
String name = (String) hosts.get(j);
// Add the virtual hosts to the server configuration
VirtualHostConfiguration virtualhost = new VirtualHostConfiguration(name, vhostConfiguration.subset("virtualhost." + name));
_virtualHosts.put(virtualhost.getName(), virtualhost);
}
}
private static void substituteEnvironmentVariables(Configuration conf)
{
for (Entry<String, String> var : envVarMap.entrySet())
{
String val = System.getenv(var.getKey());
if (val != null)
{
conf.setProperty(var.getValue(), val);
}
}
}
private static Configuration parseConfig(File file) throws ConfigurationException
{
ConfigurationFactory factory = new ConfigurationFactory();
factory.setConfigurationFileName(file.getAbsolutePath());
Configuration conf = factory.getConfiguration();
Iterator<?> keys = conf.getKeys();
if (!keys.hasNext())
{
keys = null;
conf = flatConfig(file);
}
substituteEnvironmentVariables(conf);
return conf;
}
/**
* Check the configuration file to see if status updates are enabled.
*
* @return true if status updates are enabled
*/
public boolean getStatusUpdatesEnabled()
{
// Retrieve the setting from configuration but default to on.
String value = getStringValue(STATUS_UPDATES, DEFAULT_STATUS_UPDATES);
return value.equalsIgnoreCase("on");
}
/**
* The currently defined {@see Locale} for this broker
*
* @return the configuration defined locale
*/
public Locale getLocale()
{
String localeString = getStringValue(ADVANCED_LOCALE);
// Expecting locale of format langauge_country_variant
// If the configuration does not have a defined locale use the JVM default
if (localeString == null)
{
return Locale.getDefault();
}
String[] parts = localeString.split("_");
Locale locale;
switch (parts.length)
{
case 1:
locale = new Locale(localeString);
break;
case 2:
locale = new Locale(parts[0], parts[1]);
break;
default:
StringBuilder variant = new StringBuilder(parts[2]);
// If we have a variant such as the Java doc suggests for Spanish
// Traditional_WIN we may end up with more than 3 parts on a
// split with '_'. So we should recombine the variant.
if (parts.length > 3)
{
for (int index = 3; index < parts.length; index++)
{
variant.append('_').append(parts[index]);
}
}
locale = new Locale(parts[0], parts[1], variant.toString());
}
return locale;
}
// Our configuration class needs to make the interpolate method
// public so it can be called below from the config method.
public static class MyConfiguration extends CompositeConfiguration
{
public String interpolate(String obj)
{
return super.interpolate(obj);
}
}
public final static Configuration flatConfig(File file) throws ConfigurationException
{
// We have to override the interpolate methods so that
// interpolation takes place across the entirety of the
// composite configuration. Without doing this each
// configuration object only interpolates variables defined
// inside itself.
final MyConfiguration conf = new MyConfiguration();
conf.addConfiguration(new SystemConfiguration()
{
protected String interpolate(String o)
{
return conf.interpolate(o);
}
});
conf.addConfiguration(new XMLConfiguration(file)
{
protected String interpolate(String o)
{
return conf.interpolate(o);
}
});
return conf;
}
public String getConfigurationURL()
{
return _configFile == null ? "" : _configFile.getAbsolutePath();
}
public void reparseConfigFileSecuritySections() throws ConfigurationException
{
if (_configFile != null)
{
Configuration newConfig = parseConfig(_configFile);
setConfiguration("", newConfig);
ApplicationRegistry.getInstance().getSecurityManager().configureHostPlugins(this);
// Reload virtualhosts from correct location
Configuration newVhosts;
if (_vhostsFile == null)
{
newVhosts = newConfig.subset("virtualhosts");
}
else
{
newVhosts = parseConfig(_vhostsFile);
}
VirtualHostRegistry vhostRegistry = ApplicationRegistry.getInstance().getVirtualHostRegistry();
for (String hostName : _virtualHosts.keySet())
{
VirtualHost vhost = vhostRegistry.getVirtualHost(hostName);
Configuration vhostConfig = newVhosts.subset("virtualhost." + hostName);
vhost.getConfiguration().setConfiguration("virtualhosts.virtualhost", vhostConfig);
vhost.getSecurityManager().configureGlobalPlugins(this);
vhost.getSecurityManager().configureHostPlugins(vhost.getConfiguration());
}
_logger.warn(SECURITY_CONFIG_RELOADED);
}
}
public String getQpidWork()
{
return System.getProperty(QPID_WORK, System.getProperty("java.io.tmpdir"));
}
public String getQpidHome()
{
return System.getProperty(QPID_HOME);
}
public void setJMXPortRegistryServer(int registryServerPort)
{
getConfig().setProperty(MGMT_JMXPORT_REGISTRYSERVER, registryServerPort);
}
public int getJMXPortRegistryServer()
{
return getIntValue(MGMT_JMXPORT_REGISTRYSERVER, DEFAULT_JMXPORT_REGISTRYSERVER);
}
public void setJMXPortConnectorServer(int connectorServerPort)
{
getConfig().setProperty(MGMT_JMXPORT_CONNECTORSERVER, connectorServerPort);
}
public int getJMXConnectorServerPort()
{
return getIntValue(MGMT_JMXPORT_CONNECTORSERVER, getJMXPortRegistryServer() + JMXPORT_CONNECTORSERVER_OFFSET);
}
public boolean getUseCustomRMISocketFactory()
{
return getBooleanValue(MGMT_CUSTOM_REGISTRY_SOCKET, true);
}
public void setUseCustomRMISocketFactory(boolean bool)
{
getConfig().setProperty(MGMT_CUSTOM_REGISTRY_SOCKET, bool);
}
public boolean getPlatformMbeanserver()
{
return getBooleanValue("management.platform-mbeanserver", true);
}
public String[] getVirtualHosts()
{
return _virtualHosts.keySet().toArray(new String[_virtualHosts.size()]);
}
public String getPluginDirectory()
{
return getStringValue("plugin-directory");
}
public String getCacheDirectory()
{
return getStringValue("cache-directory");
}
public VirtualHostConfiguration getVirtualHostConfig(String name)
{
return _virtualHosts.get(name);
}
public void setVirtualHostConfig(VirtualHostConfiguration config)
{
_virtualHosts.put(config.getName(), config);
}
public int getFrameSize()
{
return getIntValue("advanced.framesize", DEFAULT_FRAME_SIZE);
}
public boolean getSynchedClocks()
{
return getBooleanValue("advanced.synced-clocks");
}
public boolean getMsgAuth()
{
return getBooleanValue("security.msg-auth");
}
public String getManagementKeyStorePath()
{
final String fallback = getStringValue("management.ssl.keystorePath");
return getStringValue("management.ssl.keyStorePath", fallback);
}
public boolean getManagementSSLEnabled()
{
return getBooleanValue("management.ssl.enabled", true);
}
public String getManagementKeyStorePassword()
{
final String fallback = getStringValue("management.ssl.keystorePassword");
return getStringValue("management.ssl.keyStorePassword", fallback);
}
public boolean getQueueAutoRegister()
{
return getBooleanValue("queue.auto_register", true);
}
public boolean getManagementEnabled()
{
return getBooleanValue("management.enabled", true);
}
public void setManagementEnabled(boolean enabled)
{
getConfig().setProperty("management.enabled", enabled);
}
public int getHeartBeatDelay()
{
return getIntValue("heartbeat.delay", 5);
}
public double getHeartBeatTimeout()
{
return getDoubleValue("heartbeat.timeoutFactor", 2.0);
}
public long getMaximumMessageAge()
{
return getLongValue("maximumMessageAge");
}
public long getMaximumMessageCount()
{
return getLongValue("maximumMessageCount");
}
public long getMaximumQueueDepth()
{
return getLongValue("maximumQueueDepth");
}
public long getMaximumMessageSize()
{
return getLongValue("maximumMessageSize");
}
public long getMinimumAlertRepeatGap()
{
return getLongValue("minimumAlertRepeatGap");
}
public long getCapacity()
{
return getLongValue("capacity");
}
public long getFlowResumeCapacity()
{
return getLongValue("flowResumeCapacity", getCapacity());
}
public int getConnectorProcessors()
{
return getIntValue("connector.processors", 4);
}
public List getPorts()
{
return getListValue("connector.port", Collections.<Integer>singletonList(DEFAULT_PORT));
}
public List getPortExclude010()
{
return getListValue("connector.non010port");
}
public List getPortExclude091()
{
return getListValue("connector.non091port");
}
public List getPortExclude09()
{
return getListValue("connector.non09port");
}
public List getPortExclude08()
{
return getListValue("connector.non08port");
}
public String getBind()
{
return getStringValue("connector.bind", WILDCARD_ADDRESS);
}
public int getReceiveBufferSize()
{
return getIntValue("connector.socketReceiveBuffer", DEFAULT_BUFFER_SIZE);
}
public int getWriteBufferSize()
{
return getIntValue("connector.socketWriteBuffer", DEFAULT_BUFFER_SIZE);
}
public boolean getTcpNoDelay()
{
return getBooleanValue("connector.tcpNoDelay", true);
}
public boolean getEnableSSL()
{
return getBooleanValue("connector.ssl.enabled");
}
public boolean getSSLOnly()
{
return getBooleanValue("connector.ssl.sslOnly");
}
public List getSSLPorts()
{
return getListValue("connector.ssl.port", Collections.<Integer>singletonList(DEFAULT_SSL_PORT));
}
public String getConnectorKeyStorePath()
{
final String fallback = getStringValue("connector.ssl.keystorePath"); // pre-0.13 broker supported this name.
return getStringValue("connector.ssl.keyStorePath", fallback);
}
public String getConnectorKeyStorePassword()
{
final String fallback = getStringValue("connector.ssl.keystorePassword"); // pre-0.13 brokers supported this name.
return getStringValue("connector.ssl.keyStorePassword", fallback);
}
public String getConnectorKeyManagerFactoryAlgorithm()
{
final String systemFallback = KeyManagerFactory.getDefaultAlgorithm();
// deprecated, pre-0.17 brokers supported this name.
final String fallback = getStringValue("connector.ssl.certType", systemFallback);
return getStringValue("connector.ssl.keyManagerFactoryAlgorithm", fallback);
}
public String getDefaultVirtualHost()
{
return getStringValue("virtualhosts.default");
}
public void setDefaultVirtualHost(String vhost)
{
getConfig().setProperty("virtualhosts.default", vhost);
}
public void setHousekeepingCheckPeriod(long value)
{
getConfig().setProperty("housekeeping.checkPeriod", value);
}
public long getHousekeepingCheckPeriod()
{
return getLongValue("housekeeping.checkPeriod", DEFAULT_HOUSEKEEPING_PERIOD);
}
public long getStatisticsSamplePeriod()
{
return getConfig().getLong("statistics.sample.period", 5000L);
}
public boolean isStatisticsGenerationBrokerEnabled()
{
return getConfig().getBoolean("statistics.generation.broker", false);
}
public boolean isStatisticsGenerationVirtualhostsEnabled()
{
return getConfig().getBoolean("statistics.generation.virtualhosts", false);
}
public boolean isStatisticsGenerationConnectionsEnabled()
{
return getConfig().getBoolean("statistics.generation.connections", false);
}
public long getStatisticsReportingPeriod()
{
return getConfig().getLong("statistics.reporting.period", 0L);
}
public boolean isStatisticsReportResetEnabled()
{
return getConfig().getBoolean("statistics.reporting.reset", false);
}
public int getMaxChannelCount()
{
return getIntValue("maximumChannelCount", 256);
}
/**
* List of Broker features that have been disabled within configuration. Disabled
* features won't be advertised to the clients on connection.
*
* @return list of disabled features, or empty list if no features are disabled.
*/
public List<String> getDisabledFeatures()
{
final List<String> disabledFeatures = getListValue("disabledFeatures", Collections.emptyList());
return disabledFeatures;
}
public boolean getManagementRightsInferAllAccess()
{
return getBooleanValue("management.managementRightsInferAllAccess", true);
}
public int getMaxDeliveryCount()
{
return getConfig().getInt("maximumDeliveryCount", 0);
}
/**
* Check if dead letter queue delivery is enabled, defaults to disabled if not set.
*/
public boolean isDeadLetterQueueEnabled()
{
return getConfig().getBoolean("deadLetterQueues", false);
}
/**
* String to affix to end of queue name when generating an alternate exchange for DLQ purposes.
*/
public String getDeadLetterExchangeSuffix()
{
return getConfig().getString("deadLetterExchangeSuffix", DefaultExchangeFactory.DEFAULT_DLE_NAME_SUFFIX);
}
/**
* String to affix to end of queue name when generating a queue for DLQ purposes.
*/
public String getDeadLetterQueueSuffix()
{
return getConfig().getString("deadLetterQueueSuffix", AMQQueueFactory.DEFAULT_DLQ_NAME_SUFFIX);
}
public boolean isAmqp010enabled()
{
return getConfig().getBoolean(CONNECTOR_AMQP010ENABLED, true);
}
public boolean isAmqp091enabled()
{
return getConfig().getBoolean(CONNECTOR_AMQP091ENABLED, true);
}
public boolean isAmqp09enabled()
{
return getConfig().getBoolean(CONNECTOR_AMQP09ENABLED, true);
}
public boolean isAmqp08enabled()
{
return getConfig().getBoolean(CONNECTOR_AMQP08ENABLED, true);
}
/**
* Returns the configured default reply to an unsupported AMQP protocol initiation, or null if there is none
*/
public AmqpProtocolVersion getDefaultSupportedProtocolReply()
{
String reply = getConfig().getString(CONNECTOR_AMQP_SUPPORTED_REPLY, null);
return reply == null ? null : AmqpProtocolVersion.valueOf(reply);
}
}