@Override public MessageReference next() { synchronized (QueueImpl.this) { return iter.next(); } }
/** * @param iter */ private void assertNoSuchElementIsThrown(LinkedListIterator<Integer> iter) { try { iter.next(); fail("Should throw NoSuchElementException"); } catch (NoSuchElementException e) { // OK } }
@Override public synchronized MessageReference getReference(final long id1) throws ActiveMQException { try (LinkedListIterator<MessageReference> iterator = iterator()) { while (iterator.hasNext()) { MessageReference ref = iterator.next(); if (ref.getMessage().getMessageID() == id1) { return ref; } } return null; } }
protected Map<String, Object>[] getFirstMessage() throws Exception { checkStarted(); clearIO(); try { List<Map<String, Object>> messages = new ArrayList<>(); queue.flushExecutor(); try (LinkedListIterator<MessageReference> iterator = queue.browserIterator()) { // returns just the first, as it's the first only if (iterator.hasNext()) { MessageReference ref = iterator.next(); Message message = ref.getMessage(); messages.add(message.toMap()); } return messages.toArray(new Map[1]); } } finally { blockOnIO(); } }
/** * checks that there are no message duplicates in the page. Any IDs found in the ignoreIds field will not be tested * this allows us to test only those messages that have been sent after the address has started paging (ignoring any * duplicates that may have happened before this point). */ protected int processCountThroughIterator(Queue queue) throws Exception { LinkedListIterator<MessageReference> pageIterator = queue.browserIterator(); int count = 0; while (pageIterator.hasNext()) { MessageReference reference = pageIterator.next(); count++; } return count; } }
/** * checks that there are no message duplicates in the page. Any IDs found in the ignoreIds field will not be tested * this allows us to test only those messages that have been sent after the address has started paging (ignoring any * duplicates that may have happened before this point). */ public void checkBatchMessagesAreNotPagedTwice(Queue queue) throws Exception { LinkedListIterator<MessageReference> pageIterator = queue.browserIterator(); Set<String> messageOrderSet = new HashSet<>(); int duplicates = 0; while (pageIterator.hasNext()) { MessageReference reference = pageIterator.next(); String id = reference.getMessage().getStringProperty("id"); // If add(id) returns true it means that this id was already added to this set. Hence a duplicate is found. if (!messageOrderSet.add(id)) { duplicates++; } } assertTrue(duplicates == 0); }
@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 MessageReference removeReferenceWithID(final long id1) throws Exception { try (LinkedListIterator<MessageReference> iterator = iterator()) { MessageReference removed = null; while (iterator.hasNext()) { MessageReference ref = iterator.next(); if (ref.getMessage().getMessageID() == id1) { iterator.remove(); refRemoved(ref); removed = ref; break; } } if (removed == null) { // Look in scheduled deliveries removed = scheduledDeliveryHandler.removeReferenceWithID(id1); } return removed; } }
private void testIterate1(int num, LinkedListIterator<Integer> iter) { for (int i = 0; i < num; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); } assertFalse(iter.hasNext()); assertNoSuchElementIsThrown(iter); }
@Test public void testRemoveHead1() { int num = 10; LinkedListIterator<Integer> iter = list.iterator(); for (int i = 0; i < num; i++) { list.addTail(i); } iter.next(); iter.remove(); for (int i = 1; i < num; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); } assertFalse(iter.hasNext()); }
@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 changeReferencePriority(final long messageID, final byte newPriority) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { iter.remove(); refRemoved(ref); ref.getMessage().setPriority(newPriority); addTail(ref, false); return true; } } return false; } }
@Test public void testRemoveHeadAndTail1() { LinkedListIterator<Integer> iter = list.iterator(); int num = 10; for (int i = 0; i < num; i++) { list.addTail(i); assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); iter.remove(); } }
@Override public synchronized int changeReferencesPriority(final Filter filter, final byte newPriority) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { int count = 0; while (iter.hasNext()) { MessageReference ref = iter.next(); if (filter == null || filter.match(ref.getMessage())) { count++; iter.remove(); refRemoved(ref); ref.getMessage().setPriority(newPriority); addTail(ref, false); } } return count; } }
@Test public void testRemoveHead2() { int num = 10; for (int i = 0; i < num; i++) { list.addTail(i); } LinkedListIterator<Integer> iter = list.iterator(); iter.next(); iter.remove(); iter = list.iterator(); for (int i = 1; i < num; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); } assertFalse(iter.hasNext()); }
@Test public void testMixupIterator() { list.addTail(c, 5); list.addTail(a, 4); list.addTail(b, 4); LinkedListIterator<Wibble> iter = list.iterator(); assertTrue(iter.hasNext()); assertEquals(c, iter.next()); assertTrue(iter.hasNext()); assertEquals(a, iter.next()); assertTrue(iter.hasNext()); assertEquals(b, iter.next()); list.addTail(d, 5); assertTrue(iter.hasNext()); assertEquals(d, iter.next()); }
@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; } }
@Test public void testRemoveHeadAndTail2() { LinkedListIterator<Integer> iter = list.iterator(); int num = 10; for (int i = 0; i < num; i++) { list.addHead(i); assertEquals(1, list.size()); assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); iter.remove(); } }
@Test public void testRemoveHeadAndTail3() { LinkedListIterator<Integer> iter = list.iterator(); int num = 10; for (int i = 0; i < num; i++) { if (i % 2 == 0) { list.addHead(i); } else { list.addTail(i); } assertEquals(1, list.size()); assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); iter.remove(); } }
@Test public void testRemoveInTurn() { LinkedListIterator<Integer> iter = list.iterator(); int num = 10; for (int i = 0; i < num; i++) { list.addTail(i); } for (int i = 0; i < num; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); iter.remove(); } assertFalse(iter.hasNext()); assertEquals(0, list.size()); }