Author: knopp
Date: Tue Mar 31 21:02:12 2009
New Revision: 760624

URL: http://svn.apache.org/viewvc?rev=760624&view=rev
Log: (empty)

Modified:
    
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/persistent/disk/DiskDataStore.java

Modified: 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/persistent/disk/DiskDataStore.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/persistent/disk/DiskDataStore.java?rev=760624&r1=760623&r2=760624&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/persistent/disk/DiskDataStore.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket-ng/src/main/java/org/apache/wicket/page/persistent/disk/DiskDataStore.java
 Tue Mar 31 21:02:12 2009
@@ -1,10 +1,19 @@
 package org.apache.wicket.page.persistent.disk;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
 import java.io.Serializable;
 import java.nio.ByteBuffer;
 import java.nio.channels.FileChannel;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
@@ -31,6 +40,9 @@
                this.fileStoreFolder = fileStoreFolder;
                this.maxSizePerPageSession = maxSizePerSession;
                this.fileChannelPool = new 
FileChannelPool(fileChannelPoolCapacity);
+               
+               this.fileStoreFolder.mkdirs();          
+               loadIndex();
        }
 
        public DiskDataStore(String applicationName, int maxSizePerSession, int 
fileChannelPoolCapacity)
@@ -40,6 +52,7 @@
 
        public void destroy()
        {
+               saveIndex();
                fileChannelPool.destroy();
        }
 
@@ -106,6 +119,61 @@
                }
        }
 
+       @SuppressWarnings("unchecked")
+       private void loadIndex()
+       {
+               File storeFolder = getStoreFolder();
+               File index = new File(storeFolder, "DiskPageStoreIndex");
+               if (index.exists() && index.length() > 0)
+               {
+                       try
+                       {
+                               InputStream stream = new FileInputStream(index);
+                               ObjectInputStream ois = new 
ObjectInputStream(stream);
+                               Map<String, SessionEntry> map = (Map<String, 
SessionEntry>)ois.readObject();
+                               sessionEntryMap.clear();
+                               sessionEntryMap.putAll(map);
+                               
+                               for (Iterator<Entry<String, SessionEntry>> 
entries = sessionEntryMap.entrySet()
+                                       .iterator(); entries.hasNext();)
+                               {
+                                       // initialize the diskPageStore 
reference
+                                       Entry<String, SessionEntry> entry = 
entries.next();
+                                       SessionEntry sessionEntry = 
entry.getValue();
+                                       sessionEntry.diskDataStore = this;
+                               }
+                               stream.close();
+                       }
+                       catch (Exception e)
+                       {
+                               log.error("Couldn't load DiskPageStore index 
from file " + index + ".", e);
+                       }
+               }
+               index.delete();
+       }
+       
+       private void saveIndex()
+       {
+               File storeFolder = getStoreFolder();
+               if (storeFolder.exists())
+               {
+                       File index = new File(storeFolder, 
"DiskPageStoreIndex");
+                       index.delete();
+                       try
+                       {
+                               OutputStream stream = new 
FileOutputStream(index);
+                               ObjectOutputStream oos = new 
ObjectOutputStream(stream);
+                               oos.writeObject(sessionEntryMap);
+                               stream.close();
+                       }
+                       catch (Exception e)
+                       {
+                               log.error("Couldn't write DiskPageStore index 
to file " + index + ".", e);
+                       }
+               }
+       }
+
+       
        protected static class SessionEntry implements Serializable
        {
                private static final long serialVersionUID = 1L;


Reply via email to