diff options
author | Keith Wall <kwall@apache.org> | 2011-11-11 09:45:26 +0000 |
---|---|---|
committer | Keith Wall <kwall@apache.org> | 2011-11-11 09:45:26 +0000 |
commit | 9da016b7e810e054bb2b0cf21bf1ad5573c97d4b (patch) | |
tree | 2d55c2b8e944eb0ae7661a2c4c92e9af3fa9f83c /java/broker/src/main/java/org/apache | |
parent | ed1d246c2913d2d9993d440637c970e6f845a24a (diff) | |
download | qpid-python-9da016b7e810e054bb2b0cf21bf1ad5573c97d4b.tar.gz |
QPID-3490: creating queue via JMX now binds the queue to the default exchange; prevented unregistration of the default exchange.
Applied patch from Oleksandr Rudyy<orudyy@gmail.com> and myself.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1200790 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/broker/src/main/java/org/apache')
-rw-r--r-- | java/broker/src/main/java/org/apache/qpid/server/AMQBrokerManagerMBean.java | 7 | ||||
-rw-r--r-- | java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java | 18 |
2 files changed, 20 insertions, 5 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/AMQBrokerManagerMBean.java b/java/broker/src/main/java/org/apache/qpid/server/AMQBrokerManagerMBean.java index d1ea5dba69..76b6dad996 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/AMQBrokerManagerMBean.java +++ b/java/broker/src/main/java/org/apache/qpid/server/AMQBrokerManagerMBean.java @@ -60,6 +60,7 @@ public class AMQBrokerManagerMBean extends AMQManagedObject implements ManagedBr private final QueueRegistry _queueRegistry; private final ExchangeRegistry _exchangeRegistry; private final ExchangeFactory _exchangeFactory; + private final Exchange _defaultExchange; private final DurableConfigurationStore _durableConfig; private final VirtualHostImpl.VirtualHostMBean _virtualHostMBean; @@ -74,6 +75,7 @@ public class AMQBrokerManagerMBean extends AMQManagedObject implements ManagedBr _queueRegistry = virtualHost.getQueueRegistry(); _exchangeRegistry = virtualHost.getExchangeRegistry(); + _defaultExchange = _exchangeRegistry.getDefaultExchange(); _durableConfig = virtualHost.getDurableConfigurationStore(); _exchangeFactory = virtualHost.getExchangeFactory(); } @@ -256,13 +258,14 @@ public class AMQBrokerManagerMBean extends AMQManagedObject implements ManagedBr ownerShortString = new AMQShortString(owner); } - queue = AMQQueueFactory.createAMQQueueImpl(new AMQShortString(queueName), durable, ownerShortString, false, false, getVirtualHost(), null); + final VirtualHost virtualHost = getVirtualHost(); + queue = AMQQueueFactory.createAMQQueueImpl(new AMQShortString(queueName), durable, ownerShortString, false, false, virtualHost, null); if (queue.isDurable() && !queue.isAutoDelete()) { _durableConfig.createQueue(queue); } - _queueRegistry.registerQueue(queue); + virtualHost.getBindingFactory().addBinding(queueName, queue, _defaultExchange, null); } catch (AMQException ex) { diff --git a/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java b/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java index 0e7459498a..8d2dee5aaa 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java +++ b/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java @@ -27,7 +27,9 @@ import java.util.concurrent.ConcurrentMap; import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.framing.AMQShortString; +import org.apache.qpid.protocol.AMQConstant; import org.apache.qpid.server.queue.IncomingMessage; import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.virtualhost.VirtualHost; @@ -87,12 +89,22 @@ public class DefaultExchangeRegistry implements ExchangeRegistry public void unregisterExchange(AMQShortString name, boolean inUse) throws AMQException { - // Check access - if (!_host.getSecurityManager().authoriseDelete(_exchangeMap.get(name))) + final Exchange exchange = _exchangeMap.get(name); + if (exchange == null) + { + throw new AMQException(AMQConstant.NOT_FOUND, "Unknown exchange " + name, null); + } + + if (ExchangeDefaults.DEFAULT_EXCHANGE_NAME.equals(name)) + { + throw new AMQException(AMQConstant.NOT_ALLOWED, "Cannot unregister the default exchange", null); + } + + if (!_host.getSecurityManager().authoriseDelete(exchange)) { throw new AMQSecurityException(); } - + // TODO: check inUse argument Exchange e = _exchangeMap.remove(name); |