From a3d4e1299c52e9d0625b05a0efb6d3c849b84a94 Mon Sep 17 00:00:00 2001 From: Robert Gemmell Date: Mon, 4 Jan 2010 18:12:57 +0000 Subject: QPID-2096: decouple the addition of durable exchanges to the store from exchange registration. Remove auto-delete related persistence restriction from 0-10 based exchange declarations git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@895735 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/qpid/server/AMQBrokerManagerMBean.java | 4 ++++ .../qpid/server/exchange/DefaultExchangeRegistry.java | 6 +----- .../qpid/server/exchange/ExchangeInitialiser.java | 17 ++++++++++++----- .../qpid/server/handler/ExchangeDeclareHandler.java | 5 +++++ .../qpid/server/transport/ServerSessionDelegate.java | 2 +- .../apache/qpid/server/virtualhost/VirtualHostImpl.java | 5 +++++ .../org/apache/qpid/server/store/MessageStoreTest.java | 4 ++++ 7 files changed, 32 insertions(+), 11 deletions(-) (limited to 'java/broker/src') 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 08b3c08215..de1b69b0a4 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 @@ -203,6 +203,10 @@ public class AMQBrokerManagerMBean extends AMQManagedObject implements ManagedBr exchange = _exchangeFactory.createExchange(new AMQShortString(exchangeName), new AMQShortString(type), durable, false, 0); _exchangeRegistry.registerExchange(exchange); + if (durable) + { + _durableConfig.createExchange(exchange); + } } else { 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 2a8a87be7d..7b21ad6b91 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 @@ -54,7 +54,7 @@ public class DefaultExchangeRegistry implements ExchangeRegistry public void initialise() throws AMQException { - new ExchangeInitialiser().initialise(_host.getExchangeFactory(), this); + new ExchangeInitialiser().initialise(_host.getExchangeFactory(), this, getDurableConfigurationStore()); } @@ -68,10 +68,6 @@ public class DefaultExchangeRegistry implements ExchangeRegistry { _exchangeMap.put(exchange.getName(), exchange); _exchangeMapStr.put(exchange.getName().toString(), exchange); - if (exchange.isDurable()) - { - getDurableConfigurationStore().createExchange(exchange); - } } public void setDefaultExchange(Exchange exchange) diff --git a/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java b/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java index 59fe94ddc0..4dfcce7bbe 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java +++ b/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java @@ -23,25 +23,32 @@ package org.apache.qpid.server.exchange; import org.apache.qpid.AMQException; import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.framing.AMQShortString; +import org.apache.qpid.server.store.DurableConfigurationStore; public class ExchangeInitialiser { - public void initialise(ExchangeFactory factory, ExchangeRegistry registry) throws AMQException{ + public void initialise(ExchangeFactory factory, ExchangeRegistry registry, DurableConfigurationStore store) throws AMQException{ for (ExchangeType type : factory.getRegisteredTypes()) { - define (registry, factory, type.getDefaultExchangeName(), type.getName()); + define (registry, factory, type.getDefaultExchangeName(), type.getName(), store); } - define(registry, factory, ExchangeDefaults.DEFAULT_EXCHANGE_NAME, ExchangeDefaults.DIRECT_EXCHANGE_CLASS); + define(registry, factory, ExchangeDefaults.DEFAULT_EXCHANGE_NAME, ExchangeDefaults.DIRECT_EXCHANGE_CLASS, store); registry.setDefaultExchange(registry.getExchange(ExchangeDefaults.DEFAULT_EXCHANGE_NAME)); } private void define(ExchangeRegistry r, ExchangeFactory f, - AMQShortString name, AMQShortString type) throws AMQException + AMQShortString name, AMQShortString type, DurableConfigurationStore store) throws AMQException { if(r.getExchange(name)== null) { - r.registerExchange(f.createExchange(name, type, true, false, 0)); + Exchange exchange = f.createExchange(name, type, true, false, 0); + r.registerExchange(exchange); + + if(exchange.isDurable()) + { + store.createExchange(exchange); + } } } } diff --git a/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java b/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java index b0ee5fff08..1dd6f1413b 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java +++ b/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java @@ -97,6 +97,11 @@ public class ExchangeDeclareHandler implements StateAwareMethodListener