Author: norman
Date: Wed Oct 6 14:48:27 2010
New Revision: 1005067
URL: http://svn.apache.org/viewvc?rev=1005067&view=rev
Log:
Add support for mail priority while dequeue mails from the ActiveMQMailQueue
(JAMES-1058)
Modified:
james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
Modified:
james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java?rev=1005067&r1=1005066&r2=1005067&view=diff
==============================================================================
---
james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
(original)
+++
james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
Wed Oct 6 14:48:27 2010
@@ -66,6 +66,14 @@ import org.apache.mailet.MailAddress;
*
* See http://activemq.apache.org/blob-messages.html for more details
*
+ *
+ * Some other supported feature is handling of priorities. See:
+ *
+ * http://activemq.apache.org/how-can-i-support-priority-queues.html
+ *
+ * For this just add a {...@link Mail} attribute with name {...@link
#MAIL_PRIORITY} to it. It should use one of the following
+ * value {...@link #LOW_PRIORITY}, {...@link #NORMAL_PRIORITY}, {...@link
#HIGH_PRIORITY}
+ *
*
*/
public class ActiveMQMailQueue implements MailQueue {
@@ -92,6 +100,31 @@ public class ActiveMQMailQueue implement
public final static int BLOBMESSAGE_ONLY = 0;
/**
+ * Handle mail with lowest priority
+ */
+ public final static int LOW_PRIORITY = 1;
+
+ /**
+ * Handle mail with normal priority (this is the default)
+ */
+ public final static int NORMAL_PRIORITY = 2;
+
+ /**
+ * Handle mail with highest priority
+ */
+ public final static int HIGH_PRIORITY = 3;
+
+ /**
+ * Attribute name for support if priority. If the attribute is set and
priority handling is enabled it will take care of move the Mails with
+ * higher priority to the head of the queue (so the mails are faster
handled).
+ *
+ * For enabling the feature in AMQ and get some more informations see:
+ *
+ * http://activemq.apache.org/how-can-i-support-priority-queues.html
+ */
+ public final static String MAIL_PRIORITY = "JMSPriority";
+
+ /**
* Construct a new ActiveMQ based {...@link MailQueue}.
* The messageTreshold is used to calculate if a {...@link BytesMessage}
or a {...@link BlobMessage} should be used when queuing the mail in
* ActiveMQ. A {...@link BlobMessage} is used If the message size is
bigger then the messageTreshold. The size if in bytes.
@@ -362,7 +395,7 @@ public class ActiveMQMailQueue implement
BytesMessage message = session.createBytesMessage();
populateJMSProperties(message, mail, delayInMillis);
-
+ populateJMSHeaders(message, mail);
mail.getMessage().writeTo(new
BytesMessageOutputStream(message));;
return message;
} else {
@@ -374,6 +407,8 @@ public class ActiveMQMailQueue implement
}
BlobMessage message = amqSession.createBlobMessage(new
MimeMessageInputStream(mail.getMessage()));
populateJMSProperties(message, mail, delayInMillis);
+ populateJMSHeaders(message, mail);
+
return message;
}
@@ -447,8 +482,17 @@ public class ActiveMQMailQueue implement
message.setStringProperty(JAMES_MAIL_ATTRIBUTE_NAMES,
attrsBuilder.toString());
message.setStringProperty(JAMES_MAIL_SENDER, sender);
message.setStringProperty(JAMES_MAIL_STATE, mail.getState());
-
+
+
}
+
+ private void populateJMSHeaders(Message message, Mail mail) throws
JMSException, MessagingException {
+ Object prio = mail.getAttribute(MAIL_PRIORITY);
+ if (prio instanceof Integer) {
+ message.setJMSPriority((Integer) prio);
+ }
+ }
+
/**
* Convert the attribute value if necessary.
*
Modified:
james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml?rev=1005067&r1=1005066&r2=1005067&view=diff
==============================================================================
--- james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
(original)
+++ james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
Wed Oct 6 14:48:27 2010
@@ -130,6 +130,17 @@
<!-- lets create an embedded ActiveMQ Broker -->
<amq:broker useJmx="false" persistent="true" dataDirectory="../data/"
schedulerSupport="true" id="broker">
+ <amq:destinationPolicy>
+ <amq:policyMap>
+ <amq:policyEntries>
+ <!-- Support priority handling of messages -->
+ <!--
http://activemq.apache.org/how-can-i-support-priority-queues.html -->
+ <!--
+ <amq:policyEntry queue=">" prioritizedMessages="true"/>
+ -->
+ </amq:policyEntries>
+ </amq:policyMap>
+ </amq:destinationPolicy>
<amq:transportConnectors>
<amq:transportConnector uri="tcp://localhost:0" />
</amq:transportConnectors>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]