From f155b94e1d419098ec113996c70bc71e333d3a9b Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Sat, 6 Sep 2014 23:02:48 +0000 Subject: QPID-6079 : [Java Broker] Objects created as duplicates should be automatically deleted git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1622961 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/qpid/server/exchange/AbstractExchange.java | 10 ++++++++++ .../org/apache/qpid/server/model/AbstractConfiguredObject.java | 7 ++++++- .../main/java/org/apache/qpid/server/queue/AbstractQueue.java | 9 +++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) (limited to 'qpid/java') 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> _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> im } } - protected void childAdded(ConfiguredObject child) + protected void childAdded(ConfiguredObject child) { synchronized (_changeListeners) { @@ -1213,6 +1213,7 @@ public abstract class AbstractConfiguredObject> 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> 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..1afae87101 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 @@ -1791,6 +1791,7 @@ public abstract class AbstractQueue> txn.commit(); preSetAlternateExchange(); + _alternateExchange = null; for (Action task : _deleteTaskList) @@ -2818,10 +2819,18 @@ public abstract class AbstractQueue> _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; } -- cgit v1.2.1