diff options
Diffstat (limited to 'qpid/java')
2 files changed, 52 insertions, 4 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java index 9abeac5f31..e9390703c7 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java @@ -35,6 +35,8 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import org.apache.log4j.Logger; + import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.HostNameAlias; import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; @@ -47,6 +49,8 @@ public class HostNameAliasImpl implements HostNameAlias<HostNameAliasImpl> { + private static final Logger LOG = Logger.getLogger(HostNameAliasImpl.class); + private final Set<InetAddress> _localAddresses = new CopyOnWriteArraySet<>(); private final Set<String> _localAddressNames = new CopyOnWriteArraySet<>(); private final Lock _addressLock = new ReentrantLock(); @@ -62,7 +66,12 @@ public class HostNameAliasImpl protected void onOpen() { super.onOpen(); - Thread thread = new Thread(new NetworkAddressResolver(), "Network Address Resolver"); + String bindingAddress = ((AmqpPort) getPort()).getBindingAddress(); + Thread thread = new Thread(new NetworkAddressResolver(), + "Network Address Resolver (Port: " + + (useAllAddresses(bindingAddress) ? "" : bindingAddress) + + ":" + getPort().getPort() +")"); + thread.setDaemon(true); thread.start(); } @@ -138,7 +147,7 @@ public class HostNameAliasImpl try { Collection<InetAddress> inetAddresses; - if(bindingAddress == null || bindingAddress.trim().equals("") || bindingAddress.trim().equals("*")) + if(useAllAddresses(bindingAddress)) { inetAddresses = getAllInetAddresses(); } @@ -168,7 +177,8 @@ public class HostNameAliasImpl } catch (SocketException | UnknownHostException e) { - // ignore + LOG.error("Unable to correctly calculate host name aliases for port " + getPort().getName() + + ". This may lead to connection failures.", e); } finally { @@ -190,4 +200,9 @@ public class HostNameAliasImpl return addresses; } } + + private boolean useAllAddresses(final String bindingAddress) + { + return bindingAddress == null || bindingAddress.trim().equals("") || bindingAddress.trim().equals("*"); + } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java index df47b1a94e..0f4399ae62 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java @@ -21,11 +21,16 @@ package org.apache.qpid.server.virtualhostalias; import java.util.Map; +import java.util.Set; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; +import org.apache.qpid.server.configuration.IllegalConfigurationException; +import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ManagedAttributeField; import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; -import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.PatternMatchingAlias; +import org.apache.qpid.server.model.Port; public final class PatternMatchingAliasImpl extends AbstractFixedVirtualHostNodeAlias<PatternMatchingAliasImpl> @@ -47,6 +52,34 @@ public final class PatternMatchingAliasImpl } @Override + public void onValidate() + { + super.onValidate(); + validatePattern(getPattern()); + + } + + @Override + protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes) + { + super.validateChange(proxyForValidation, changedAttributes); + validatePattern(((PatternMatchingAlias)proxyForValidation).getPattern()); + } + + private void validatePattern(final String pattern) + { + try + { + Pattern p = Pattern.compile(pattern); + } + catch (PatternSyntaxException e) + { + throw new IllegalConfigurationException("'"+pattern+"' is not a valid Java regex pattern", e); + } + + } + + @Override public String getPattern() { return _pattern; |
