diff options
Diffstat (limited to 'qpid/java/broker-core/src/main/java/org/apache/qpid/server')
3 files changed, 24 insertions, 2 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java index af1de8b099..c1c824a0c6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java @@ -763,12 +763,22 @@ public abstract class AbstractExchange<T extends AbstractExchange<T>> _state = State.ACTIVE; } + + @StateTransition(currentState = State.UNINITIALIZED, desiredState = State.DELETED) + private void doDeleteBeforeInitialize() + { + preSetAlternateExchange(); + _state = State.DELETED; + } + + @StateTransition(currentState = State.ACTIVE, desiredState = State.DELETED) private void doDelete() { try { _virtualHost.removeExchange(this,true); + preSetAlternateExchange(); _state = State.DELETED; } catch (ExchangeIsAlternateException | RequiredExchangeException e) diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java index 31de8118dd..9395adc024 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java @@ -901,7 +901,7 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im } } - protected void childAdded(ConfiguredObject child) + protected void childAdded(ConfiguredObject<?> child) { synchronized (_changeListeners) { @@ -1213,6 +1213,7 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im { if (_childrenByName.get(categoryClass).containsKey(name)) { + child.delete(); throw new DuplicateNameException(child); } _childrenByName.get(categoryClass).put(name, child); @@ -1229,6 +1230,10 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im public final void delete() { + if(getState() == State.UNINITIALIZED) + { + _desiredState = State.DELETED; + } setDesiredState(State.DELETED); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java index c49c2790df..ca89db3849 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java @@ -1792,7 +1792,6 @@ public abstract class AbstractQueue<X extends AbstractQueue<X>> preSetAlternateExchange(); - for (Action<? super AMQQueue> task : _deleteTaskList) { task.performAction(this); @@ -2818,10 +2817,18 @@ public abstract class AbstractQueue<X extends AbstractQueue<X>> _state = State.ACTIVE; } + @StateTransition(currentState = State.UNINITIALIZED, desiredState = State.DELETED) + private void doDeleteBeforeInitialize() + { + preSetAlternateExchange(); + _state = State.DELETED; + } + @StateTransition(currentState = State.ACTIVE, desiredState = State.DELETED) private void doDelete() { _virtualHost.removeQueue(this); + preSetAlternateExchange(); _state = State.DELETED; } |