summaryrefslogtreecommitdiff
path: root/java/broker/src
diff options
context:
space:
mode:
authorMartin Ritchie <ritchiem@apache.org>2009-03-06 12:25:04 +0000
committerMartin Ritchie <ritchiem@apache.org>2009-03-06 12:25:04 +0000
commitc76fdc86647faa33b2bcf3f911a1a7773f377eb9 (patch)
tree45e526698f243f76bfb5c71623c047d894d34ebe /java/broker/src
parentb7fb9f5027f2bf8920a6e32c649c4181db405fa9 (diff)
downloadqpid-python-c76fdc86647faa33b2bcf3f911a1a7773f377eb9.tar.gz
QPID-1639 : Added test to ensure that properties passed on QueueDeclare are applied to queue.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@750867 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/broker/src')
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java64
1 files changed, 59 insertions, 5 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java b/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
index f977dc0449..a2b514af68 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
@@ -23,13 +23,17 @@ package org.apache.qpid.server.queue;
import org.apache.qpid.AMQException;
import org.apache.qpid.framing.AMQShortString;
import org.apache.qpid.framing.FieldTable;
+import org.apache.qpid.protocol.AMQConstant;
import org.apache.qpid.server.configuration.QueueConfiguration;
import org.apache.qpid.server.virtualhost.VirtualHost;
-
public class AMQQueueFactory
{
public static final AMQShortString X_QPID_PRIORITIES = new AMQShortString("x-qpid-priorities");
+ public static final AMQShortString QPID_MAX_COUNT = new AMQShortString("qpid.max_count");
+ public static final AMQShortString QPID_MAX_SIZE = new AMQShortString("qpid.max_size");
+ public static final AMQShortString QPID_POLICY_TYPE = new AMQShortString("qpid.policy_type");
+ public static final String QPID_FLOW_TO_DISK = "flow_to_disk";
public static AMQQueue createAMQQueueImpl(AMQShortString name,
boolean durable,
@@ -39,10 +43,26 @@ public class AMQQueueFactory
throws AMQException
{
- final int priorities = arguments == null ? 1 : arguments.containsKey(X_QPID_PRIORITIES) ? arguments.getInteger(X_QPID_PRIORITIES) : 1;
+ int priorities = 1;
+
+ if (arguments != null && arguments.containsKey(X_QPID_PRIORITIES))
+ {
+ Integer priority = arguments.getInteger(X_QPID_PRIORITIES);
+
+ if (priority != null)
+ {
+ priorities = priority.intValue();
+ }
+ else
+ {
+ throw new AMQException(AMQConstant.INVALID_ARGUMENT,
+ "Queue create request with non integer value for :" + X_QPID_PRIORITIES + "=" + arguments.get(X_QPID_PRIORITIES), null);
+ }
+
+ }
AMQQueue q = null;
- if(priorities > 1)
+ if (priorities > 1)
{
q = new AMQPriorityQueue(name, durable, owner, autoDelete, virtualHost, priorities);
}
@@ -51,6 +71,40 @@ public class AMQQueueFactory
q = new SimpleAMQQueue(name, durable, owner, autoDelete, virtualHost);
}
+ final String queuePolicyType = arguments == null ? null :
+ arguments.containsKey(QPID_POLICY_TYPE) ? arguments.getString(QPID_POLICY_TYPE) : null;
+
+ if (queuePolicyType != null)
+ {
+ if (queuePolicyType.equals(QPID_FLOW_TO_DISK))
+ {
+ if (arguments.containsKey(QPID_MAX_SIZE))
+ {
+
+ final long queueSize = arguments.getInteger(QPID_MAX_SIZE);
+
+ if (queueSize < 0)
+ {
+ throw new AMQException(AMQConstant.INVALID_ARGUMENT,
+ "Queue create request with negative size:" + queueSize, null);
+ }
+
+ q.setMaximumMessageSize(queueSize);
+ }
+ else
+ {
+ throw new AMQException(AMQConstant.INVALID_ARGUMENT,
+ "Queue create request with no qpid.max_size value,", null);
+ }
+ }
+ else
+ {
+ throw new AMQException(AMQConstant.NOT_IMPLEMENTED,
+ "Queue create request with unknown Policy Type:" + queuePolicyType, null);
+ }
+
+ }
+
//Register the new queue
virtualHost.getQueueRegistry().registerQueue(q);
return q;
@@ -66,9 +120,9 @@ public class AMQQueueFactory
FieldTable arguments = null;
boolean priority = config.getPriority();
int priorities = config.getPriorities();
- if(priority || priorities > 0)
+ if (priority || priorities > 0)
{
- if(arguments == null)
+ if (arguments == null)
{
arguments = new FieldTable();
}