diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2014-09-06 23:02:48 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2014-09-06 23:02:48 +0000 |
| commit | f155b94e1d419098ec113996c70bc71e333d3a9b (patch) | |
| tree | 9ebfeefddc693423da304b3faf6fab3512374392 /qpid/java | |
| parent | 099703fcc0f3bfdf62c6f680cd7dbe5e9f42935d (diff) | |
| download | qpid-python-f155b94e1d419098ec113996c70bc71e333d3a9b.tar.gz | |
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
Diffstat (limited to 'qpid/java')
3 files changed, 25 insertions, 1 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..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<X extends AbstractQueue<X>> txn.commit(); preSetAlternateExchange(); + _alternateExchange = null; for (Action<? super AMQQueue> task : _deleteTaskList) @@ -2818,10 +2819,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; } |
