diff --git a/common/source/java/ch/systemsx/cisd/common/io/QueuePersister.java b/common/source/java/ch/systemsx/cisd/common/io/QueuePersister.java index cd062995a599d4455cf4c6b707e248c07aa4c7a4..3f68b7b9b0a6603a37892a1f6ae1d5e1a462af42 100644 --- a/common/source/java/ch/systemsx/cisd/common/io/QueuePersister.java +++ b/common/source/java/ch/systemsx/cisd/common/io/QueuePersister.java @@ -440,10 +440,13 @@ public class QueuePersister<E> implements IQueuePersister<E> { try { - if (randomAccessFile.getFD().valid() == false - || false == randomAccessFile.getChannel().isOpen()) + if (randomAccessFile.getFD().valid() == false) + + { + this.randomAccessFile = new RandomAccessFile(queueFile, "rw"); + } else if (false == randomAccessFile.getChannel().isOpen()) { - throw new IllegalStateException("Cannot persist: file is closed."); + this.randomAccessFile = new RandomAccessFile(queueFile, "rw"); } } catch (IOException ex) { diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/io/PersistentExtendedBlockingQueueDecoratorTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/io/PersistentExtendedBlockingQueueDecoratorTest.java index d41180ef5cbf820b14ad9f91670e576ecc7ddd03..5fa669e84f5fba5d8bee38c927d973549907618a 100644 --- a/common/sourceTest/java/ch/systemsx/cisd/common/io/PersistentExtendedBlockingQueueDecoratorTest.java +++ b/common/sourceTest/java/ch/systemsx/cisd/common/io/PersistentExtendedBlockingQueueDecoratorTest.java @@ -112,6 +112,21 @@ public class PersistentExtendedBlockingQueueDecoratorTest assertEquals(items, asList(createQueue())); } + @Test + public void testAddClose() + { + final List<String> items = Arrays.asList("one", "two"); + PersistentExtendedBlockingQueueDecorator<String> persistentQueue = createQueue(); + for (String item : items) + { + persistentQueue.add(item); + } + persistentQueue.close(); + persistentQueue.add("three"); + + assertEquals(items.size() + 1, asList(createQueue()).size()); + } + @Test public void testAddLongItem() {