summaryrefslogtreecommitdiff
path: root/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java')
-rw-r--r--java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java45
1 files changed, 30 insertions, 15 deletions
diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java b/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
index 733b6cecc2..5d09cfa8e2 100644
--- a/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
+++ b/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
@@ -31,15 +31,7 @@ import java.util.Map;
import org.apache.qpid.server.binding.Binding;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.message.MessageSource;
-import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.ConfiguredObjectFinder;
-import org.apache.qpid.server.model.Exchange;
-import org.apache.qpid.server.model.IllegalStateTransitionException;
-import org.apache.qpid.server.model.LifetimePolicy;
-import org.apache.qpid.server.model.Queue;
-import org.apache.qpid.server.model.QueueNotificationListener;
-import org.apache.qpid.server.model.State;
-import org.apache.qpid.server.model.Statistics;
+import org.apache.qpid.server.model.*;
import org.apache.qpid.server.protocol.AMQConnectionModel;
import org.apache.qpid.server.protocol.AMQSessionModel;
import org.apache.qpid.server.queue.*;
@@ -62,7 +54,6 @@ final class QueueAdapter<Q extends AMQQueue<?,Q,?>> extends AbstractAdapter impl
put(QUEUE_FLOW_CONTROL_SIZE_BYTES, Long.class);
put(QUEUE_FLOW_RESUME_SIZE_BYTES, Long.class);
put(MAXIMUM_DELIVERY_ATTEMPTS, Integer.class);
- put(EXCLUSIVE, Boolean.class);
put(DESCRIPTION, String.class);
}});
@@ -208,7 +199,7 @@ final class QueueAdapter<Q extends AMQQueue<?,Q,?>> extends AbstractAdapter impl
public LifetimePolicy getLifetimePolicy()
{
- return _queue.isAutoDelete() ? LifetimePolicy.AUTO_DELETE : LifetimePolicy.PERMANENT;
+ return _queue.getLifetimePolicy();
}
public LifetimePolicy setLifetimePolicy(final LifetimePolicy expected, final LifetimePolicy desired)
@@ -274,9 +265,33 @@ final class QueueAdapter<Q extends AMQQueue<?,Q,?>> extends AbstractAdapter impl
}
else if(EXCLUSIVE.equals(name))
{
- Boolean exclusiveFlag = (Boolean) desired;
- _queue.setExclusive(exclusiveFlag);
+ ExclusivityPolicy desiredPolicy;
+ if(desired == null)
+ {
+ desiredPolicy = ExclusivityPolicy.NONE;
+ }
+ else if(desired instanceof ExclusivityPolicy)
+ {
+ desiredPolicy = (ExclusivityPolicy)desired;
+ }
+ else if (desired instanceof String)
+ {
+ desiredPolicy = ExclusivityPolicy.valueOf((String)desired);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Cannot set " + Queue.EXCLUSIVE + " property to type " + desired.getClass().getName());
+ }
+ try
+ {
+ _queue.setExclusivityPolicy(desiredPolicy);
+ }
+ catch (MessageSource.ExistingConsumerPreventsExclusive existingConsumerPreventsExclusive)
+ {
+ throw new IllegalArgumentException("Unable to set exclusivity policy to " + desired + " as an existing combinations of consumers prevents this");
+ }
return true;
+
}
else if(MESSAGE_GROUP_KEY.equals(name))
{
@@ -376,7 +391,7 @@ final class QueueAdapter<Q extends AMQQueue<?,Q,?>> extends AbstractAdapter impl
}
else if(EXCLUSIVE.equals(name))
{
- return _queue.isExclusive();
+ return _queue.getAttribute(Queue.EXCLUSIVE);
}
else if(MESSAGE_GROUP_KEY.equals(name))
{
@@ -458,7 +473,7 @@ final class QueueAdapter<Q extends AMQQueue<?,Q,?>> extends AbstractAdapter impl
}
else if(LIFETIME_POLICY.equals(name))
{
- return _queue.isAutoDelete() ? LifetimePolicy.AUTO_DELETE : LifetimePolicy.PERMANENT;
+ return _queue.getLifetimePolicy();
}
else if(NAME.equals(name))
{