summaryrefslogtreecommitdiff
path: root/qpid/java/broker-core/src/main/java/org/apache/qpid/server
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/broker-core/src/main/java/org/apache/qpid/server')
-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, 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;
}