From 5dc7aa95dc752147632cdb4f442c0d4015f35596 Mon Sep 17 00:00:00 2001
From: cramakri <cramakri>
Date: Thu, 14 Mar 2013 15:42:54 +0000
Subject: [PATCH] BIS-358 SP-567 : Reinitialize the file in a queue persister
 if it seems necessary

SVN: 28616
---
 .../systemsx/cisd/common/io/QueuePersister.java   |  9 ++++++---
 ...sistentExtendedBlockingQueueDecoratorTest.java | 15 +++++++++++++++
 2 files changed, 21 insertions(+), 3 deletions(-)

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 cd062995a59..3f68b7b9b0a 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 d41180ef5cb..5fa669e84f5 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()
     {
-- 
GitLab