/* * 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.config.impl; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.PrintWriter; import java.io.Serializable; import java.io.StringWriter; import java.lang.reflect.Array; import java.net.URI; import java.net.URL; import java.security.AccessController; import java.security.PrivilegedExceptionAction; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration; import org.apache.activemq.artemis.api.core.BroadcastGroupConfiguration; import org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.TransportConfiguration; import org.apache.activemq.artemis.core.config.BridgeConfiguration; import org.apache.activemq.artemis.core.config.ClusterConnectionConfiguration; import org.apache.activemq.artemis.core.config.Configuration; import org.apache.activemq.artemis.core.config.ConfigurationUtils; import org.apache.activemq.artemis.core.config.ConnectorServiceConfiguration; import org.apache.activemq.artemis.core.config.CoreAddressConfiguration; import org.apache.activemq.artemis.core.config.CoreQueueConfiguration; import org.apache.activemq.artemis.core.config.DivertConfiguration; import org.apache.activemq.artemis.core.config.HAPolicyConfiguration; import org.apache.activemq.artemis.core.config.StoreConfiguration; import org.apache.activemq.artemis.core.config.WildcardConfiguration; import org.apache.activemq.artemis.core.config.ha.ReplicaPolicyConfiguration; import org.apache.activemq.artemis.core.config.ha.ReplicatedPolicyConfiguration; import org.apache.activemq.artemis.core.security.Role; import org.apache.activemq.artemis.core.server.ActiveMQServerLogger; import org.apache.activemq.artemis.core.server.JournalType; import org.apache.activemq.artemis.core.server.NetworkHealthCheck; import org.apache.activemq.artemis.core.server.SecuritySettingPlugin; import org.apache.activemq.artemis.core.server.group.impl.GroupingHandlerConfiguration; import org.apache.activemq.artemis.core.server.plugin.ActiveMQServerPlugin; import org.apache.activemq.artemis.core.settings.impl.AddressSettings; import org.apache.activemq.artemis.core.settings.impl.ResourceLimitSettings; import org.apache.activemq.artemis.utils.Env; import org.apache.activemq.artemis.utils.ObjectInputStreamWithClassLoader; import org.apache.activemq.artemis.utils.uri.BeanSupport; import org.jboss.logging.Logger; public class ConfigurationImpl implements Configuration, Serializable { // Constants ------------------------------------------------------------------------------ private static final Logger logger = Logger.getLogger(ConfigurationImpl.class); public static final JournalType DEFAULT_JOURNAL_TYPE = JournalType.ASYNCIO; private static final long serialVersionUID = 4077088945050267843L; // Attributes ----------------------------------------------------------------------------- private String name = "localhost"; private boolean persistenceEnabled = ActiveMQDefaultConfiguration.isDefaultPersistenceEnabled(); private boolean journalDatasync = ActiveMQDefaultConfiguration.isDefaultJournalDatasync(); protected long fileDeploymentScanPeriod = ActiveMQDefaultConfiguration.getDefaultFileDeployerScanPeriod(); private boolean persistDeliveryCountBeforeDelivery = ActiveMQDefaultConfiguration.isDefaultPersistDeliveryCountBeforeDelivery(); private int scheduledThreadPoolMaxSize = ActiveMQDefaultConfiguration.getDefaultScheduledThreadPoolMaxSize(); private int threadPoolMaxSize = ActiveMQDefaultConfiguration.getDefaultThreadPoolMaxSize(); private long securityInvalidationInterval = ActiveMQDefaultConfiguration.getDefaultSecurityInvalidationInterval(); private boolean securityEnabled = ActiveMQDefaultConfiguration.isDefaultSecurityEnabled(); private boolean gracefulShutdownEnabled = ActiveMQDefaultConfiguration.isDefaultGracefulShutdownEnabled(); private long gracefulShutdownTimeout = ActiveMQDefaultConfiguration.getDefaultGracefulShutdownTimeout(); protected boolean jmxManagementEnabled = ActiveMQDefaultConfiguration.isDefaultJmxManagementEnabled(); protected String jmxDomain = ActiveMQDefaultConfiguration.getDefaultJmxDomain(); protected boolean jmxUseBrokerName = ActiveMQDefaultConfiguration.isDefaultJMXUseBrokerName(); protected long connectionTTLOverride = ActiveMQDefaultConfiguration.getDefaultConnectionTtlOverride(); protected boolean asyncConnectionExecutionEnabled = ActiveMQDefaultConfiguration.isDefaultAsyncConnectionExecutionEnabled(); private long messageExpiryScanPeriod = ActiveMQDefaultConfiguration.getDefaultMessageExpiryScanPeriod(); private int messageExpiryThreadPriority = ActiveMQDefaultConfiguration.getDefaultMessageExpiryThreadPriority(); protected int idCacheSize = ActiveMQDefaultConfiguration.getDefaultIdCacheSize(); private boolean persistIDCache = ActiveMQDefaultConfiguration.isDefaultPersistIdCache(); private List<String> incomingInterceptorClassNames = new ArrayList<>(); private List<String> outgoingInterceptorClassNames = new ArrayList<>(); protected Map<String, TransportConfiguration> connectorConfigs = new HashMap<>(); private Set<TransportConfiguration> acceptorConfigs = new HashSet<>(); protected List<BridgeConfiguration> bridgeConfigurations = new ArrayList<>(); protected List<DivertConfiguration> divertConfigurations = new ArrayList<>(); protected List<ClusterConnectionConfiguration> clusterConfigurations = new ArrayList<>(); private List<CoreQueueConfiguration> queueConfigurations = new ArrayList<>(); private List<CoreAddressConfiguration> addressConfigurations = new ArrayList<>(); protected transient List<BroadcastGroupConfiguration> broadcastGroupConfigurations = new ArrayList<>(); protected transient Map<String, DiscoveryGroupConfiguration> discoveryGroupConfigurations = new LinkedHashMap<>(); // Paging related attributes ------------------------------------------------------------ private String pagingDirectory = ActiveMQDefaultConfiguration.getDefaultPagingDir(); // File related attributes ----------------------------------------------------------- private int maxConcurrentPageIO = ActiveMQDefaultConfiguration.getDefaultMaxConcurrentPageIo(); protected String largeMessagesDirectory = ActiveMQDefaultConfiguration.getDefaultLargeMessagesDir(); protected String bindingsDirectory = ActiveMQDefaultConfiguration.getDefaultBindingsDirectory(); protected boolean createBindingsDir = ActiveMQDefaultConfiguration.isDefaultCreateBindingsDir(); protected String journalDirectory = ActiveMQDefaultConfiguration.getDefaultJournalDir(); protected boolean createJournalDir = ActiveMQDefaultConfiguration.isDefaultCreateJournalDir(); public JournalType journalType = ConfigurationImpl.DEFAULT_JOURNAL_TYPE; protected boolean journalSyncTransactional = ActiveMQDefaultConfiguration.isDefaultJournalSyncTransactional(); protected boolean journalSyncNonTransactional = ActiveMQDefaultConfiguration.isDefaultJournalSyncNonTransactional(); protected int journalCompactMinFiles = ActiveMQDefaultConfiguration.getDefaultJournalCompactMinFiles(); protected int journalCompactPercentage = ActiveMQDefaultConfiguration.getDefaultJournalCompactPercentage(); protected int journalFileSize = ActiveMQDefaultConfiguration.getDefaultJournalFileSize(); protected int journalPoolFiles = ActiveMQDefaultConfiguration.getDefaultJournalPoolFiles(); protected int journalMinFiles = ActiveMQDefaultConfiguration.getDefaultJournalMinFiles(); // AIO and NIO need different values for these attributes protected int journalMaxIO_AIO = ActiveMQDefaultConfiguration.getDefaultJournalMaxIoAio(); protected int journalBufferTimeout_AIO = ActiveMQDefaultConfiguration.getDefaultJournalBufferTimeoutAio(); protected int journalBufferSize_AIO = ActiveMQDefaultConfiguration.getDefaultJournalBufferSizeAio(); protected int journalMaxIO_NIO = ActiveMQDefaultConfiguration.getDefaultJournalMaxIoNio(); protected int journalBufferTimeout_NIO = ActiveMQDefaultConfiguration.getDefaultJournalBufferTimeoutNio(); protected int journalBufferSize_NIO = ActiveMQDefaultConfiguration.getDefaultJournalBufferSizeNio(); protected boolean logJournalWriteRate = ActiveMQDefaultConfiguration.isDefaultJournalLogWriteRate(); private WildcardConfiguration wildcardConfiguration = new WildcardConfiguration(); private boolean messageCounterEnabled = ActiveMQDefaultConfiguration.isDefaultMessageCounterEnabled(); private long messageCounterSamplePeriod = ActiveMQDefaultConfiguration.getDefaultMessageCounterSamplePeriod(); private int messageCounterMaxDayHistory = ActiveMQDefaultConfiguration.getDefaultMessageCounterMaxDayHistory(); private long transactionTimeout = ActiveMQDefaultConfiguration.getDefaultTransactionTimeout(); private long transactionTimeoutScanPeriod = ActiveMQDefaultConfiguration.getDefaultTransactionTimeoutScanPeriod(); private SimpleString managementAddress = ActiveMQDefaultConfiguration.getDefaultManagementAddress(); private SimpleString managementNotificationAddress = ActiveMQDefaultConfiguration.getDefaultManagementNotificationAddress(); protected String clusterUser = ActiveMQDefaultConfiguration.getDefaultClusterUser(); protected String clusterPassword = ActiveMQDefaultConfiguration.getDefaultClusterPassword(); private long serverDumpInterval = ActiveMQDefaultConfiguration.getDefaultServerDumpInterval(); protected boolean failoverOnServerShutdown = ActiveMQDefaultConfiguration.isDefaultFailoverOnServerShutdown(); // percentage of free memory which triggers warning from the memory manager private int memoryWarningThreshold = ActiveMQDefaultConfiguration.getDefaultMemoryWarningThreshold(); private long memoryMeasureInterval = ActiveMQDefaultConfiguration.getDefaultMemoryMeasureInterval(); protected GroupingHandlerConfiguration groupingHandlerConfiguration; private Map<String, AddressSettings> addressesSettings = new HashMap<>(); private Map<String, ResourceLimitSettings> resourceLimitSettings = new HashMap<>(); private Map<String, Set<Role>> securitySettings = new HashMap<>(); private List<SecuritySettingPlugin> securitySettingPlugins = new ArrayList<>(); private final List<ActiveMQServerPlugin> brokerPlugins = new CopyOnWriteArrayList<>(); private Map<String, Set<String>> securityRoleNameMappings = new HashMap<>(); protected List<ConnectorServiceConfiguration> connectorServiceConfigurations = new ArrayList<>(); private boolean maskPassword = ActiveMQDefaultConfiguration.isDefaultMaskPassword(); private transient String passwordCodec; private boolean resolveProtocols = ActiveMQDefaultConfiguration.isDefaultResolveProtocols(); private long journalLockAcquisitionTimeout = ActiveMQDefaultConfiguration.getDefaultJournalLockAcquisitionTimeout(); private HAPolicyConfiguration haPolicyConfiguration; private StoreConfiguration storeConfiguration; protected boolean populateValidatedUser = ActiveMQDefaultConfiguration.isDefaultPopulateValidatedUser(); private long connectionTtlCheckInterval = ActiveMQDefaultConfiguration.getDefaultConnectionTtlCheckInterval(); private URL configurationUrl; private long configurationFileRefreshPeriod = ActiveMQDefaultConfiguration.getDefaultConfigurationFileRefreshPeriod(); private Long globalMaxSize; private int maxDiskUsage = ActiveMQDefaultConfiguration.getDefaultMaxDiskUsage(); private int diskScanPeriod = ActiveMQDefaultConfiguration.getDefaultDiskScanPeriod(); private String systemPropertyPrefix = ActiveMQDefaultConfiguration.getDefaultSystemPropertyPrefix(); private String networkCheckList = ActiveMQDefaultConfiguration.getDefaultNetworkCheckList(); private String networkURLList = ActiveMQDefaultConfiguration.getDefaultNetworkCheckURLList(); private long networkCheckPeriod = ActiveMQDefaultConfiguration.getDefaultNetworkCheckPeriod(); private int networkCheckTimeout = ActiveMQDefaultConfiguration.getDefaultNetworkCheckTimeout(); private String networkCheckNIC = ActiveMQDefaultConfiguration.getDefaultNetworkCheckNic(); private String networkCheckPingCommand = NetworkHealthCheck.IPV4_DEFAULT_COMMAND; private String networkCheckPing6Command = NetworkHealthCheck.IPV6_DEFAULT_COMMAND; private String internalNamingPrefix = ActiveMQDefaultConfiguration.getInternalNamingPrefix(); /** * Parent folder for all data folders. */ private File artemisInstance; // Public ------------------------------------------------------------------------- @Override public Configuration setSystemPropertyPrefix(String systemPropertyPrefix) { this.systemPropertyPrefix = systemPropertyPrefix; return this; } @Override public String getSystemPropertyPrefix() { return systemPropertyPrefix; } @Override public Configuration parseSystemProperties() throws Exception { parseSystemProperties(System.getProperties()); return this; } @Override public Configuration parseSystemProperties(Properties properties) throws Exception { Map<String, Object> beanProperties = new HashMap<>(); synchronized (properties) { for (Map.Entry<Object, Object> entry : properties.entrySet()) { if (entry.getKey().toString().startsWith(systemPropertyPrefix)) { String key = entry.getKey().toString().substring(systemPropertyPrefix.length()); logger.debug("Setting up config, " + key + "=" + entry.getValue()); beanProperties.put(key, entry.getValue()); } } } if (!beanProperties.isEmpty()) { BeanSupport.setData(this, beanProperties); } return this; } @Override public boolean isClustered() { return !getClusterConfigurations().isEmpty(); } @Override public boolean isPersistenceEnabled() { return persistenceEnabled; } @Override public int getMaxDiskUsage() { return maxDiskUsage; } @Override public ConfigurationImpl setMaxDiskUsage(int maxDiskUsage) { this.maxDiskUsage = maxDiskUsage; return this; } @Override public ConfigurationImpl setGlobalMaxSize(long maxSize) { this.globalMaxSize = maxSize; return this; } @Override public long getGlobalMaxSize() { if (globalMaxSize == null) { this.globalMaxSize = ActiveMQDefaultConfiguration.getDefaultMaxGlobalSize(); if (!Env.isTestEnv()) { ActiveMQServerLogger.LOGGER.usingDefaultPaging(globalMaxSize); } } return globalMaxSize; } @Override public ConfigurationImpl setPersistenceEnabled(final boolean enable) { persistenceEnabled = enable; return this; } @Override public boolean isJournalDatasync() { return journalDatasync; } @Override public ConfigurationImpl setJournalDatasync(boolean enable) { journalDatasync = enable; return this; } @Override public long getFileDeployerScanPeriod() { return fileDeploymentScanPeriod; } @Override public ConfigurationImpl setFileDeployerScanPeriod(final long period) { fileDeploymentScanPeriod = period; return this; } /** * @return the persistDeliveryCountBeforeDelivery */ @Override public boolean isPersistDeliveryCountBeforeDelivery() { return persistDeliveryCountBeforeDelivery; } @Override public ConfigurationImpl setPersistDeliveryCountBeforeDelivery(final boolean persistDeliveryCountBeforeDelivery) { this.persistDeliveryCountBeforeDelivery = persistDeliveryCountBeforeDelivery; return this; } @Override public int getScheduledThreadPoolMaxSize() { return scheduledThreadPoolMaxSize; } @Override public ConfigurationImpl setScheduledThreadPoolMaxSize(final int maxSize) { scheduledThreadPoolMaxSize = maxSize; return this; } @Override public int getThreadPoolMaxSize() { return threadPoolMaxSize; } @Override public ConfigurationImpl setThreadPoolMaxSize(final int maxSize) { threadPoolMaxSize = maxSize; return this; } @Override public long getSecurityInvalidationInterval() { return securityInvalidationInterval; } @Override public ConfigurationImpl setSecurityInvalidationInterval(final long interval) { securityInvalidationInterval = interval; return this; } @Override public long getConnectionTTLOverride() { return connectionTTLOverride; } @Override public ConfigurationImpl setConnectionTTLOverride(final long ttl) { connectionTTLOverride = ttl; return this; } @Override public boolean isAsyncConnectionExecutionEnabled() { return asyncConnectionExecutionEnabled; } @Override public ConfigurationImpl setEnabledAsyncConnectionExecution(final boolean enabled) { asyncConnectionExecutionEnabled = enabled; return this; } @Override public List<String> getIncomingInterceptorClassNames() { return incomingInterceptorClassNames; } @Override public ConfigurationImpl setIncomingInterceptorClassNames(final List<String> interceptors) { incomingInterceptorClassNames = interceptors; return this; } @Override public List<String> getOutgoingInterceptorClassNames() { return outgoingInterceptorClassNames; } @Override public ConfigurationImpl setOutgoingInterceptorClassNames(final List<String> interceptors) { outgoingInterceptorClassNames = interceptors; return this; } @Override public Set<TransportConfiguration> getAcceptorConfigurations() { return acceptorConfigs; } @Override public ConfigurationImpl setAcceptorConfigurations(final Set<TransportConfiguration> infos) { acceptorConfigs = infos; return this; } @Override public ConfigurationImpl addAcceptorConfiguration(final TransportConfiguration infos) { acceptorConfigs.add(infos); return this; } @Override public ConfigurationImpl addAcceptorConfiguration(final String name, final String uri) throws Exception { List<TransportConfiguration> configurations = ConfigurationUtils.parseAcceptorURI(name, uri); for (TransportConfiguration config : configurations) { addAcceptorConfiguration(config); } return this; } @Override public ConfigurationImpl clearAcceptorConfigurations() { acceptorConfigs.clear(); return this; } @Override public Map<String, TransportConfiguration> getConnectorConfigurations() { return connectorConfigs; } @Override public ConfigurationImpl setConnectorConfigurations(final Map<String, TransportConfiguration> infos) { connectorConfigs = infos; return this; } @Override public ConfigurationImpl addConnectorConfiguration(final String key, final TransportConfiguration info) { connectorConfigs.put(key, info); return this; } @Override public ConfigurationImpl addConnectorConfiguration(final String name, final String uri) throws Exception { List<TransportConfiguration> configurations = ConfigurationUtils.parseConnectorURI(name, uri); for (TransportConfiguration config : configurations) { addConnectorConfiguration(name, config); } return this; } @Override public ConfigurationImpl clearConnectorConfigurations() { connectorConfigs.clear(); return this; } @Override public GroupingHandlerConfiguration getGroupingHandlerConfiguration() { return groupingHandlerConfiguration; } @Override public ConfigurationImpl setGroupingHandlerConfiguration(final GroupingHandlerConfiguration groupingHandlerConfiguration) { this.groupingHandlerConfiguration = groupingHandlerConfiguration; return this; } @Override public List<BridgeConfiguration> getBridgeConfigurations() { return bridgeConfigurations; } @Override public ConfigurationImpl setBridgeConfigurations(final List<BridgeConfiguration> configs) { bridgeConfigurations = configs; return this; } public ConfigurationImpl addBridgeConfiguration(final BridgeConfiguration config) { bridgeConfigurations.add(config); return this; } @Override public List<BroadcastGroupConfiguration> getBroadcastGroupConfigurations() { return broadcastGroupConfigurations; } @Override public ConfigurationImpl setBroadcastGroupConfigurations(final List<BroadcastGroupConfiguration> configs) { broadcastGroupConfigurations = configs; return this; } @Override public ConfigurationImpl addBroadcastGroupConfiguration(final BroadcastGroupConfiguration config) { broadcastGroupConfigurations.add(config); return this; } @Override public List<ClusterConnectionConfiguration> getClusterConfigurations() { return clusterConfigurations; } @Override public ConfigurationImpl setClusterConfigurations(final List<ClusterConnectionConfiguration> configs) { clusterConfigurations = configs; return this; } @Override public ConfigurationImpl addClusterConfiguration(final ClusterConnectionConfiguration config) { clusterConfigurations.add(config); return this; } @Override public ClusterConnectionConfiguration addClusterConfiguration(String name, String uri) throws Exception { ClusterConnectionConfiguration newConfig = new ClusterConnectionConfiguration(new URI(uri)).setName(name); clusterConfigurations.add(newConfig); return newConfig; } @Override public ConfigurationImpl clearClusterConfigurations() { clusterConfigurations.clear(); return this; } @Override public List<DivertConfiguration> getDivertConfigurations() { return divertConfigurations; } @Override public ConfigurationImpl setDivertConfigurations(final List<DivertConfiguration> configs) { divertConfigurations = configs; return this; } @Override public ConfigurationImpl addDivertConfiguration(final DivertConfiguration config) { divertConfigurations.add(config); return this; } @Override public List<CoreQueueConfiguration> getQueueConfigurations() { return queueConfigurations; } @Override public ConfigurationImpl setQueueConfigurations(final List<CoreQueueConfiguration> configs) { queueConfigurations = configs; return this; } @Override public ConfigurationImpl addQueueConfiguration(final CoreQueueConfiguration config) { queueConfigurations.add(config); return this; } @Override public List<CoreAddressConfiguration> getAddressConfigurations() { return addressConfigurations; } @Override public Configuration setAddressConfigurations(List<CoreAddressConfiguration> configs) { this.addressConfigurations = configs; return this; } @Override public Configuration addAddressConfiguration(CoreAddressConfiguration config) { this.addressConfigurations.add(config); return this; } @Override public Map<String, DiscoveryGroupConfiguration> getDiscoveryGroupConfigurations() { return discoveryGroupConfigurations; } @Override public ConfigurationImpl setDiscoveryGroupConfigurations(final Map<String, DiscoveryGroupConfiguration> discoveryGroupConfigurations) { this.discoveryGroupConfigurations = discoveryGroupConfigurations; return this; } @Override public ConfigurationImpl addDiscoveryGroupConfiguration(final String key, DiscoveryGroupConfiguration discoveryGroupConfiguration) { this.discoveryGroupConfigurations.put(key, discoveryGroupConfiguration); return this; } @Override public int getIDCacheSize() { return idCacheSize; } @Override public ConfigurationImpl setIDCacheSize(final int idCacheSize) { this.idCacheSize = idCacheSize; return this; } @Override public boolean isPersistIDCache() { return persistIDCache; } @Override public ConfigurationImpl setPersistIDCache(final boolean persist) { persistIDCache = persist; return this; } @Override public File getBindingsLocation() { return subFolder(getBindingsDirectory()); } @Override public String getBindingsDirectory() { return bindingsDirectory; } @Override public ConfigurationImpl setBindingsDirectory(final String dir) { bindingsDirectory = dir; return this; } @Override public int getPageMaxConcurrentIO() { return maxConcurrentPageIO; } @Override public ConfigurationImpl setPageMaxConcurrentIO(int maxIO) { this.maxConcurrentPageIO = maxIO; return this; } @Override public File getJournalLocation() { return subFolder(getJournalDirectory()); } @Override public String getJournalDirectory() { return journalDirectory; } @Override public ConfigurationImpl setJournalDirectory(final String dir) { journalDirectory = dir; return this; } @Override public JournalType getJournalType() { return journalType; } @Override public ConfigurationImpl setPagingDirectory(final String dir) { pagingDirectory = dir; return this; } @Override public File getPagingLocation() { return subFolder(getPagingDirectory()); } @Override public String getPagingDirectory() { return pagingDirectory; } @Override public ConfigurationImpl setJournalType(final JournalType type) { journalType = type; return this; } @Override public boolean isJournalSyncTransactional() { return journalSyncTransactional; } @Override public ConfigurationImpl setJournalSyncTransactional(final boolean sync) { journalSyncTransactional = sync; return this; } @Override public boolean isJournalSyncNonTransactional() { return journalSyncNonTransactional; } @Override public ConfigurationImpl setJournalSyncNonTransactional(final boolean sync) { journalSyncNonTransactional = sync; return this; } @Override public int getJournalFileSize() { return journalFileSize; } @Override public ConfigurationImpl setJournalFileSize(final int size) { journalFileSize = size; return this; } @Override public int getJournalPoolFiles() { return journalPoolFiles; } @Override public Configuration setJournalPoolFiles(int poolSize) { this.journalPoolFiles = poolSize; return this; } @Override public int getJournalMinFiles() { return journalMinFiles; } @Override public ConfigurationImpl setJournalMinFiles(final int files) { journalMinFiles = files; return this; } @Override public boolean isLogJournalWriteRate() { return logJournalWriteRate; } @Override public ConfigurationImpl setLogJournalWriteRate(final boolean logJournalWriteRate) { this.logJournalWriteRate = logJournalWriteRate; return this; } @Override public boolean isCreateBindingsDir() { return createBindingsDir; } @Override public ConfigurationImpl setCreateBindingsDir(final boolean create) { createBindingsDir = create; return this; } @Override public boolean isCreateJournalDir() { return createJournalDir; } @Override public ConfigurationImpl setCreateJournalDir(final boolean create) { createJournalDir = create; return this; } @Override @Deprecated public boolean isWildcardRoutingEnabled() { return wildcardConfiguration.isEnabled(); } @Override @Deprecated public ConfigurationImpl setWildcardRoutingEnabled(final boolean enabled) { logger.info("Usage of wildcardRoutingEnabled configuration property is deprecated, please use wildCardConfiguration.enabled instead"); wildcardConfiguration.setEnabled(enabled); return this; } @Override public WildcardConfiguration getWildcardConfiguration() { return wildcardConfiguration; } @Override public Configuration setWildCardConfiguration(WildcardConfiguration wildcardConfiguration) { this.wildcardConfiguration = wildcardConfiguration; return this; } @Override public long getTransactionTimeout() { return transactionTimeout; } @Override public ConfigurationImpl setTransactionTimeout(final long timeout) { transactionTimeout = timeout; return this; } @Override public long getTransactionTimeoutScanPeriod() { return transactionTimeoutScanPeriod; } @Override public ConfigurationImpl setTransactionTimeoutScanPeriod(final long period) { transactionTimeoutScanPeriod = period; return this; } @Override public long getMessageExpiryScanPeriod() { return messageExpiryScanPeriod; } @Override public ConfigurationImpl setMessageExpiryScanPeriod(final long messageExpiryScanPeriod) { this.messageExpiryScanPeriod = messageExpiryScanPeriod; return this; } @Override public int getMessageExpiryThreadPriority() { return messageExpiryThreadPriority; } @Override public ConfigurationImpl setMessageExpiryThreadPriority(final int messageExpiryThreadPriority) { this.messageExpiryThreadPriority = messageExpiryThreadPriority; return this; } @Override public boolean isSecurityEnabled() { return securityEnabled; } @Override public ConfigurationImpl setSecurityEnabled(final boolean enabled) { securityEnabled = enabled; return this; } @Override public boolean isGracefulShutdownEnabled() { return gracefulShutdownEnabled; } @Override public ConfigurationImpl setGracefulShutdownEnabled(final boolean enabled) { gracefulShutdownEnabled = enabled; return this; } @Override public long getGracefulShutdownTimeout() { return gracefulShutdownTimeout; } @Override public ConfigurationImpl setGracefulShutdownTimeout(final long timeout) { gracefulShutdownTimeout = timeout; return this; } @Override public boolean isJMXManagementEnabled() { return jmxManagementEnabled; } @Override public ConfigurationImpl setJMXManagementEnabled(final boolean enabled) { jmxManagementEnabled = enabled; return this; } @Override public String getJMXDomain() { return jmxDomain; } @Override public ConfigurationImpl setJMXDomain(final String domain) { jmxDomain = domain; return this; } @Override public boolean isJMXUseBrokerName() { return jmxUseBrokerName; } @Override public ConfigurationImpl setJMXUseBrokerName(boolean jmxUseBrokerName) { this.jmxUseBrokerName = jmxUseBrokerName; return this; } @Override public String getLargeMessagesDirectory() { return largeMessagesDirectory; } @Override public File getLargeMessagesLocation() { return subFolder(getLargeMessagesDirectory()); } @Override public ConfigurationImpl setLargeMessagesDirectory(final String directory) { largeMessagesDirectory = directory; return this; } @Override public boolean isMessageCounterEnabled() { return messageCounterEnabled; } @Override public ConfigurationImpl setMessageCounterEnabled(final boolean enabled) { messageCounterEnabled = enabled; return this; } @Override public long getMessageCounterSamplePeriod() { return messageCounterSamplePeriod; } @Override public ConfigurationImpl setMessageCounterSamplePeriod(final long period) { messageCounterSamplePeriod = period; return this; } @Override public int getMessageCounterMaxDayHistory() { return messageCounterMaxDayHistory; } @Override public ConfigurationImpl setMessageCounterMaxDayHistory(final int maxDayHistory) { messageCounterMaxDayHistory = maxDayHistory; return this; } @Override public SimpleString getManagementAddress() { return managementAddress; } @Override public ConfigurationImpl setManagementAddress(final SimpleString address) { managementAddress = address; return this; } @Override public SimpleString getManagementNotificationAddress() { return managementNotificationAddress; } @Override public ConfigurationImpl setManagementNotificationAddress(final SimpleString address) { managementNotificationAddress = address; return this; } @Override public String getClusterUser() { return clusterUser; } @Override public ConfigurationImpl setClusterUser(final String user) { clusterUser = user; return this; } @Override public String getClusterPassword() { return clusterPassword; } public boolean isFailoverOnServerShutdown() { return failoverOnServerShutdown; } public ConfigurationImpl setFailoverOnServerShutdown(boolean failoverOnServerShutdown) { this.failoverOnServerShutdown = failoverOnServerShutdown; return this; } @Override public ConfigurationImpl setClusterPassword(final String theclusterPassword) { clusterPassword = theclusterPassword; return this; } @Override public int getJournalCompactMinFiles() { return journalCompactMinFiles; } @Override public int getJournalCompactPercentage() { return journalCompactPercentage; } @Override public ConfigurationImpl setJournalCompactMinFiles(final int minFiles) { journalCompactMinFiles = minFiles; return this; } @Override public ConfigurationImpl setJournalCompactPercentage(final int percentage) { journalCompactPercentage = percentage; return this; } @Override public long getServerDumpInterval() { return serverDumpInterval; } @Override public ConfigurationImpl setServerDumpInterval(final long intervalInMilliseconds) { serverDumpInterval = intervalInMilliseconds; return this; } @Override public int getMemoryWarningThreshold() { return memoryWarningThreshold; } @Override public ConfigurationImpl setMemoryWarningThreshold(final int memoryWarningThreshold) { this.memoryWarningThreshold = memoryWarningThreshold; return this; } @Override public long getMemoryMeasureInterval() { return memoryMeasureInterval; } @Override public ConfigurationImpl setMemoryMeasureInterval(final long memoryMeasureInterval) { this.memoryMeasureInterval = memoryMeasureInterval; return this; } @Override public int getJournalMaxIO_AIO() { return journalMaxIO_AIO; } @Override public ConfigurationImpl setJournalMaxIO_AIO(final int journalMaxIO) { journalMaxIO_AIO = journalMaxIO; return this; } @Override public int getJournalBufferTimeout_AIO() { return journalBufferTimeout_AIO; } @Override public ConfigurationImpl setJournalBufferTimeout_AIO(final int journalBufferTimeout) { journalBufferTimeout_AIO = journalBufferTimeout; return this; } @Override public int getJournalBufferSize_AIO() { return journalBufferSize_AIO; } @Override public ConfigurationImpl setJournalBufferSize_AIO(final int journalBufferSize) { journalBufferSize_AIO = journalBufferSize; return this; } @Override public int getJournalMaxIO_NIO() { return journalMaxIO_NIO; } @Override public ConfigurationImpl setJournalMaxIO_NIO(final int journalMaxIO) { journalMaxIO_NIO = journalMaxIO; return this; } @Override public int getJournalBufferTimeout_NIO() { return journalBufferTimeout_NIO; } @Override public ConfigurationImpl setJournalBufferTimeout_NIO(final int journalBufferTimeout) { journalBufferTimeout_NIO = journalBufferTimeout; return this; } @Override public int getJournalBufferSize_NIO() { return journalBufferSize_NIO; } @Override public ConfigurationImpl setJournalBufferSize_NIO(final int journalBufferSize) { journalBufferSize_NIO = journalBufferSize; return this; } @Override public Map<String, AddressSettings> getAddressesSettings() { return addressesSettings; } @Override public ConfigurationImpl setAddressesSettings(final Map<String, AddressSettings> addressesSettings) { this.addressesSettings = addressesSettings; return this; } @Override public ConfigurationImpl addAddressesSetting(String key, AddressSettings addressesSetting) { this.addressesSettings.put(key, addressesSetting); return this; } @Override public ConfigurationImpl clearAddressesSettings() { this.addressesSettings.clear(); return this; } @Override public Map<String, ResourceLimitSettings> getResourceLimitSettings() { return resourceLimitSettings; } @Override public ConfigurationImpl setResourceLimitSettings(final Map<String, ResourceLimitSettings> resourceLimitSettings) { this.resourceLimitSettings = resourceLimitSettings; return this; } @Override public ConfigurationImpl addResourceLimitSettings(ResourceLimitSettings resourceLimitSettings) { this.resourceLimitSettings.put(resourceLimitSettings.getMatch().toString(), resourceLimitSettings); return this; } @Override public Map<String, Set<Role>> getSecurityRoles() { for (SecuritySettingPlugin securitySettingPlugin : securitySettingPlugins) { Map<String, Set<Role>> settings = securitySettingPlugin.getSecurityRoles(); if (settings != null) { securitySettings.putAll(settings); } } return securitySettings; } @Override public ConfigurationImpl putSecurityRoles(String match, Set<Role> roles) { securitySettings.put(match, roles); return this; } @Override public ConfigurationImpl setSecurityRoles(final Map<String, Set<Role>> securitySettings) { this.securitySettings = securitySettings; return this; } @Override public Configuration addSecurityRoleNameMapping(String internalRole, Set<String> externalRoles) { if (securityRoleNameMappings.containsKey(internalRole)) { securityRoleNameMappings.get(internalRole).addAll(externalRoles); } else { securityRoleNameMappings.put(internalRole, externalRoles); } return this; } @Override public Map<String, Set<String>> getSecurityRoleNameMappings() { return securityRoleNameMappings; } @Override public List<ConnectorServiceConfiguration> getConnectorServiceConfigurations() { return this.connectorServiceConfigurations; } @Override public List<SecuritySettingPlugin> getSecuritySettingPlugins() { return this.securitySettingPlugins; } @Override public void registerBrokerPlugins(final List<ActiveMQServerPlugin> plugins) { brokerPlugins.addAll(plugins); } @Override public void registerBrokerPlugin(final ActiveMQServerPlugin plugin) { brokerPlugins.add(plugin); } @Override public void unRegisterBrokerPlugin(final ActiveMQServerPlugin plugin) { brokerPlugins.remove(plugin); } @Override public List<ActiveMQServerPlugin> getBrokerPlugins() { return brokerPlugins; } @Override public File getBrokerInstance() { if (artemisInstance != null) { return artemisInstance; } String strartemisInstance = System.getProperty("artemis.instance"); if (strartemisInstance == null) { strartemisInstance = System.getProperty("user.dir"); } artemisInstance = new File(strartemisInstance); return artemisInstance; } @Override public void setBrokerInstance(File directory) { this.artemisInstance = directory; } public boolean isCheckForLiveServer() { if (haPolicyConfiguration instanceof ReplicaPolicyConfiguration) { return ((ReplicatedPolicyConfiguration) haPolicyConfiguration).isCheckForLiveServer(); } else { return false; } } public ConfigurationImpl setCheckForLiveServer(boolean checkForLiveServer) { if (haPolicyConfiguration instanceof ReplicaPolicyConfiguration) { ((ReplicatedPolicyConfiguration) haPolicyConfiguration).setCheckForLiveServer(checkForLiveServer); } return this; } @Override public String toString() { StringBuilder sb = new StringBuilder("Broker Configuration ("); sb.append("clustered=").append(isClustered()).append(","); sb.append("journalDirectory=").append(journalDirectory).append(","); sb.append("bindingsDirectory=").append(bindingsDirectory).append(","); sb.append("largeMessagesDirectory=").append(largeMessagesDirectory).append(","); sb.append("pagingDirectory=").append(pagingDirectory); sb.append(")"); return sb.toString(); } @Override public ConfigurationImpl setConnectorServiceConfigurations(final List<ConnectorServiceConfiguration> configs) { this.connectorServiceConfigurations = configs; return this; } @Override public ConfigurationImpl addConnectorServiceConfiguration(final ConnectorServiceConfiguration config) { this.connectorServiceConfigurations.add(config); return this; } @Override public ConfigurationImpl setSecuritySettingPlugins(final List<SecuritySettingPlugin> plugins) { this.securitySettingPlugins = plugins; return this; } @Override public ConfigurationImpl addSecuritySettingPlugin(final SecuritySettingPlugin plugin) { this.securitySettingPlugins.add(plugin); return this; } @Override public boolean isMaskPassword() { return maskPassword; } @Override public ConfigurationImpl setMaskPassword(boolean maskPassword) { this.maskPassword = maskPassword; return this; } @Override public ConfigurationImpl setPasswordCodec(String codec) { passwordCodec = codec; return this; } @Override public String getPasswordCodec() { return passwordCodec; } @Override public String getName() { return name; } @Override public ConfigurationImpl setName(String name) { this.name = name; return this; } @Override public ConfigurationImpl setResolveProtocols(boolean resolveProtocols) { this.resolveProtocols = resolveProtocols; return this; } @Override public TransportConfiguration[] getTransportConfigurations(String... connectorNames) { return getTransportConfigurations(Arrays.asList(connectorNames)); } @Override public TransportConfiguration[] getTransportConfigurations(final List<String> connectorNames) { TransportConfiguration[] tcConfigs = (TransportConfiguration[]) Array.newInstance(TransportConfiguration.class, connectorNames.size()); int count = 0; for (String connectorName : connectorNames) { TransportConfiguration connector = getConnectorConfigurations().get(connectorName); if (connector == null) { ActiveMQServerLogger.LOGGER.warn("bridgeNoConnector(connectorName)"); return null; } tcConfigs[count++] = connector; } return tcConfigs; } @Override public String debugConnectors() { StringWriter stringWriter = new StringWriter(); try (PrintWriter writer = new PrintWriter(stringWriter)) { for (Map.Entry<String, TransportConfiguration> connector : getConnectorConfigurations().entrySet()) { writer.println("Connector::" + connector.getKey() + " value = " + connector.getValue()); } } return stringWriter.toString(); } @Override public boolean isResolveProtocols() { return resolveProtocols; } @Override public StoreConfiguration getStoreConfiguration() { return storeConfiguration; } @Override public ConfigurationImpl setStoreConfiguration(StoreConfiguration storeConfiguration) { this.storeConfiguration = storeConfiguration; return this; } @Override public boolean isPopulateValidatedUser() { return populateValidatedUser; } @Override public ConfigurationImpl setPopulateValidatedUser(boolean populateValidatedUser) { this.populateValidatedUser = populateValidatedUser; return this; } @Override public long getConnectionTtlCheckInterval() { return connectionTtlCheckInterval; } @Override public ConfigurationImpl setConnectionTtlCheckInterval(long connectionTtlCheckInterval) { this.connectionTtlCheckInterval = connectionTtlCheckInterval; return this; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((acceptorConfigs == null) ? 0 : acceptorConfigs.hashCode()); result = prime * result + ((addressesSettings == null) ? 0 : addressesSettings.hashCode()); result = prime * result + (asyncConnectionExecutionEnabled ? 1231 : 1237); result = prime * result + ((bindingsDirectory == null) ? 0 : bindingsDirectory.hashCode()); result = prime * result + ((bridgeConfigurations == null) ? 0 : bridgeConfigurations.hashCode()); result = prime * result + ((broadcastGroupConfigurations == null) ? 0 : broadcastGroupConfigurations.hashCode()); result = prime * result + ((clusterConfigurations == null) ? 0 : clusterConfigurations.hashCode()); result = prime * result + ((clusterPassword == null) ? 0 : clusterPassword.hashCode()); result = prime * result + ((clusterUser == null) ? 0 : clusterUser.hashCode()); result = prime * result + (int) (connectionTTLOverride ^ (connectionTTLOverride >>> 32)); result = prime * result + ((connectorConfigs == null) ? 0 : connectorConfigs.hashCode()); result = prime * result + ((connectorServiceConfigurations == null) ? 0 : connectorServiceConfigurations.hashCode()); result = prime * result + (createBindingsDir ? 1231 : 1237); result = prime * result + (createJournalDir ? 1231 : 1237); result = prime * result + ((discoveryGroupConfigurations == null) ? 0 : discoveryGroupConfigurations.hashCode()); result = prime * result + ((divertConfigurations == null) ? 0 : divertConfigurations.hashCode()); result = prime * result + (failoverOnServerShutdown ? 1231 : 1237); result = prime * result + (int) (fileDeploymentScanPeriod ^ (fileDeploymentScanPeriod >>> 32)); result = prime * result + ((groupingHandlerConfiguration == null) ? 0 : groupingHandlerConfiguration.hashCode()); result = prime * result + idCacheSize; result = prime * result + ((incomingInterceptorClassNames == null) ? 0 : incomingInterceptorClassNames.hashCode()); result = prime * result + ((jmxDomain == null) ? 0 : jmxDomain.hashCode()); result = prime * result + (jmxManagementEnabled ? 1231 : 1237); result = prime * result + journalBufferSize_AIO; result = prime * result + journalBufferSize_NIO; result = prime * result + journalBufferTimeout_AIO; result = prime * result + journalBufferTimeout_NIO; result = prime * result + journalCompactMinFiles; result = prime * result + journalCompactPercentage; result = prime * result + ((journalDirectory == null) ? 0 : journalDirectory.hashCode()); result = prime * result + journalFileSize; result = prime * result + journalMaxIO_AIO; result = prime * result + journalMaxIO_NIO; result = prime * result + journalMinFiles; result = prime * result + (journalSyncNonTransactional ? 1231 : 1237); result = prime * result + (journalSyncTransactional ? 1231 : 1237); result = prime * result + ((journalType == null) ? 0 : journalType.hashCode()); result = prime * result + ((largeMessagesDirectory == null) ? 0 : largeMessagesDirectory.hashCode()); result = prime * result + (logJournalWriteRate ? 1231 : 1237); result = prime * result + ((managementAddress == null) ? 0 : managementAddress.hashCode()); result = prime * result + ((managementNotificationAddress == null) ? 0 : managementNotificationAddress.hashCode()); result = prime * result + (maskPassword ? 1231 : 1237); result = prime * result + maxConcurrentPageIO; result = prime * result + (int) (memoryMeasureInterval ^ (memoryMeasureInterval >>> 32)); result = prime * result + memoryWarningThreshold; result = prime * result + (messageCounterEnabled ? 1231 : 1237); result = prime * result + messageCounterMaxDayHistory; result = prime * result + (int) (messageCounterSamplePeriod ^ (messageCounterSamplePeriod >>> 32)); result = prime * result + (int) (messageExpiryScanPeriod ^ (messageExpiryScanPeriod >>> 32)); result = prime * result + messageExpiryThreadPriority; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((outgoingInterceptorClassNames == null) ? 0 : outgoingInterceptorClassNames.hashCode()); result = prime * result + ((pagingDirectory == null) ? 0 : pagingDirectory.hashCode()); result = prime * result + (persistDeliveryCountBeforeDelivery ? 1231 : 1237); result = prime * result + (persistIDCache ? 1231 : 1237); result = prime * result + (persistenceEnabled ? 1231 : 1237); result = prime * result + ((queueConfigurations == null) ? 0 : queueConfigurations.hashCode()); result = prime * result + scheduledThreadPoolMaxSize; result = prime * result + (securityEnabled ? 1231 : 1237); result = prime * result + (populateValidatedUser ? 1231 : 1237); result = prime * result + (int) (securityInvalidationInterval ^ (securityInvalidationInterval >>> 32)); result = prime * result + ((securitySettings == null) ? 0 : securitySettings.hashCode()); result = prime * result + (int) (serverDumpInterval ^ (serverDumpInterval >>> 32)); result = prime * result + threadPoolMaxSize; result = prime * result + (int) (transactionTimeout ^ (transactionTimeout >>> 32)); result = prime * result + (int) (transactionTimeoutScanPeriod ^ (transactionTimeoutScanPeriod >>> 32)); result = prime * result + ((wildcardConfiguration == null) ? 0 : wildcardConfiguration.hashCode()); result = prime * result + (resolveProtocols ? 1231 : 1237); result = prime * result + (int) (journalLockAcquisitionTimeout ^ (journalLockAcquisitionTimeout >>> 32)); result = prime * result + (int) (connectionTtlCheckInterval ^ (connectionTtlCheckInterval >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof ConfigurationImpl)) return false; ConfigurationImpl other = (ConfigurationImpl) obj; if (acceptorConfigs == null) { if (other.acceptorConfigs != null) return false; } else if (!acceptorConfigs.equals(other.acceptorConfigs)) return false; if (addressesSettings == null) { if (other.addressesSettings != null) return false; } else if (!addressesSettings.equals(other.addressesSettings)) return false; if (asyncConnectionExecutionEnabled != other.asyncConnectionExecutionEnabled) return false; if (bindingsDirectory == null) { if (other.bindingsDirectory != null) return false; } else if (!bindingsDirectory.equals(other.bindingsDirectory)) return false; if (bridgeConfigurations == null) { if (other.bridgeConfigurations != null) return false; } else if (!bridgeConfigurations.equals(other.bridgeConfigurations)) return false; if (broadcastGroupConfigurations == null) { if (other.broadcastGroupConfigurations != null) return false; } else if (!broadcastGroupConfigurations.equals(other.broadcastGroupConfigurations)) return false; if (clusterConfigurations == null) { if (other.clusterConfigurations != null) return false; } else if (!clusterConfigurations.equals(other.clusterConfigurations)) return false; if (clusterPassword == null) { if (other.clusterPassword != null) return false; } else if (!clusterPassword.equals(other.clusterPassword)) return false; if (clusterUser == null) { if (other.clusterUser != null) return false; } else if (!clusterUser.equals(other.clusterUser)) return false; if (connectionTTLOverride != other.connectionTTLOverride) return false; if (connectorConfigs == null) { if (other.connectorConfigs != null) return false; } else if (!connectorConfigs.equals(other.connectorConfigs)) return false; if (connectorServiceConfigurations == null) { if (other.connectorServiceConfigurations != null) return false; } else if (!connectorServiceConfigurations.equals(other.connectorServiceConfigurations)) return false; if (createBindingsDir != other.createBindingsDir) return false; if (createJournalDir != other.createJournalDir) return false; if (discoveryGroupConfigurations == null) { if (other.discoveryGroupConfigurations != null) return false; } else if (!discoveryGroupConfigurations.equals(other.discoveryGroupConfigurations)) return false; if (divertConfigurations == null) { if (other.divertConfigurations != null) return false; } else if (!divertConfigurations.equals(other.divertConfigurations)) return false; if (failoverOnServerShutdown != other.failoverOnServerShutdown) return false; if (fileDeploymentScanPeriod != other.fileDeploymentScanPeriod) return false; if (groupingHandlerConfiguration == null) { if (other.groupingHandlerConfiguration != null) return false; } else if (!groupingHandlerConfiguration.equals(other.groupingHandlerConfiguration)) return false; if (idCacheSize != other.idCacheSize) return false; if (incomingInterceptorClassNames == null) { if (other.incomingInterceptorClassNames != null) return false; } else if (!incomingInterceptorClassNames.equals(other.incomingInterceptorClassNames)) return false; if (jmxDomain == null) { if (other.jmxDomain != null) return false; } else if (!jmxDomain.equals(other.jmxDomain)) return false; if (jmxManagementEnabled != other.jmxManagementEnabled) return false; if (journalBufferSize_AIO != other.journalBufferSize_AIO) return false; if (journalBufferSize_NIO != other.journalBufferSize_NIO) return false; if (journalBufferTimeout_AIO != other.journalBufferTimeout_AIO) return false; if (journalBufferTimeout_NIO != other.journalBufferTimeout_NIO) return false; if (journalCompactMinFiles != other.journalCompactMinFiles) return false; if (journalCompactPercentage != other.journalCompactPercentage) return false; if (journalDirectory == null) { if (other.journalDirectory != null) return false; } else if (!journalDirectory.equals(other.journalDirectory)) return false; if (journalFileSize != other.journalFileSize) return false; if (journalMaxIO_AIO != other.journalMaxIO_AIO) return false; if (journalMaxIO_NIO != other.journalMaxIO_NIO) return false; if (journalMinFiles != other.journalMinFiles) return false; if (journalSyncNonTransactional != other.journalSyncNonTransactional) return false; if (journalSyncTransactional != other.journalSyncTransactional) return false; if (journalType != other.journalType) return false; if (largeMessagesDirectory == null) { if (other.largeMessagesDirectory != null) return false; } else if (!largeMessagesDirectory.equals(other.largeMessagesDirectory)) return false; if (logJournalWriteRate != other.logJournalWriteRate) return false; if (managementAddress == null) { if (other.managementAddress != null) return false; } else if (!managementAddress.equals(other.managementAddress)) return false; if (managementNotificationAddress == null) { if (other.managementNotificationAddress != null) return false; } else if (!managementNotificationAddress.equals(other.managementNotificationAddress)) return false; if (maskPassword != other.maskPassword) return false; if (maxConcurrentPageIO != other.maxConcurrentPageIO) return false; if (memoryMeasureInterval != other.memoryMeasureInterval) return false; if (memoryWarningThreshold != other.memoryWarningThreshold) return false; if (messageCounterEnabled != other.messageCounterEnabled) return false; if (messageCounterMaxDayHistory != other.messageCounterMaxDayHistory) return false; if (messageCounterSamplePeriod != other.messageCounterSamplePeriod) return false; if (messageExpiryScanPeriod != other.messageExpiryScanPeriod) return false; if (messageExpiryThreadPriority != other.messageExpiryThreadPriority) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (outgoingInterceptorClassNames == null) { if (other.outgoingInterceptorClassNames != null) return false; } else if (!outgoingInterceptorClassNames.equals(other.outgoingInterceptorClassNames)) return false; if (pagingDirectory == null) { if (other.pagingDirectory != null) return false; } else if (!pagingDirectory.equals(other.pagingDirectory)) return false; if (persistDeliveryCountBeforeDelivery != other.persistDeliveryCountBeforeDelivery) return false; if (persistIDCache != other.persistIDCache) return false; if (persistenceEnabled != other.persistenceEnabled) return false; if (queueConfigurations == null) { if (other.queueConfigurations != null) return false; } else if (!queueConfigurations.equals(other.queueConfigurations)) return false; if (scheduledThreadPoolMaxSize != other.scheduledThreadPoolMaxSize) return false; if (securityEnabled != other.securityEnabled) return false; if (populateValidatedUser != other.populateValidatedUser) return false; if (securityInvalidationInterval != other.securityInvalidationInterval) return false; if (securitySettings == null) { if (other.securitySettings != null) return false; } else if (!securitySettings.equals(other.securitySettings)) return false; if (serverDumpInterval != other.serverDumpInterval) return false; if (threadPoolMaxSize != other.threadPoolMaxSize) return false; if (transactionTimeout != other.transactionTimeout) return false; if (transactionTimeoutScanPeriod != other.transactionTimeoutScanPeriod) return false; if (wildcardConfiguration == null) { if (other.wildcardConfiguration != null) return false; } else if (!wildcardConfiguration.equals(other.wildcardConfiguration)) return false; if (resolveProtocols != other.resolveProtocols) return false; if (journalLockAcquisitionTimeout != other.journalLockAcquisitionTimeout) return false; if (connectionTtlCheckInterval != other.connectionTtlCheckInterval) return false; if (journalDatasync != other.journalDatasync) { return false; } if (globalMaxSize != null && !globalMaxSize.equals(other.globalMaxSize)) { return false; } if (maxDiskUsage != other.maxDiskUsage) { return false; } if (diskScanPeriod != other.diskScanPeriod) { return false; } if (connectionTtlCheckInterval != other.connectionTtlCheckInterval) { return false; } return true; } @Override public Configuration copy() throws Exception { return AccessController.doPrivileged(new PrivilegedExceptionAction<Configuration>() { @Override public Configuration run() throws Exception { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream os = new ObjectOutputStream(bos); os.writeObject(ConfigurationImpl.this); Configuration config; try (ObjectInputStream ois = new ObjectInputStreamWithClassLoader(new ByteArrayInputStream(bos.toByteArray()))) { config = (Configuration) ois.readObject(); } // this is transient because of possible jgroups integration, we need to copy it manually config.setBroadcastGroupConfigurations(ConfigurationImpl.this.getBroadcastGroupConfigurations()); // this is transient because of possible jgroups integration, we need to copy it manually config.setDiscoveryGroupConfigurations(ConfigurationImpl.this.getDiscoveryGroupConfigurations()); return config; } }); } @Override public ConfigurationImpl setJournalLockAcquisitionTimeout(long journalLockAcquisitionTimeout) { this.journalLockAcquisitionTimeout = journalLockAcquisitionTimeout; return this; } @Override public long getJournalLockAcquisitionTimeout() { return journalLockAcquisitionTimeout; } @Override public HAPolicyConfiguration getHAPolicyConfiguration() { return haPolicyConfiguration; } @Override public ConfigurationImpl setHAPolicyConfiguration(HAPolicyConfiguration haPolicyConfiguration) { this.haPolicyConfiguration = haPolicyConfiguration; return this; } @Override public URL getConfigurationUrl() { return configurationUrl; } @Override public ConfigurationImpl setConfigurationUrl(URL configurationUrl) { this.configurationUrl = configurationUrl; return this; } @Override public long getConfigurationFileRefreshPeriod() { return configurationFileRefreshPeriod; } @Override public ConfigurationImpl setConfigurationFileRefreshPeriod(long configurationFileRefreshPeriod) { this.configurationFileRefreshPeriod = configurationFileRefreshPeriod; return this; } @Override public int getDiskScanPeriod() { return diskScanPeriod; } @Override public String getInternalNamingPrefix() { return internalNamingPrefix; } @Override public ConfigurationImpl setInternalNamingPrefix(String internalNamingPrefix) { this.internalNamingPrefix = internalNamingPrefix; return this; } @Override public ConfigurationImpl setDiskScanPeriod(int diskScanPeriod) { this.diskScanPeriod = diskScanPeriod; return this; } @Override public ConfigurationImpl setNetworkCheckList(String list) { this.networkCheckList = list; return this; } @Override public String getNetworkCheckList() { return networkCheckList; } @Override public ConfigurationImpl setNetworkCheckURLList(String urls) { this.networkURLList = urls; return this; } @Override public String getNetworkCheckURLList() { return networkURLList; } /** * The interval on which we will perform network checks. */ @Override public ConfigurationImpl setNetworkCheckPeriod(long period) { this.networkCheckPeriod = period; return this; } @Override public long getNetworkCheckPeriod() { return this.networkCheckPeriod; } /** * Time in ms for how long we should wait for a ping to finish. */ @Override public ConfigurationImpl setNetworkCheckTimeout(int timeout) { this.networkCheckTimeout = timeout; return this; } @Override public int getNetworkCheckTimeout() { return this.networkCheckTimeout; } @Override public Configuration setNetworCheckNIC(String nic) { this.networkCheckNIC = nic; return this; } @Override public String getNetworkCheckNIC() { return networkCheckNIC; } @Override public String getNetworkCheckPingCommand() { return networkCheckPingCommand; } @Override public ConfigurationImpl setNetworkCheckPingCommand(String command) { this.networkCheckPingCommand = command; return this; } @Override public String getNetworkCheckPing6Command() { return networkCheckPing6Command; } @Override public Configuration setNetworkCheckPing6Command(String command) { this.networkCheckPing6Command = command; return this; } /** * It will find the right location of a subFolder, related to artemisInstance */ private File subFolder(String subFolder) { try { return getBrokerInstance().toPath().resolve(subFolder).toFile(); } catch (Exception e) { throw new RuntimeException(e); } } }