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;