summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2014-09-06 23:02:48 +0000
committerRobert Godfrey <rgodfrey@apache.org>2014-09-06 23:02:48 +0000
commitf155b94e1d419098ec113996c70bc71e333d3a9b (patch)
tree9ebfeefddc693423da304b3faf6fab3512374392 /qpid/java
parent099703fcc0f3bfdf62c6f680cd7dbe5e9f42935d (diff)
downloadqpid-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')
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java10
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java7
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java9
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;
}