@Override public void referenceHandled(MessageReference ref) { incDelivering(ref); }
private void purgeAfterRollback(LinkedList<MessageReference> refs) { try { Transaction transaction = new TransactionImpl(storageManager); for (MessageReference reference : refs) { incDelivering(reference); // post ack will decrement this, so need to inc acknowledge(transaction, reference, AckReason.KILLED, null); } transaction.commit(); } catch (Exception e) { logger.warn(e.getMessage(), e); } }
@Override public void reacknowledge(final Transaction tx, final MessageReference ref) throws Exception { Message message = ref.getMessage(); if (message.isDurable() && isDurableMessage()) { tx.setContainsPersistent(); } getRefsOperation(tx).addAck(ref); // https://issues.jboss.org/browse/HORNETQ-609 incDelivering(ref); messagesAcknowledged.incrementAndGet(); }
@Override public synchronized boolean sendMessageToDeadLetterAddress(final long messageID) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { incDelivering(ref); sendToDeadLetterAddress(null, ref); iter.remove(); refRemoved(ref); return true; } } return false; } }
@Override public synchronized int sendMessagesToDeadLetterAddress(Filter filter) throws Exception { int count = 0; try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (filter == null || filter.match(ref.getMessage())) { incDelivering(ref); sendToDeadLetterAddress(null, ref); iter.remove(); refRemoved(ref); count++; } } return count; } }
@Override public synchronized boolean expireReference(final long messageID) throws Exception { if (isExpirationRedundant()) { return false; } try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { incDelivering(ref); expire(ref); iter.remove(); refRemoved(ref); return true; } } return false; } }
@Override public synchronized boolean moveReference(final long messageID, final SimpleString toAddress, final Binding binding, final boolean rejectDuplicate) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { iter.remove(); refRemoved(ref); incDelivering(ref); try { move(null, toAddress, binding, ref, rejectDuplicate, AckReason.NORMAL, null); } catch (Exception e) { decDelivering(ref); throw e; } return true; } } return false; } }
@Override public synchronized int expireReferences(final Filter filter) throws Exception { if (isExpirationRedundant()) { return 0; } Transaction tx = new TransactionImpl(storageManager); int count = 0; try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (filter == null || filter.match(ref.getMessage())) { incDelivering(ref); expire(tx, ref); iter.remove(); refRemoved(ref); count++; } } tx.commit(); return count; } }
@Override public synchronized boolean deleteReference(final long messageID) throws Exception { boolean deleted = false; Transaction tx = new TransactionImpl(storageManager); try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { incDelivering(ref); acknowledge(tx, ref); iter.remove(); refRemoved(ref); deleted = true; break; } } if (!deleted) { // Look in scheduled deliveries deleted = scheduledDeliveryHandler.removeReferenceWithID(messageID) != null ? true : false; } tx.commit(); return deleted; } }