From 178515aa3280a8b07c3b147406a8eb7410be99ed Mon Sep 17 00:00:00 2001 From: James Strachan Date: Fri, 3 Mar 2006 14:18:34 +0000 Subject: [PATCH] added an alternative eviction strategy git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@382830 13f79535-47bb-0310-9956-ffa450edef68 --- ...ageWithLowestPriorityEvictionStrategy.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 activemq-core/src/main/java/org/apache/activemq/broker/region/policy/OldestMessageWithLowestPriorityEvictionStrategy.java diff --git a/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/OldestMessageWithLowestPriorityEvictionStrategy.java b/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/OldestMessageWithLowestPriorityEvictionStrategy.java new file mode 100644 index 0000000000..6fad3212ce --- /dev/null +++ b/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/OldestMessageWithLowestPriorityEvictionStrategy.java @@ -0,0 +1,48 @@ +/** + * + * Copyright 2005-2006 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.activemq.broker.region.policy; + +import org.apache.activemq.broker.region.MessageReference; + +import java.io.IOException; +import java.util.Iterator; +import java.util.LinkedList; + +/** + * An eviction strategy which evicts the oldest message with the lowest priority first. + * + * @org.apache.xbean.XBean + * + * @version $Revision$messageEvictionStrategy + */ +public class OldestMessageWithLowestPriorityEvictionStrategy implements MessageEvictionStrategy { + + public MessageReference evictMessage(LinkedList messages) throws IOException { + byte lowestPriority = Byte.MAX_VALUE; + int pivot = 0; + Iterator iter = messages.iterator(); + for (int i = 0; iter.hasNext(); i++) { + MessageReference reference = (MessageReference) iter.next(); + byte priority = reference.getMessage().getPriority(); + if (priority < lowestPriority) { + lowestPriority = priority; + pivot = i; + } + } + return (MessageReference) messages.remove(pivot); + } +}