Details
-
Wish
-
Status: Closed
-
Major
-
Resolution: Not A Problem
-
3.0.0, master
-
None
-
None
-
Important
Description
Background
When JMSMail queue is empty the deQueue invocation leads to infinite loop.
Now the deQueue uses while(true) and tries to receive message with 10 second time out. When queue is empty the branch containing return statement is never executed.
Test
Please run this test in JMSMailQueueTest:
@Test
void dequeueWhenQueueIsEmpty() throws Exception {
MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
}
it's never stops.
Proposed solution to create the EmptyMailQueueException or TimeoutMailQueueException or even more specialized exception to describe the problem.
Also in bundle with new exceptions we could add new method to the MailQueue like this
MailQueueItem deQueue(long timeout, TimeUnit unit) throws MailQueueException, InterruptedException;
to give users explicit control over timeout. This new method also gives a kind of symmetry between enQueue and deQueue.
As an alternative I would suggest to simply return null when time is out and no message is available for return.