You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2018/07/16 21:32:24 UTC

wicket git commit: WICKET-6563 update javadoc

Repository: wicket
Updated Branches:
  refs/heads/WICKET-6563 af606ac59 -> f08ab9049


WICKET-6563 update javadoc

IDataStore is no more, renamed test


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f08ab904
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f08ab904
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f08ab904

Branch: refs/heads/WICKET-6563
Commit: f08ab904982571dfad1821d5201c6744a2501560
Parents: af606ac
Author: Sven Meier <sv...@apache.org>
Authored: Mon Jul 16 11:06:24 2018 +0200
Committer: Sven Meier <sv...@apache.org>
Committed: Mon Jul 16 11:06:31 2018 +0200

----------------------------------------------------------------------
 .../java/org/apache/wicket/Application.java     |   2 +-
 .../core/util/string/ComponentRenderer.java     |   2 +-
 .../apache/wicket/pageStore/DiskPageStore.java  |  12 +-
 .../wicket/pageStore/IPersistentPageStore.java  |  10 +-
 .../wicket/pageStore/InMemoryPageStore.java     |   4 +-
 .../apache/wicket/settings/StoreSettings.java   |  23 +-
 .../pageStore/AsynchronousDataStoreTest.java    |   4 +-
 .../wicket/pageStore/DiskDataStoreTest.java     | 429 -------------------
 .../wicket/pageStore/DiskPageStoreTest.java     | 429 +++++++++++++++++++
 .../pageStore/disk/PageWindowManagerTest.java   |   2 +-
 .../browser/PersistedPagesProvider.java         |   6 +-
 .../diskstore/browser/PersistedPanel.java       |   2 +-
 .../browser/SessionIdentifiersModel.java        |   4 +-
 .../apache/wicket/jmx/StoreSettingsMBean.java   |   2 +-
 14 files changed, 465 insertions(+), 466 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-core/src/main/java/org/apache/wicket/Application.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Application.java b/wicket-core/src/main/java/org/apache/wicket/Application.java
index e1a0fb8..ab8c380 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Application.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Application.java
@@ -1024,7 +1024,7 @@ public abstract class Application implements UnboundListener, IEventSink
 	/** The Security Settings */
 	private SecuritySettings securitySettings;
 
-	/** The settings for {@link IPageStore}, {@link IDataStore} and {@link IPageManager} */
+	/** The settings for {@link IPageStore} and {@link IPageManager} */
 	private StoreSettings storeSettings;
 
 	/** can the settings object be set/used. */

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-core/src/main/java/org/apache/wicket/core/util/string/ComponentRenderer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/util/string/ComponentRenderer.java b/wicket-core/src/main/java/org/apache/wicket/core/util/string/ComponentRenderer.java
index 9104eb9..2b3d303 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/util/string/ComponentRenderer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/util/string/ComponentRenderer.java
@@ -452,7 +452,7 @@ public class ComponentRenderer
 
 		private RenderPage(Component component)
 		{
-			// do not store the page in IPageStore/IDataStore. WICKET-5422
+			// WICKET-5422 do not store the page in IPageStore 
 			setStatelessHint(true);
 
 			String componentMarkup;

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskPageStore.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskPageStore.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskPageStore.java
index 9bf2c19..f172e3f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskPageStore.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskPageStore.java
@@ -61,7 +61,7 @@ public class DiskPageStore implements IPersistentPageStore
 
 	private static final String KEY = "wicket:DiskPageStore";
 
-	private static final String INDEX_FILE_NAME = "DiskDataStoreIndex";
+	private static final String INDEX_FILE_NAME = "DiskPageStoreIndex";
 
 	/**
 	 * A cache that holds all page stores.
@@ -131,7 +131,7 @@ public class DiskPageStore implements IPersistentPageStore
 		catch (SecurityException e)
 		{
 			throw new WicketRuntimeException(
-				"SecurityException occurred while creating DiskDataStore. Consider using a non-disk based IDataStore implementation. "
+				"SecurityException occurred while creating DiskPageStore. Consider using a non-disk based IPageStore implementation. "
 					+ "See org.apache.wicket.Application.setPageManagerProvider(IPageManagerProvider)",
 				e);
 		}
@@ -341,7 +341,7 @@ public class DiskPageStore implements IPersistentPageStore
 			}
 			catch (Exception e)
 			{
-				log.error("Couldn't load DiskDataStore index from file " + index + ".", e);
+				log.error("Couldn't load DiskPageStore index from file " + index + ".", e);
 			}
 		}
 		Files.remove(index);
@@ -381,13 +381,13 @@ public class DiskPageStore implements IPersistentPageStore
 			}
 			catch (Exception e)
 			{
-				log.error("Couldn't write DiskDataStore index to file " + index + ".", e);
+				log.error("Couldn't write DiskPageStore index to file " + index + ".", e);
 			}
 		}
 	}
 
 	@Override
-	public Set<String> getSessionIdentifiers()
+	public Set<String> getContextIdentifiers()
 	{
 		return Collections.unmodifiableSet(diskDatas.keySet());
 	}
@@ -414,7 +414,7 @@ public class DiskPageStore implements IPersistentPageStore
 	}
 
 	@Override
-	public String getSessionIdentifier(IPageContext context)
+	public String getContextIdentifier(IPageContext context)
 	{
 		SessionAttribute sessionAttribute = getSessionAttribute(context, true);
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-core/src/main/java/org/apache/wicket/pageStore/IPersistentPageStore.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/IPersistentPageStore.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/IPersistentPageStore.java
index b42746d..ab0ed24 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/IPersistentPageStore.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/IPersistentPageStore.java
@@ -30,20 +30,20 @@ public interface IPersistentPageStore extends IPageStore
 	/**
 	 * Get the identifier for pages stored for the given context.
 	 */
-	String getSessionIdentifier(IPageContext context);
+	String getContextIdentifier(IPageContext context);
 
 	/**
 	 * Get the identifiers for all pages stored in all contexts.
 	 */
-	Set<String> getSessionIdentifiers();
+	Set<String> getContextIdentifiers();
 
 	/**
-	 * Get information about all persisted pages with the given session identifier.
+	 * Get information about all persisted pages with the given context identifier.
 	 */
-	List<IPersistedPage> getPersistentPages(String sessionIdentifier);
+	List<IPersistedPage> getPersistentPages(String contextIdentifier);
 
 	/**
-	 * Get total size of all stored pages.
+	 * Get total size of all pages stored in all contexts. 
 	 *  
 	 * @return
 	 */

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java
index 364b466..ccc054d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/InMemoryPageStore.java
@@ -156,13 +156,13 @@ public class InMemoryPageStore implements IPersistentPageStore
 	}
 
 	@Override
-	public String getSessionIdentifier(IPageContext context)
+	public String getContextIdentifier(IPageContext context)
 	{
 		return context.getSessionId();
 	}
 
 	@Override
-	public Set<String> getSessionIdentifiers()
+	public Set<String> getContextIdentifiers()
 	{
 		return datas.keySet();
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-core/src/main/java/org/apache/wicket/settings/StoreSettings.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/settings/StoreSettings.java b/wicket-core/src/main/java/org/apache/wicket/settings/StoreSettings.java
index 6e911d3..965258c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/settings/StoreSettings.java
+++ b/wicket-core/src/main/java/org/apache/wicket/settings/StoreSettings.java
@@ -26,9 +26,8 @@ import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Bytes;
 
 /**
- * A class for settings related to the the storages where page instances are persisted -
- * {@link org.apache.wicket.pageStore.IPageStore},
- * {@link org.apache.wicket.pageStore.IDataStore} and {@link org.apache.wicket.page.IPageManager}.
+ * A class for settings related to the the storages where page instances are persisted, used by
+ * {@link org.apache.wicket.pageStore.IPageStore} {@link org.apache.wicket.page.IPageManager}.
  * <p>
  * For more information about page storages read <a
  * href="https://cwiki.apache.org/confluence/x/qIaoAQ">Page Storage - Wiki page</a>
@@ -63,7 +62,7 @@ public class StoreSettings
 
 	/**
 	 * @return maximum page size. After this size is exceeded,
-	 * the {@link org.apache.wicket.pageStore.DiskDataStore} will start saving the
+	 * the {@link org.apache.wicket.pageStore.DiskPageStore} will start saving the
 	 * pages at the beginning of file.
 	 */
 	public Bytes getMaxSizePerSession()
@@ -73,7 +72,7 @@ public class StoreSettings
 
 	/**
 	 * Sets the maximum size of the {@link File} where page instances per session are stored. After
-	 * reaching this size the {@link org.apache.wicket.pageStore.DiskDataStore} will start overriding the
+	 * reaching this size the {@link org.apache.wicket.pageStore.DiskPageStore} will start overriding the
 	 * oldest pages at the beginning of the file.
 	 *
 	 * @param maxSizePerSession
@@ -88,7 +87,7 @@ public class StoreSettings
 	}
 
 	/**
-	 * @return the location of the folder where {@link org.apache.wicket.pageStore.DiskDataStore} will store the files with page
+	 * @return the location of the folder where {@link org.apache.wicket.pageStore.DiskPageStore} will store the files with page
 	 *         instances per session
 	 */
 	public File getFileStoreFolder()
@@ -119,7 +118,7 @@ public class StoreSettings
 	}
 
 	/**
-	 * Sets the folder where {@link org.apache.wicket.pageStore.DiskDataStore} will store the files with page instances per
+	 * Sets the folder where {@link org.apache.wicket.pageStore.DiskPageStore} will store the files with page instances per
 	 * session
 	 *
 	 * @param fileStoreFolder
@@ -134,7 +133,7 @@ public class StoreSettings
 
 	/**
 	 * @return the capacity of the queue used to store the pages which will be stored asynchronously
-	 * @see org.apache.wicket.pageStore.AsynchronousDataStore
+	 * @see org.apache.wicket.pageStore.AsynchronousPageStore
 	 */
 	public int getAsynchronousQueueCapacity()
 	{
@@ -146,7 +145,7 @@ public class StoreSettings
 	 *
 	 * @param queueCapacity
 	 *            the capacity of the queue
-	 * @see org.apache.wicket.pageStore.AsynchronousDataStore
+	 * @see org.apache.wicket.pageStore.AsynchronousPageStore
 	 * @return {@code this} object for chaining
 	 */
 	public StoreSettings setAsynchronousQueueCapacity(int queueCapacity)
@@ -161,9 +160,9 @@ public class StoreSettings
 	}
 
 	/**
-	 * Sets a flag whether to wrap the configured {@link org.apache.wicket.pageStore.IDataStore} with
-	 * {@link org.apache.wicket.pageStore.AsynchronousDataStore}. By doing this the HTTP worker thread will not wait for the
-	 * actual write of the page's bytes into the wrapped {@link org.apache.wicket.pageStore.IDataStore}.
+	 * Sets a flag whether to wrap the configured {@link org.apache.wicket.pageStore.IPageStore} with
+	 * {@link org.apache.wicket.pageStore.AsynchronousPageStore}. By doing this the HTTP worker thread will not wait for the
+	 * actual write of the page's bytes into the wrapped {@link org.apache.wicket.pageStore.IPageStore}.
 	 *
 	 * @param async
 	 *            {@code true} to make it asynchronous, {@code false} - otherwise

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousDataStoreTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousDataStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousDataStoreTest.java
index 7c0b0a7..d63fc46 100644
--- a/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousDataStoreTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousDataStoreTest.java
@@ -26,7 +26,7 @@ import org.apache.wicket.page.IManageablePage;
 import org.junit.Test;
 
 /**
- * Tests for {@link AsynchronousDataStore}
+ * Tests for {@link AsynchronousPageStore}
  */
 public class AsynchronousDataStoreTest
 {
@@ -54,7 +54,7 @@ public class AsynchronousDataStoreTest
 	private static final SecureRandom RND = new SecureRandom();
 
 	/**
-	 * Executes random mutator and accessor operations on {@link AsynchronousDataStore} validating
+	 * Executes random mutator and accessor operations on {@link AsynchronousPageStore} validating
 	 * that the used data structures can be used simultaneously.
 	 * 
 	 * @throws Exception

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskDataStoreTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskDataStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskDataStoreTest.java
deleted file mode 100644
index 1eb580a..0000000
--- a/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskDataStoreTest.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.pageStore;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.wicket.page.IManageablePage;
-import org.apache.wicket.serialize.java.JavaSerializer;
-import org.apache.wicket.settings.StoreSettings;
-import org.apache.wicket.util.SlowTests;
-import org.apache.wicket.util.lang.Bytes;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Test for {@link DiskDataStore}.
- */
-@Category(SlowTests.class)
-public class DiskDataStoreTest extends Assert
-{
-	/** Log for reporting. */
-	private static final Logger log = LoggerFactory.getLogger(DiskDataStoreTest.class);
-
-	/**
-	 * Construct.
-	 */
-	public DiskDataStoreTest()
-	{
-	}
-
-	private static final Random random = new Random();
-	private static final int FILE_SIZE_MIN = 1024 * 200;
-	private static final int FILE_SIZE_MAX = 1024 * 300;
-	private static final Bytes MAX_SIZE_PER_SESSION = Bytes.megabytes(10);
-	private static final int SESSION_COUNT = 50;
-	private static final int FILES_COUNT = 1000;
-	private static final int SLEEP_MAX = 10;
-	private static final int THREAD_COUNT = 20;
-	private static final int READ_MODULO = 100;
-	
-	private static final ConcurrentHashMap<String, IPageContext> contexts = new ConcurrentHashMap<>();
-	
-	private static IPageContext getContext(String sessionId) {
-		IPageContext context = new DummyPageContext();
-		
-		IPageContext existing = contexts.putIfAbsent(sessionId, context);
-		return existing != null ? existing : context;
-	}
-
-	private static class TaskPage implements IManageablePage
-	{
-		private final String sessionId;
-		
-		private int id;
-
-		private byte[] data;
-
-		public TaskPage(String sessionId, int id)
-		{
-			this.sessionId = sessionId;
-			
-			this.id = id;
-
-			int length = FILE_SIZE_MIN + random.nextInt(FILE_SIZE_MAX - FILE_SIZE_MIN);
-			data = new byte[length];
-			random.nextBytes(data);
-		}
-
-		public String getSessionId()
-		{
-			return sessionId;
-		}
-
-		public boolean check(TaskPage other)
-		{
-			if (other.data.length != other.data.length)
-			{
-				log.error("data.length != length");
-				return false;
-			}
-			if (other.id != other.id)
-			{
-				log.error("data.id != id");
-				return false;
-			}
-			if (other.sessionId != other.sessionId)
-			{
-				log.error("data.sessionId != sessionId");
-				return false;
-			}
-			return true;
-		}
-
-		@Override
-		public boolean isPageStateless()
-		{
-			return false;
-		}
-
-		@Override
-		public int getPageId()
-		{
-			return id;
-		}
-
-		@Override
-		public void detach()
-		{
-		}
-
-		@Override
-		public boolean setFreezePageId(boolean freeze)
-		{
-			return false;
-		}
-	}
-
-	private final Map<String, AtomicInteger> sessionCounter = new ConcurrentHashMap<String, AtomicInteger>();
-	private final ConcurrentLinkedQueue<TaskPage> pagesToSave = new ConcurrentLinkedQueue<TaskPage>();
-	private final ConcurrentLinkedQueue<TaskPage> filesToRead1 = new ConcurrentLinkedQueue<TaskPage>();
-	private final ConcurrentLinkedQueue<TaskPage> filesToRead2 = new ConcurrentLinkedQueue<TaskPage>();
-
-	private final AtomicInteger read1Count = new AtomicInteger(0);
-	private final AtomicInteger read2Count = new AtomicInteger(0);
-	private final AtomicInteger saveCount = new AtomicInteger(0);
-
-	private final AtomicBoolean saveDone = new AtomicBoolean(false);
-	private final AtomicBoolean read1Done = new AtomicBoolean(false);
-	private final AtomicBoolean read2Done = new AtomicBoolean(false);
-
-	private final AtomicInteger failures = new AtomicInteger();
-
-	private final AtomicInteger bytesWritten = new AtomicInteger(0);
-	private final AtomicInteger bytesRead = new AtomicInteger(0);
-
-	private final AtomicInteger saveTime = new AtomicInteger(0);
-
-	private RuntimeException exceptionThrownByThread;
-
-	private String randomSessionId()
-	{
-		List<String> s = new ArrayList<String>(sessionCounter.keySet());
-		return s.get(random.nextInt(s.size()));
-	}
-
-	private int nextSessionId(String sessionId)
-	{
-		AtomicInteger i = sessionCounter.get(sessionId);
-		return i.incrementAndGet();
-	}
-
-	private void generateFiles()
-	{
-		for (int i = 0; i < SESSION_COUNT; ++i)
-		{
-			sessionCounter.put(UUID.randomUUID().toString(), new AtomicInteger(0));
-		}
-		for (int i = 0; i < FILES_COUNT; ++i)
-		{
-			String session = randomSessionId();
-			TaskPage file = new TaskPage(session, nextSessionId(session));
-			long now = System.nanoTime();
-			pagesToSave.add(file);
-			long duration = System.nanoTime() - now;
-			saveTime.addAndGet((int)duration);
-		}
-	}
-
-	private IPageStore pageStore;
-
-	/**
-	 * Stores RuntimeException into a field.
-	 */
-	private abstract class ExceptionCapturingRunnable implements Runnable
-	{
-		@Override
-		public final void run()
-		{
-			try
-			{
-				doRun();
-			}
-			catch (RuntimeException e)
-			{
-				exceptionThrownByThread = e;
-			}
-		}
-
-		/**
-		 * Called by {@link #run()}. Thrown RuntimeExceptions are stores into a field for later
-		 * check.
-		 */
-		protected abstract void doRun();
-	}
-
-	// Store/Save data in DataStore
-	private class SaveRunnable extends ExceptionCapturingRunnable
-	{
-		@Override
-		protected void doRun()
-		{
-			TaskPage page;
-
-			while ((page = pagesToSave.poll()) != null || saveCount.get() < FILES_COUNT)
-			{
-				if (page != null)
-				{
-					pageStore.addPage(getContext(page.getSessionId()), page);
-
-					if (saveCount.get() % READ_MODULO == 0)
-					{
-						filesToRead1.add(page);
-					}
-					saveCount.incrementAndGet();
-					bytesWritten.addAndGet(page.data.length);
-				}
-
-				try
-				{
-					Thread.sleep(random.nextInt(SLEEP_MAX));
-				}
-				catch (InterruptedException e)
-				{
-					log.error(e.getMessage(), e);
-				}
-			}
-
-			saveDone.set(true);
-		}
-	};
-
-	// Read data from DataStore
-	private class Read1Runnable extends ExceptionCapturingRunnable
-	{
-		@Override
-		protected void doRun()
-		{
-			TaskPage page;
-			while ((page = filesToRead1.poll()) != null || !saveDone.get())
-			{
-				if (page != null)
-				{
-					TaskPage other = (TaskPage)pageStore.getPage(getContext(page.getSessionId()), page.getPageId());
-					if (page.check(other) == false)
-					{
-						failures.incrementAndGet();
-						log.error("Detected error number: " + failures.get());
-					}
-					filesToRead2.add(page);
-					read1Count.incrementAndGet();
-					bytesRead.addAndGet(other.data.length);
-				}
-
-				try
-				{
-					Thread.sleep(random.nextInt(SLEEP_MAX));
-				}
-				catch (InterruptedException e)
-				{
-					log.error(e.getMessage(), e);
-				}
-			}
-
-			read1Done.set(true);
-		}
-	};
-
-	private class Read2Runnable extends ExceptionCapturingRunnable
-	{
-		@Override
-		protected void doRun()
-		{
-			TaskPage page;
-			while ((page = filesToRead2.poll()) != null || !read1Done.get())
-			{
-				if (page != null)
-				{
-					TaskPage other = (TaskPage)pageStore.getPage(getContext(page.getSessionId()), page.getPageId());
-					if (page.check(other) == false)
-					{
-						failures.incrementAndGet();
-						log.error("Detected error number: " + failures.get());
-					}
-					read2Count.incrementAndGet();
-					bytesRead.addAndGet(other.data.length);
-				}
-
-				try
-				{
-					Thread.sleep(random.nextInt(SLEEP_MAX));
-				}
-				catch (InterruptedException e)
-				{
-					log.error(e.getMessage(), e);
-				}
-			}
-
-			read2Done.set(true);
-		}
-	}
-
-	private void doTestDataStore()
-	{
-		log.info("Starting...");
-		long start = System.currentTimeMillis();
-
-		for (int i = 0; i < THREAD_COUNT; ++i)
-		{
-			new Thread(new Read1Runnable()).start();
-		}
-
-		for (int i = 0; i < THREAD_COUNT; ++i)
-		{
-			new Thread(new Read2Runnable()).start();
-		}
-
-		for (int i = 0; i < THREAD_COUNT; ++i)
-		{
-			new Thread(new SaveRunnable()).start();
-		}
-
-		while (!(read1Done.get() && read2Done.get() && saveDone.get()))
-		{
-			try
-			{
-				Thread.sleep(50);
-			}
-			catch (InterruptedException e)
-			{
-				log.error(e.getMessage(), e);
-			}
-		}
-
-		if (exceptionThrownByThread != null)
-		{
-			throw new RuntimeException("One of the worker threads failed.", exceptionThrownByThread);
-		}
-
-		long duration = System.currentTimeMillis() - start;
-
-		log.info("Took: " + duration + " ms");
-		log.info("Save: " + saveCount.intValue() + " files, " + bytesWritten.get() + " bytes");
-		log.info("Read: " + (read1Count.get() + read2Count.get()) + " files, " + bytesRead.get() +
-			" bytes");
-
-		log.info("Average save time (ns): " + (double)saveTime.get() / (double)saveCount.get());
-
-		assertEquals(0, failures.get());
-
-		for (String s : sessionCounter.keySet())
-		{
-			pageStore.removeAllPages(getContext(s));
-		}
-	}
-
-	/**
-	 * store()
-	 */
-	@Test
-	public void store()
-	{
-		generateFiles();
-
-		StoreSettings storeSettings = new StoreSettings(null);
-		File fileStoreFolder = storeSettings.getFileStoreFolder();
-		int asynchronousQueueCapacity = storeSettings.getAsynchronousQueueCapacity();
-
-		pageStore = new DiskPageStore("app1", fileStoreFolder, MAX_SIZE_PER_SESSION, new JavaSerializer("app1"));
-		pageStore = new AsynchronousPageStore(pageStore, asynchronousQueueCapacity);
-
-		doTestDataStore();
-
-		pageStore.destroy();
-	}
-
-	/**
-	 * https://issues.apache.org/jira/browse/WICKET-4478
-	 *
-	 * Tests that the folder where a session data is put is partitioned, i.e.
-	 * it is put in folders which names are automatically calculated on the fly.
-	 */
-	@Test
-	public void sessionFolderName()
-	{
-		StoreSettings storeSettings = new StoreSettings(null);
-		java.io.File fileStoreFolder = storeSettings.getFileStoreFolder();
-		DiskPageStore store = new DiskPageStore("sessionFolderName", fileStoreFolder, MAX_SIZE_PER_SESSION, new JavaSerializer("sessionFolderName"));
-
-		String sessionId = "abcdefg";
-		java.io.File sessionFolder = store.getSessionFolder(sessionId, true);
-		String absolutePath = sessionFolder.getAbsolutePath();
-		assertTrue(absolutePath.contains("sessionFolderName-filestore"));
-		assertTrue(absolutePath.contains("7141"));
-		assertTrue(absolutePath.contains("1279"));
-		assertTrue(absolutePath.contains("abcdefg"));
-
-		DiskPageStore.DiskData sessionEntry = new DiskPageStore.DiskData(store, sessionId);
-		sessionEntry.unbind();
-		// assert that the 'sessionId' folder and the parents two levels up are removed
-		assertFalse(sessionFolder.getParentFile().getParentFile().exists());
-
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskPageStoreTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskPageStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskPageStoreTest.java
new file mode 100644
index 0000000..0ed47dd
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskPageStoreTest.java
@@ -0,0 +1,429 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.pageStore;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.wicket.page.IManageablePage;
+import org.apache.wicket.serialize.java.JavaSerializer;
+import org.apache.wicket.settings.StoreSettings;
+import org.apache.wicket.util.SlowTests;
+import org.apache.wicket.util.lang.Bytes;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Test for {@link DiskPageStore}.
+ */
+@Category(SlowTests.class)
+public class DiskPageStoreTest extends Assert
+{
+	/** Log for reporting. */
+	private static final Logger log = LoggerFactory.getLogger(DiskPageStoreTest.class);
+
+	/**
+	 * Construct.
+	 */
+	public DiskPageStoreTest()
+	{
+	}
+
+	private static final Random random = new Random();
+	private static final int FILE_SIZE_MIN = 1024 * 200;
+	private static final int FILE_SIZE_MAX = 1024 * 300;
+	private static final Bytes MAX_SIZE_PER_SESSION = Bytes.megabytes(10);
+	private static final int SESSION_COUNT = 50;
+	private static final int FILES_COUNT = 1000;
+	private static final int SLEEP_MAX = 10;
+	private static final int THREAD_COUNT = 20;
+	private static final int READ_MODULO = 100;
+	
+	private static final ConcurrentHashMap<String, IPageContext> contexts = new ConcurrentHashMap<>();
+	
+	private static IPageContext getContext(String sessionId) {
+		IPageContext context = new DummyPageContext();
+		
+		IPageContext existing = contexts.putIfAbsent(sessionId, context);
+		return existing != null ? existing : context;
+	}
+
+	private static class TaskPage implements IManageablePage
+	{
+		private final String sessionId;
+		
+		private int id;
+
+		private byte[] data;
+
+		public TaskPage(String sessionId, int id)
+		{
+			this.sessionId = sessionId;
+			
+			this.id = id;
+
+			int length = FILE_SIZE_MIN + random.nextInt(FILE_SIZE_MAX - FILE_SIZE_MIN);
+			data = new byte[length];
+			random.nextBytes(data);
+		}
+
+		public String getSessionId()
+		{
+			return sessionId;
+		}
+
+		public boolean check(TaskPage other)
+		{
+			if (other.data.length != other.data.length)
+			{
+				log.error("data.length != length");
+				return false;
+			}
+			if (other.id != other.id)
+			{
+				log.error("data.id != id");
+				return false;
+			}
+			if (other.sessionId != other.sessionId)
+			{
+				log.error("data.sessionId != sessionId");
+				return false;
+			}
+			return true;
+		}
+
+		@Override
+		public boolean isPageStateless()
+		{
+			return false;
+		}
+
+		@Override
+		public int getPageId()
+		{
+			return id;
+		}
+
+		@Override
+		public void detach()
+		{
+		}
+
+		@Override
+		public boolean setFreezePageId(boolean freeze)
+		{
+			return false;
+		}
+	}
+
+	private final Map<String, AtomicInteger> sessionCounter = new ConcurrentHashMap<String, AtomicInteger>();
+	private final ConcurrentLinkedQueue<TaskPage> pagesToSave = new ConcurrentLinkedQueue<TaskPage>();
+	private final ConcurrentLinkedQueue<TaskPage> filesToRead1 = new ConcurrentLinkedQueue<TaskPage>();
+	private final ConcurrentLinkedQueue<TaskPage> filesToRead2 = new ConcurrentLinkedQueue<TaskPage>();
+
+	private final AtomicInteger read1Count = new AtomicInteger(0);
+	private final AtomicInteger read2Count = new AtomicInteger(0);
+	private final AtomicInteger saveCount = new AtomicInteger(0);
+
+	private final AtomicBoolean saveDone = new AtomicBoolean(false);
+	private final AtomicBoolean read1Done = new AtomicBoolean(false);
+	private final AtomicBoolean read2Done = new AtomicBoolean(false);
+
+	private final AtomicInteger failures = new AtomicInteger();
+
+	private final AtomicInteger bytesWritten = new AtomicInteger(0);
+	private final AtomicInteger bytesRead = new AtomicInteger(0);
+
+	private final AtomicInteger saveTime = new AtomicInteger(0);
+
+	private RuntimeException exceptionThrownByThread;
+
+	private String randomSessionId()
+	{
+		List<String> s = new ArrayList<String>(sessionCounter.keySet());
+		return s.get(random.nextInt(s.size()));
+	}
+
+	private int nextSessionId(String sessionId)
+	{
+		AtomicInteger i = sessionCounter.get(sessionId);
+		return i.incrementAndGet();
+	}
+
+	private void generateFiles()
+	{
+		for (int i = 0; i < SESSION_COUNT; ++i)
+		{
+			sessionCounter.put(UUID.randomUUID().toString(), new AtomicInteger(0));
+		}
+		for (int i = 0; i < FILES_COUNT; ++i)
+		{
+			String session = randomSessionId();
+			TaskPage file = new TaskPage(session, nextSessionId(session));
+			long now = System.nanoTime();
+			pagesToSave.add(file);
+			long duration = System.nanoTime() - now;
+			saveTime.addAndGet((int)duration);
+		}
+	}
+
+	private IPageStore pageStore;
+
+	/**
+	 * Stores RuntimeException into a field.
+	 */
+	private abstract class ExceptionCapturingRunnable implements Runnable
+	{
+		@Override
+		public final void run()
+		{
+			try
+			{
+				doRun();
+			}
+			catch (RuntimeException e)
+			{
+				exceptionThrownByThread = e;
+			}
+		}
+
+		/**
+		 * Called by {@link #run()}. Thrown RuntimeExceptions are stores into a field for later
+		 * check.
+		 */
+		protected abstract void doRun();
+	}
+
+	// Store/Save data in store
+	private class SaveRunnable extends ExceptionCapturingRunnable
+	{
+		@Override
+		protected void doRun()
+		{
+			TaskPage page;
+
+			while ((page = pagesToSave.poll()) != null || saveCount.get() < FILES_COUNT)
+			{
+				if (page != null)
+				{
+					pageStore.addPage(getContext(page.getSessionId()), page);
+
+					if (saveCount.get() % READ_MODULO == 0)
+					{
+						filesToRead1.add(page);
+					}
+					saveCount.incrementAndGet();
+					bytesWritten.addAndGet(page.data.length);
+				}
+
+				try
+				{
+					Thread.sleep(random.nextInt(SLEEP_MAX));
+				}
+				catch (InterruptedException e)
+				{
+					log.error(e.getMessage(), e);
+				}
+			}
+
+			saveDone.set(true);
+		}
+	};
+
+	// Read data from store
+	private class Read1Runnable extends ExceptionCapturingRunnable
+	{
+		@Override
+		protected void doRun()
+		{
+			TaskPage page;
+			while ((page = filesToRead1.poll()) != null || !saveDone.get())
+			{
+				if (page != null)
+				{
+					TaskPage other = (TaskPage)pageStore.getPage(getContext(page.getSessionId()), page.getPageId());
+					if (page.check(other) == false)
+					{
+						failures.incrementAndGet();
+						log.error("Detected error number: " + failures.get());
+					}
+					filesToRead2.add(page);
+					read1Count.incrementAndGet();
+					bytesRead.addAndGet(other.data.length);
+				}
+
+				try
+				{
+					Thread.sleep(random.nextInt(SLEEP_MAX));
+				}
+				catch (InterruptedException e)
+				{
+					log.error(e.getMessage(), e);
+				}
+			}
+
+			read1Done.set(true);
+		}
+	};
+
+	private class Read2Runnable extends ExceptionCapturingRunnable
+	{
+		@Override
+		protected void doRun()
+		{
+			TaskPage page;
+			while ((page = filesToRead2.poll()) != null || !read1Done.get())
+			{
+				if (page != null)
+				{
+					TaskPage other = (TaskPage)pageStore.getPage(getContext(page.getSessionId()), page.getPageId());
+					if (page.check(other) == false)
+					{
+						failures.incrementAndGet();
+						log.error("Detected error number: " + failures.get());
+					}
+					read2Count.incrementAndGet();
+					bytesRead.addAndGet(other.data.length);
+				}
+
+				try
+				{
+					Thread.sleep(random.nextInt(SLEEP_MAX));
+				}
+				catch (InterruptedException e)
+				{
+					log.error(e.getMessage(), e);
+				}
+			}
+
+			read2Done.set(true);
+		}
+	}
+
+	private void doTestStore()
+	{
+		log.info("Starting...");
+		long start = System.currentTimeMillis();
+
+		for (int i = 0; i < THREAD_COUNT; ++i)
+		{
+			new Thread(new Read1Runnable()).start();
+		}
+
+		for (int i = 0; i < THREAD_COUNT; ++i)
+		{
+			new Thread(new Read2Runnable()).start();
+		}
+
+		for (int i = 0; i < THREAD_COUNT; ++i)
+		{
+			new Thread(new SaveRunnable()).start();
+		}
+
+		while (!(read1Done.get() && read2Done.get() && saveDone.get()))
+		{
+			try
+			{
+				Thread.sleep(50);
+			}
+			catch (InterruptedException e)
+			{
+				log.error(e.getMessage(), e);
+			}
+		}
+
+		if (exceptionThrownByThread != null)
+		{
+			throw new RuntimeException("One of the worker threads failed.", exceptionThrownByThread);
+		}
+
+		long duration = System.currentTimeMillis() - start;
+
+		log.info("Took: " + duration + " ms");
+		log.info("Save: " + saveCount.intValue() + " files, " + bytesWritten.get() + " bytes");
+		log.info("Read: " + (read1Count.get() + read2Count.get()) + " files, " + bytesRead.get() +
+			" bytes");
+
+		log.info("Average save time (ns): " + (double)saveTime.get() / (double)saveCount.get());
+
+		assertEquals(0, failures.get());
+
+		for (String s : sessionCounter.keySet())
+		{
+			pageStore.removeAllPages(getContext(s));
+		}
+	}
+
+	/**
+	 * store()
+	 */
+	@Test
+	public void store()
+	{
+		generateFiles();
+
+		StoreSettings storeSettings = new StoreSettings(null);
+		File fileStoreFolder = storeSettings.getFileStoreFolder();
+		int asynchronousQueueCapacity = storeSettings.getAsynchronousQueueCapacity();
+
+		pageStore = new DiskPageStore("app1", fileStoreFolder, MAX_SIZE_PER_SESSION, new JavaSerializer("app1"));
+		pageStore = new AsynchronousPageStore(pageStore, asynchronousQueueCapacity);
+
+		doTestStore();
+
+		pageStore.destroy();
+	}
+
+	/**
+	 * https://issues.apache.org/jira/browse/WICKET-4478
+	 *
+	 * Tests that the folder where a session data is put is partitioned, i.e.
+	 * it is put in folders which names are automatically calculated on the fly.
+	 */
+	@Test
+	public void sessionFolderName()
+	{
+		StoreSettings storeSettings = new StoreSettings(null);
+		java.io.File fileStoreFolder = storeSettings.getFileStoreFolder();
+		DiskPageStore store = new DiskPageStore("sessionFolderName", fileStoreFolder, MAX_SIZE_PER_SESSION, new JavaSerializer("sessionFolderName"));
+
+		String sessionId = "abcdefg";
+		java.io.File sessionFolder = store.getSessionFolder(sessionId, true);
+		String absolutePath = sessionFolder.getAbsolutePath();
+		assertTrue(absolutePath.contains("sessionFolderName-filestore"));
+		assertTrue(absolutePath.contains("7141"));
+		assertTrue(absolutePath.contains("1279"));
+		assertTrue(absolutePath.contains("abcdefg"));
+
+		DiskPageStore.DiskData sessionEntry = new DiskPageStore.DiskData(store, sessionId);
+		sessionEntry.unbind();
+		// assert that the 'sessionId' folder and the parents two levels up are removed
+		assertFalse(sessionFolder.getParentFile().getParentFile().exists());
+
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-core/src/test/java/org/apache/wicket/pageStore/disk/PageWindowManagerTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/disk/PageWindowManagerTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/disk/PageWindowManagerTest.java
index 9f1bd55..1f0243b 100644
--- a/wicket-core/src/test/java/org/apache/wicket/pageStore/disk/PageWindowManagerTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/disk/PageWindowManagerTest.java
@@ -207,7 +207,7 @@ public class PageWindowManagerTest extends Assert
 	private static final SecureRandom RND = new SecureRandom();
 
 	/**
-	 * Executes random mutator and accessor operations on {@link org.apache.wicket.pageStore.AsynchronousDataStore} validating
+	 * Executes random mutator and accessor operations on {@link org.apache.wicket.pageStore.AsynchronousPageStore} validating
 	 * that the used data structures can be used simultaneously.
 	 *
 	 * @throws Exception

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPagesProvider.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPagesProvider.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPagesProvider.java
index 2b1ffe0..62abfaf 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPagesProvider.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPagesProvider.java
@@ -73,11 +73,11 @@ class PersistedPagesProvider extends SortableDataProvider<IPersistedPage, String
 			{
 				String sessId = sessionId.getObject();
 
-				IPersistentPageStore dataStore = store.getObject();
+				IPersistentPageStore persistentPagesStore = store.getObject();
 
-				if (dataStore != null)
+				if (persistentPagesStore != null)
 				{
-					pages.addAll(dataStore.getPersistentPages(sessId));
+					pages.addAll(persistentPagesStore.getPersistentPages(sessId));
 				}
 			}
 		}

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPanel.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPanel.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPanel.java
index d0e071c..4705f5d 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPanel.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PersistedPanel.java
@@ -151,7 +151,7 @@ public class PersistedPanel extends GenericPanel<IPersistentPageStore>
 
 		IPageContext context = new DefaultPageContext(Session.get());
 		
-		return store.getSessionIdentifier(context);
+		return store.getContextIdentifier(context);
 	}
 
 	private DataTable<IPersistedPage, String> createTable(String id, IModel<String> sessionId)

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionIdentifiersModel.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionIdentifiersModel.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionIdentifiersModel.java
index e778a96..06592b9 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionIdentifiersModel.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionIdentifiersModel.java
@@ -49,10 +49,10 @@ public class SessionIdentifiersModel extends LoadableDetachableModel<List<String
 			return Collections.emptyList();
 		}
 
-		ArrayList<String> identifiers = new ArrayList<>(store.getSessionIdentifiers());
+		ArrayList<String> identifiers = new ArrayList<>(store.getContextIdentifiers());
 
 		IPageContext context = new DefaultPageContext(Session.get());
-		String current = store.getSessionIdentifier(context);
+		String current = store.getContextIdentifier(context);
 		if (identifiers.contains(current) == false)
 		{
 			// identifiers of the store seem no to match their sessions ids,

http://git-wip-us.apache.org/repos/asf/wicket/blob/f08ab904/wicket-jmx/src/main/java/org/apache/wicket/jmx/StoreSettingsMBean.java
----------------------------------------------------------------------
diff --git a/wicket-jmx/src/main/java/org/apache/wicket/jmx/StoreSettingsMBean.java b/wicket-jmx/src/main/java/org/apache/wicket/jmx/StoreSettingsMBean.java
index 4e18730..079019e 100644
--- a/wicket-jmx/src/main/java/org/apache/wicket/jmx/StoreSettingsMBean.java
+++ b/wicket-jmx/src/main/java/org/apache/wicket/jmx/StoreSettingsMBean.java
@@ -43,7 +43,7 @@ public interface StoreSettingsMBean
 
 	/**
 	 * @return {@code true} when the HTTP worker thread doesn't wait for the storing of the page's
-	 *         bytes in {@link IDataStore}
+	 *         bytes in {@link IPageStore}
 	 */
 	boolean isAsynchronous();
 }