private boolean dispose() { EntryState state = _state; if(state != DELETED_STATE && _stateUpdater.compareAndSet(this,state,DELETED_STATE)) { notifyStateChange(state, DELETED_STATE); _queueEntryList.entryDeleted(this); onDelete(); _message.release(); return true; } else { return false; } }
@Override public QueueEntry getLeastSignificantOldestEntry() { return getEntries().getLeastSignificantOldestEntry(); }
@Override public Queue<?> getQueue() { return _queueEntryList.getQueue(); }
@Override public QueueEntryIterator queueEntryIterator() { return getEntries().iterator(); }
private void notifyStateChange(final EntryState oldState, final EntryState newState) { _queueEntryList.updateStatsOnStateChange(this, oldState, newState); StateChangeListenerEntry<? super QueueEntry, EntryState> entry = _listenersUpdater.get(this); while(entry != null) { StateChangeListener<? super QueueEntry, EntryState> l = entry.getListener(); if(l != null) { l.stateChanged(this, oldState, newState); } entry = entry.next(); } }
@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; }
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); } }
@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; }
QueueEntryImpl(QueueEntryList queueEntryList, ServerMessage message, final MessageEnqueueRecord enqueueRecord) { _queueEntryList = queueEntryList; _message = message == null ? null : message.newReference(queueEntryList.getQueue()); populateInstanceProperties(); _enqueueRecord = enqueueRecord; }
@Override public void checkMessageStatus() QueueEntryIterator queueListIterator = getEntries().iterator();
QueueEntryImpl(QueueEntryList queueEntryList, ServerMessage message, final long entryId, final MessageEnqueueRecord enqueueRecord) { _queueEntryList = queueEntryList; _message = message == null ? null : message.newReference(queueEntryList.getQueue()); _entryIdUpdater.set(this, entryId); populateInstanceProperties(); _enqueueRecord = enqueueRecord; }
if (entries != null) final QueueEntryIterator queueListIterator = entries.iterator(); while (!_stopped.get() && queueListIterator.advance())
@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 } } } }
@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; }