summaryrefslogtreecommitdiff
path: root/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java')
-rw-r--r--java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java92
1 files changed, 84 insertions, 8 deletions
diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java b/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
index afe3c9a44e..fd8c402344 100644
--- a/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
+++ b/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
@@ -25,35 +25,42 @@ import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import java.util.TreeSet;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
-import org.apache.qpid.server.util.PortUtil;
import org.codehaus.jackson.map.ObjectMapper;
import org.apache.qpid.server.configuration.BrokerProperties;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.logging.messages.BrokerMessages;
import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.DefaultVirtualHostAlias;
+import org.apache.qpid.server.model.HostNameAlias;
import org.apache.qpid.server.model.KeyStore;
import org.apache.qpid.server.model.ManagedAttributeField;
-import org.apache.qpid.server.model.ManagedContextDefault;
import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
import org.apache.qpid.server.model.Protocol;
import org.apache.qpid.server.model.State;
import org.apache.qpid.server.model.Transport;
import org.apache.qpid.server.model.TrustStore;
+import org.apache.qpid.server.model.VirtualHostAlias;
+import org.apache.qpid.server.model.VirtualHostNameAlias;
+import org.apache.qpid.server.model.VirtualHostNode;
import org.apache.qpid.server.plugin.ProtocolEngineCreator;
import org.apache.qpid.server.plugin.QpidServiceLoader;
import org.apache.qpid.server.plugin.TransportProviderFactory;
import org.apache.qpid.server.transport.AcceptingTransport;
import org.apache.qpid.server.transport.TransportProvider;
+import org.apache.qpid.server.util.PortUtil;
import org.apache.qpid.server.util.ServerScopedRuntimeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
import org.apache.qpid.transport.network.security.ssl.QpidMultipleTrustManager;
@@ -63,6 +70,29 @@ public class AmqpPortImpl extends AbstractClientAuthCapablePortWithAuthProvider<
public static final String DEFAULT_BINDING_ADDRESS = "*";
+
+ private static final Comparator<VirtualHostAlias> VIRTUAL_HOST_ALIAS_COMPARATOR = new Comparator<VirtualHostAlias>()
+ {
+ @Override
+ public int compare(final VirtualHostAlias left, final VirtualHostAlias right)
+ {
+ int comparison = left.getPriority() - right.getPriority();
+ if (comparison == 0)
+ {
+ long createCompare = left.getCreatedTime() - right.getCreatedTime();
+ if (createCompare == 0)
+ {
+ comparison = left.getName().compareTo(right.getName());
+ }
+ else
+ {
+ comparison = createCompare < 0l ? -1 : 1;
+ }
+ }
+ return comparison;
+ }
+ };
+
@ManagedAttributeField
private boolean _tcpNoDelay;
@@ -111,15 +141,47 @@ public class AmqpPortImpl extends AbstractClientAuthCapablePortWithAuthProvider<
}
@Override
+ protected void onCreate()
+ {
+ super.onCreate();
+
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put(VirtualHostAlias.NAME, "nameAlias");
+ attributes.put(VirtualHostAlias.TYPE, VirtualHostNameAlias.TYPE_NAME);
+ attributes.put(VirtualHostAlias.DURABLE, true);
+ createVirtualHostAlias(attributes);
+
+ attributes = new HashMap<>();
+ attributes.put(VirtualHostAlias.NAME, "defaultAlias");
+ attributes.put(VirtualHostAlias.TYPE, DefaultVirtualHostAlias.TYPE_NAME);
+ attributes.put(VirtualHostAlias.DURABLE, true);
+ createVirtualHostAlias(attributes);
+
+
+ attributes = new HashMap<>();
+ attributes.put(VirtualHostAlias.NAME, "hostnameAlias");
+ attributes.put(VirtualHostAlias.TYPE, HostNameAlias.TYPE_NAME);
+ attributes.put(VirtualHostAlias.DURABLE, true);
+ createVirtualHostAlias(attributes);
+
+ }
+
+ @Override
public VirtualHostImpl getVirtualHost(String name)
{
- // TODO - aliases
- if(name == null || name.trim().length() == 0)
+ Collection<VirtualHostAlias> aliases = new TreeSet<>(VIRTUAL_HOST_ALIAS_COMPARATOR);
+
+ aliases.addAll(getChildren(VirtualHostAlias.class));
+
+ for(VirtualHostAlias alias : aliases)
{
- name = _broker.getDefaultVirtualHost();
+ VirtualHostNode vhn = alias.getVirtualHostNode(name);
+ if (vhn != null)
+ {
+ return (VirtualHostImpl) vhn.getVirtualHost();
+ }
}
-
- return (VirtualHostImpl) _broker.findVirtualHostByName(name);
+ return null;
}
@Override
@@ -156,7 +218,6 @@ public class AmqpPortImpl extends AbstractClientAuthCapablePortWithAuthProvider<
{
sslContext = createSslContext();
}
-
Protocol defaultSupportedProtocolReply = getDefaultAmqpSupportedReply();
_transport = transportProvider.createTransport(transportSet,
@@ -189,6 +250,20 @@ public class AmqpPortImpl extends AbstractClientAuthCapablePortWithAuthProvider<
}
@Override
+ public VirtualHostAlias createVirtualHostAlias(Map<String, Object> attributes)
+ {
+ VirtualHostAlias child = addVirtualHostAlias(attributes);
+ childAdded(child);
+ return child;
+ }
+
+ private VirtualHostAlias addVirtualHostAlias(Map<String,Object> attributes)
+ {
+ return getObjectFactory().create(VirtualHostAlias.class, attributes, this);
+ }
+
+
+ @Override
public void validateOnCreate()
{
super.validateOnCreate();
@@ -215,6 +290,7 @@ public class AmqpPortImpl extends AbstractClientAuthCapablePortWithAuthProvider<
try
{
SSLContext sslContext = SSLContext.getInstance("TLS");
+
KeyManager[] keyManagers = keyStore.getKeyManagers();
TrustManager[] trustManagers;