@Override public QueueEntryIterator queueEntryIterator() { return getEntries().iterator(); }
@Override public QueueEntry getLeastSignificantOldestEntry() { return getEntries().getLeastSignificantOldestEntry(); }
@Override public List<QueueEntry> getMessagesOnTheQueue() { ArrayList<QueueEntry> entryList = new ArrayList<QueueEntry>(); QueueEntryIterator queueListIterator = getEntries().iterator(); while (queueListIterator.advance()) { QueueEntry node = queueListIterator.getNode(); if (node != null && !node.isDeleted()) { entryList.add(node); } } return entryList; }
List<QueueEntry> getMessagesOnTheQueue(QueueEntryFilter filter) { ArrayList<QueueEntry> entryList = new ArrayList<QueueEntry>(); QueueEntryIterator queueListIterator = getEntries().iterator(); while (queueListIterator.advance() && !filter.filterComplete()) { QueueEntry node = queueListIterator.getNode(); MessageReference reference = node.newMessageReference(); if (reference != null) { try { if (!node.isDeleted() && filter.accept(node)) { entryList.add(node); } } finally { reference.release(); } } } return entryList; }
@Override public long getOldestMessageArrivalTime() { long oldestMessageArrivalTime = -1L; while(oldestMessageArrivalTime == -1L) { QueueEntryList entries = getEntries(); QueueEntry entry = entries == null ? null : entries.getOldestEntry(); if (entry != null) { ServerMessage message = entry.getMessage(); if(message != null) { try(MessageReference reference = message.newReference()) { oldestMessageArrivalTime = reference.getMessage().getArrivalTime(); } catch (MessageDeletedException e) { // ignore - the oldest message was deleted after it was discovered - we need to find the new oldest message } } } else { oldestMessageArrivalTime = 0; } } return oldestMessageArrivalTime; }
QueueEntry releasedNode = context.getReleasedEntry(); QueueEntry node = (releasedNode != null && lastSeen.compareTo(releasedNode)>=0) ? releasedNode : getEntries() .next(lastSeen); node = (releasedNode != null && lastSeen.compareTo(releasedNode)>=0) ? releasedNode : getEntries().next(lastSeen);
@Override public void checkMessageStatus() QueueEntryIterator queueListIterator = getEntries().iterator();
private void updateQueueEntryExpiration() final QueueEntryList entries = getEntries(); if (entries != null)
@Override public void visit(final QueueEntryVisitor visitor) { QueueEntryIterator queueListIterator = getEntries().iterator(); while(queueListIterator.advance()) { QueueEntry node = queueListIterator.getNode(); MessageReference reference = node.newMessageReference(); if(reference != null) { try { final boolean done = !node.isDeleted() && visitor.visit(node); if(done) { break; } } finally { reference.release(); } } } }
@Override public void reallocateMessages() { QueueEntryIterator queueListIterator = getEntries().iterator(); while (!_stopped.get() && queueListIterator.advance()) { final QueueEntry node = queueListIterator.getNode(); if (!node.isDeleted() && !node.expired()) { try { final ServerMessage message = node.getMessage(); final MessageReference messageReference = message.newReference(); try { message.getStoredMessage().reallocate(); } finally { messageReference.release(); } } catch (MessageDeletedException mde) { // Ignore } } } }
if(filters == null || !filters.startAtTail()) queueContext = new QueueContext(getEntries().getHead()); queueContext = new QueueContext(getEntries().getTail());
@Override public long clearQueue() { QueueEntryIterator queueListIterator = getEntries().iterator(); long count = 0; ServerTransaction txn = new LocalTransaction(getVirtualHost().getMessageStore()); while (queueListIterator.advance()) { final QueueEntry node = queueListIterator.getNode(); boolean acquired = node.acquireOrSteal(new Runnable() { @Override public void run() { dequeueEntry(node); } }); if (acquired) { dequeueEntry(node, txn); } } txn.commit(); return count; }
protected void doEnqueue(final ServerMessage message, final Action<? super MessageInstance> action, MessageEnqueueRecord enqueueRecord) { final QueueEntry entry = getEntries().add(message, enqueueRecord); updateExpiration(entry); try { if (entry.isAvailable()) { checkConsumersNotAheadOfDelivery(entry); notifyConsumers(entry); } checkForNotificationOnNewMessage(entry.getMessage()); } finally { if(action != null) { action.performAction(entry); } RejectPolicyHandler rejectPolicyHandler = _rejectPolicyHandler; if (rejectPolicyHandler != null) { rejectPolicyHandler.postEnqueue(entry); } _postEnqueueOverflowPolicyHandler.checkOverflow(entry); } }