1 18 package org.apache.activemq.memory.buffer; 19 20 import java.util.Iterator ; 21 import java.util.LinkedList ; 22 23 29 public class OrderBasedMessageBuffer implements MessageBuffer { 30 31 private int limit = 100 * 64 * 1024; 32 private LinkedList list = new LinkedList (); 33 private int size; 34 private Object lock = new Object (); 35 36 public OrderBasedMessageBuffer() { 37 } 38 39 public OrderBasedMessageBuffer(int limit) { 40 this.limit = limit; 41 } 42 43 public int getSize() { 44 synchronized (lock) { 45 return size; 46 } 47 } 48 49 52 public MessageQueue createMessageQueue() { 53 return new MessageQueue(this); 54 } 55 56 62 public void onSizeChanged(MessageQueue queue, int delta, int queueSize) { 63 synchronized (lock) { 64 list.addLast(queue); 65 size += delta; 66 while (size > limit) { 67 MessageQueue biggest = (MessageQueue) list.removeFirst(); 68 size -= biggest.evictMessage(); 69 } 70 } 71 } 72 73 public void clear() { 74 synchronized (lock) { 75 for (Iterator iter = list.iterator(); iter.hasNext();) { 76 MessageQueue queue = (MessageQueue) iter.next(); 77 queue.clear(); 78 } 79 size = 0; 80 } 81 } 82 83 } 84 | Popular Tags |