summaryrefslogtreecommitdiff
path: root/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java')
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java104
1 files changed, 77 insertions, 27 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
index 74b826da91..c09dd9449e 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
@@ -81,11 +81,13 @@ import org.apache.qpid.server.txn.LocalTransaction;
import org.apache.qpid.server.txn.ServerTransaction;
import org.apache.qpid.server.util.MapValueConverter;
import org.apache.qpid.server.plugin.VirtualHostFactory;
+import org.apache.qpid.server.virtualhost.ExchangeExistsException;
+import org.apache.qpid.server.virtualhost.ReservedExchangeNameException;
+import org.apache.qpid.server.virtualhost.UnknownExchangeException;
+import org.apache.qpid.server.virtualhost.VirtualHostListener;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
-public final class VirtualHostAdapter extends AbstractAdapter implements VirtualHost, ExchangeRegistry.RegistryChangeListener,
- QueueRegistry.RegistryChangeListener,
- IConnectionRegistry.RegistryChangeListener
+public final class VirtualHostAdapter extends AbstractAdapter implements VirtualHost, VirtualHostListener
{
private static final Logger LOGGER = Logger.getLogger(VirtualHostAdapter.class);
@@ -184,7 +186,7 @@ public final class VirtualHostAdapter extends AbstractAdapter implements Virtual
private void populateExchanges()
{
Collection<org.apache.qpid.server.exchange.Exchange> actualExchanges =
- _virtualHost.getExchangeRegistry().getExchanges();
+ _virtualHost.getExchanges();
synchronized (_exchangeAdapters)
{
@@ -296,31 +298,81 @@ public final class VirtualHostAdapter extends AbstractAdapter implements Virtual
try
{
- ExchangeRegistry exchangeRegistry = _virtualHost.getExchangeRegistry();
- if (exchangeRegistry.isReservedExchangeName(name))
+ String alternateExchange = null;
+ if(attributes.containsKey(Exchange.ALTERNATE_EXCHANGE))
{
- throw new UnsupportedOperationException("'" + name + "' is a reserved exchange name");
- }
- synchronized(exchangeRegistry)
- {
- org.apache.qpid.server.exchange.Exchange exchange = exchangeRegistry.getExchange(name);
- if (exchange != null)
+ Object altExchangeObject = attributes.get(Exchange.ALTERNATE_EXCHANGE);
+ if(altExchangeObject instanceof Exchange)
{
- throw new IllegalArgumentException("Exchange with name '" + name + "' already exists");
+ alternateExchange = ((Exchange) altExchangeObject).getName();
}
- exchange = _virtualHost.getExchangeFactory().createExchange(name, type, durable,
- lifetime == LifetimePolicy.AUTO_DELETE);
- _virtualHost.getExchangeRegistry().registerExchange(exchange);
- if(durable)
+ else if(altExchangeObject instanceof UUID)
{
- DurableConfigurationStoreHelper.createExchange(_virtualHost.getDurableConfigurationStore(),
- exchange);
+ for(Exchange ex : getExchanges())
+ {
+ if(altExchangeObject.equals(ex.getId()))
+ {
+ alternateExchange = ex.getName();
+ break;
+ }
+ }
}
- synchronized (_exchangeAdapters)
+ else if(altExchangeObject instanceof String)
{
- return _exchangeAdapters.get(exchange);
+
+ for(Exchange ex : getExchanges())
+ {
+ if(altExchangeObject.equals(ex.getName()))
+ {
+ alternateExchange = ex.getName();
+ break;
+ }
+ }
+ if(alternateExchange == null)
+ {
+ try
+ {
+ UUID id = UUID.fromString(altExchangeObject.toString());
+ for(Exchange ex : getExchanges())
+ {
+ if(id.equals(ex.getId()))
+ {
+ alternateExchange = ex.getName();
+ break;
+ }
+ }
+ }
+ catch(IllegalArgumentException e)
+ {
+ // ignore
+ }
+
+ }
}
}
+ org.apache.qpid.server.exchange.Exchange exchange = _virtualHost.createExchange(null,
+ name,
+ type,
+ durable,
+ lifetime == LifetimePolicy.AUTO_DELETE,
+ alternateExchange);
+ synchronized (_exchangeAdapters)
+ {
+ return _exchangeAdapters.get(exchange);
+ }
+
+ }
+ catch(ExchangeExistsException e)
+ {
+ throw new IllegalArgumentException("Exchange with name '" + name + "' already exists");
+ }
+ catch(ReservedExchangeNameException e)
+ {
+ throw new UnsupportedOperationException("'" + name + "' is a reserved exchange name");
+ }
+ catch(UnknownExchangeException e)
+ {
+ throw new IllegalArgumentException("Alternate Exchange with name '" + e.getExchangeName() + "' does not exist");
}
catch(AMQException e)
{
@@ -726,7 +778,7 @@ public final class VirtualHostAdapter extends AbstractAdapter implements Virtual
public Collection<String> getExchangeTypes()
{
Collection<ExchangeType<? extends org.apache.qpid.server.exchange.Exchange>> types =
- _virtualHost.getExchangeFactory().getRegisteredTypes();
+ _virtualHost.getExchangeTypes();
Collection<String> exchangeTypes = new ArrayList<String>();
@@ -884,7 +936,7 @@ public final class VirtualHostAdapter extends AbstractAdapter implements Virtual
if(SUPPORTED_EXCHANGE_TYPES.equals(name))
{
List<String> types = new ArrayList<String>();
- for(@SuppressWarnings("rawtypes") ExchangeType type : _virtualHost.getExchangeFactory().getRegisteredTypes())
+ for(@SuppressWarnings("rawtypes") ExchangeType type : _virtualHost.getExchangeTypes())
{
types.add(type.getName().asString());
}
@@ -1009,7 +1061,7 @@ public final class VirtualHostAdapter extends AbstractAdapter implements Virtual
}
else if(VirtualHost.EXCHANGE_COUNT.equals(name))
{
- return _vhost.getExchangeRegistry().getExchanges().size();
+ return _vhost.getExchanges().size();
}
else if(VirtualHost.CONNECTION_COUNT.equals(name))
{
@@ -1127,11 +1179,9 @@ public final class VirtualHostAdapter extends AbstractAdapter implements Virtual
virtualHostRegistry.registerVirtualHost(_virtualHost);
_statistics = new VirtualHostStatisticsAdapter(_virtualHost);
- _virtualHost.getQueueRegistry().addRegistryChangeListener(this);
+ _virtualHost.addVirtualHostListener(this);
populateQueues();
- _virtualHost.getExchangeRegistry().addRegistryChangeListener(this);
populateExchanges();
- _virtualHost.getConnectionRegistry().addRegistryChangeListener(this);
synchronized(_aliases)
{