1 18 package org.apache.activemq.memory.buffer; 19 20 import org.apache.activemq.broker.region.MessageReference; 21 import org.apache.activemq.command.ActiveMQMessage; 22 import org.apache.activemq.command.Message; 23 24 import java.util.ArrayList ; 25 import java.util.Iterator ; 26 import java.util.LinkedList ; 27 import java.util.List ; 28 29 35 public class MessageQueue { 36 37 private MessageBuffer buffer; 38 private LinkedList list = new LinkedList (); 39 private int size; 40 private Object lock = new Object (); 41 private int position; 42 43 public MessageQueue(MessageBuffer buffer) { 44 this.buffer = buffer; 45 } 46 47 public void add(MessageReference messageRef) { 48 Message message = messageRef.getMessageHardRef(); 49 int delta = message.getSize(); 50 int newSize = 0; 51 synchronized (lock) { 52 list.add(messageRef); 53 size += delta; 54 newSize = size; 55 } 56 buffer.onSizeChanged(this, delta, newSize); 57 } 58 59 public void add(ActiveMQMessage message) { 60 int delta = message.getSize(); 61 int newSize = 0; 62 synchronized (lock) { 63 list.add(message); 64 size += delta; 65 newSize = size; 66 } 67 buffer.onSizeChanged(this, delta, newSize); 68 } 69 70 public int evictMessage() { 71 synchronized (lock) { 72 if (!list.isEmpty()) { 73 ActiveMQMessage message = (ActiveMQMessage) list.removeFirst(); 74 int messageSize = message.getSize(); 75 size -= messageSize; 76 return messageSize; 77 } 78 } 79 return 0; 80 } 81 82 85 public List getList() { 86 synchronized (lock) { 87 return new ArrayList (list); 88 } 89 } 90 91 public void appendMessages(List answer) { 92 synchronized (lock) { 93 for (Iterator iter = list.iterator(); iter.hasNext();) { 94 answer.add(iter.next()); 95 } 96 } 97 } 98 99 public int getSize() { 100 synchronized (lock) { 101 return size; 102 } 103 } 104 105 public int getPosition() { 106 return position; 107 } 108 109 public void setPosition(int position) { 110 this.position = position; 111 } 112 113 public void clear() { 114 synchronized (lock) { 115 list.clear(); 116 size = 0; 117 } 118 } 119 120 } 121 | Popular Tags |