You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2011/03/20 18:06:56 UTC

svn commit: r1083507 - in /wicket/trunk/wicket-core/src: main/java/org/apache/wicket/page/ main/java/org/apache/wicket/pageStore/ test/java/org/apache/wicket/page/

Author: mgrigorov
Date: Sun Mar 20 17:06:56 2011
New Revision: 1083507

URL: http://svn.apache.org/viewvc?rev=1083507&view=rev
Log:
WICKET-3470 Add javadocs to IPageStore and its implementations


Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/page/PersistentPageManager.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageStore.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java
    wicket/trunk/wicket-core/src/test/java/org/apache/wicket/page/PersistentPageManagerTest.java

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/page/PersistentPageManager.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/page/PersistentPageManager.java?rev=1083507&r1=1083506&r2=1083507&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/page/PersistentPageManager.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/page/PersistentPageManager.java Sun Mar 20 17:06:56 2011
@@ -204,6 +204,11 @@ public class PersistentPageManager exten
 		}
 
 		/**
+		 * Serializes all pages in this {@link SessionEntry}. If this is http worker thread then
+		 * there is available {@link IPageStore} which will be asked to prepare the page for
+		 * serialization (see DefaultPageStore$SerializePage). If there is no {@link IPageStore}
+		 * available (session loading/persisting in application initialization/destruction thread)
+		 * then the pages are serialized without any pre-processing
 		 * 
 		 * @param s
 		 * @throws IOException
@@ -236,6 +241,11 @@ public class PersistentPageManager exten
 		}
 
 		/**
+		 * Deserializes the pages in this {@link SessionEntry}. If this is http worker thread then
+		 * there is available {@link IPageStore} which will be asked to restore the page from its
+		 * optimized state (see DefaultPageStore$SerializePage). If there is no {@link IPageStore}
+		 * available (session loading/persisting in application initialization/destruction thread)
+		 * then the pages are deserialized without any post-processing
 		 * 
 		 * @param s
 		 * @throws IOException

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageStore.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageStore.java?rev=1083507&r1=1083506&r2=1083507&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageStore.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageStore.java Sun Mar 20 17:06:56 2011
@@ -28,7 +28,9 @@ import org.apache.wicket.util.lang.Objec
 import org.apache.wicket.util.lang.WicketObjects;
 
 /**
- * Wicket's default page store
+ * The {@link IPageStore} that converts {@link IManageablePage} instances to {@link SerializedPage}s
+ * before passing them to the {@link IDataStore} to store them and the same in the opposite
+ * direction when loading {@link SerializedPage} from the data store.
  * 
  */
 public class DefaultPageStore implements IPageStore
@@ -44,7 +46,10 @@ public class DefaultPageStore implements
 	 * 
 	 * @param applicationName
 	 * @param dataStore
+	 *            the {@link IDataStore} that actually stores the pages
 	 * @param cacheSize
+	 *            the number of pages to cache in memory before passing them to
+	 *            {@link IDataStore#storeData(String, int, byte[])}
 	 */
 	public DefaultPageStore(final String applicationName, final IDataStore dataStore,
 		final int cacheSize)
@@ -66,10 +71,10 @@ public class DefaultPageStore implements
 	}
 
 	/**
-	 * 
 	 * @param sessionId
 	 * @param pageId
 	 * @return page data
+	 * @see IDataStore#getData(String, int)
 	 */
 	protected byte[] getPageData(final String sessionId, final int pageId)
 	{
@@ -77,9 +82,9 @@ public class DefaultPageStore implements
 	}
 
 	/**
-	 * 
 	 * @param sessionId
 	 * @param pageId
+	 * @see IDataStore#removeData(String, int)
 	 */
 	protected void removePageData(final String sessionId, final int pageId)
 	{
@@ -87,8 +92,8 @@ public class DefaultPageStore implements
 	}
 
 	/**
-	 * 
 	 * @param sessionId
+	 * @see IDataStore#removeData(String)
 	 */
 	protected void removePageData(final String sessionId)
 	{
@@ -96,10 +101,10 @@ public class DefaultPageStore implements
 	}
 
 	/**
-	 * 
 	 * @param sessionId
 	 * @param pageId
 	 * @param data
+	 * @see IDataStore#storeData(String, int, byte[])
 	 */
 	protected void storePageData(final String sessionId, final int pageId, final byte[] data)
 	{
@@ -107,7 +112,6 @@ public class DefaultPageStore implements
 	}
 
 	/**
-	 * 
 	 * @return application name
 	 */
 	public String getApplicationName()
@@ -115,9 +119,6 @@ public class DefaultPageStore implements
 		return applicationName;
 	}
 
-	/**
-	 * @see org.apache.wicket.pageStore.IPageStore#getPage(java.lang.String, int)
-	 */
 	public IManageablePage getPage(final String sessionId, final int id)
 	{
 		SerializedPage fromCache = serializedPagesCache.getPage(sessionId, id);
@@ -134,19 +135,12 @@ public class DefaultPageStore implements
 		return null;
 	}
 
-	/**
-	 * @see org.apache.wicket.pageStore.IPageStore#removePage(java.lang.String, int)
-	 */
 	public void removePage(final String sessionId, final int id)
 	{
 		serializedPagesCache.removePage(sessionId, id);
 		removePageData(sessionId, id);
 	}
 
-	/**
-	 * @see org.apache.wicket.pageStore.IPageStore#storePage(java.lang.String,
-	 *      org.apache.wicket.page.IManageablePage)
-	 */
 	public void storePage(final String sessionId, final IManageablePage page)
 	{
 		SerializedPage serialized = serializePage(sessionId, page);
@@ -154,18 +148,12 @@ public class DefaultPageStore implements
 		storePageData(sessionId, serialized.getPageId(), serialized.getData());
 	}
 
-	/**
-	 * @see org.apache.wicket.pageStore.IPageStore#unbind(java.lang.String)
-	 */
 	public void unbind(final String sessionId)
 	{
 		removePageData(sessionId);
 		serializedPagesCache.removePages(sessionId);
 	}
 
-	/**
-	 * @see org.apache.wicket.pageStore.IPageStore#convertToPage(java.lang.Object)
-	 */
 	public IManageablePage convertToPage(final Object object)
 	{
 		if (object == null)
@@ -196,9 +184,12 @@ public class DefaultPageStore implements
 	}
 
 	/**
+	 * Reloads the {@link SerializedPage} from the backing {@link IDataStore} if the
+	 * {@link SerializedPage#data} is stripped earlier
 	 * 
 	 * @param serializedPage
-	 * @return
+	 *            the {@link SerializedPage} with empty {@link SerializedPage#data} slot
+	 * @return the fully functional {@link SerializedPage}
 	 */
 	private SerializedPage restoreStrippedSerializedPage(final SerializedPage serializedPage)
 	{
@@ -213,10 +204,6 @@ public class DefaultPageStore implements
 		return new SerializedPage(serializedPage.getSessionId(), serializedPage.getPageId(), data);
 	}
 
-	/**
-	 * @see org.apache.wicket.pageStore.IPageStore#prepareForSerialization(java.lang.String,
-	 *      java.lang.Object)
-	 */
 	public Serializable prepareForSerialization(final String sessionId, final Object object)
 	{
 		if (pageDataStore.isReplicated())
@@ -265,9 +252,6 @@ public class DefaultPageStore implements
 		return true;
 	}
 
-	/**
-	 * @see org.apache.wicket.pageStore.IPageStore#restoreAfterSerialization(java.io.Serializable)
-	 */
 	public Object restoreAfterSerialization(final Serializable serializable)
 	{
 		if (serializable == null)
@@ -294,14 +278,27 @@ public class DefaultPageStore implements
 	}
 
 	/**
-	 * 
+	 * A representation of {@link IManageablePage} that knows additionally the id of the http
+	 * session in which this {@link IManageablePage} instance is used. The {@link #sessionId} and
+	 * {@link #pageId} are used for better clustering in the {@link IDataStore} structures.
 	 */
 	protected static class SerializedPage implements Serializable
 	{
 		private static final long serialVersionUID = 1L;
 
+		/**
+		 * The id of the serialized {@link IManageablePage}
+		 */
 		private final int pageId;
+
+		/**
+		 * The id of the http session in which the serialized {@link IManageablePage} is used.
+		 */
 		private final String sessionId;
+
+		/**
+		 * The serialized {@link IManageablePage}
+		 */
 		private final byte[] data;
 
 		public SerializedPage(String sessionId, int pageId, byte[] data)

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java?rev=1083507&r1=1083506&r2=1083507&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java Sun Mar 20 17:06:56 2011
@@ -21,7 +21,10 @@ import java.io.Serializable;
 import org.apache.wicket.page.IManageablePage;
 
 /**
- * Persist (read & write) Page data
+ * {@link IPageStore} role is to mediate the storing and loading of pages done by {@link IDataStore}
+ * s. {@link IPageStore} may pre-process the pages before passing them to
+ * {@link IDataStore#storeData(String, int, byte[])} and to post-process them after
+ * {@link IDataStore#getData(String, int)}.
  * 
  * @see IDataStore
  */
@@ -36,34 +39,39 @@ public interface IPageStore
 	 * Restores a page from the persistent layer.
 	 * 
 	 * @param sessionId
-	 * @param id
+	 *            The session of the page that must be removed
+	 * @param pageId
+	 *            The id of the page.
 	 * @return The page
 	 */
-	IManageablePage getPage(String sessionId, int id);
+	IManageablePage getPage(String sessionId, int pageId);
 
 	/**
 	 * Removes a page from the persistent layer.
 	 * 
 	 * @param sessionId
 	 *            The session of the page that must be removed
-	 * @param id
+	 * @param pageId
 	 *            The id of the page.
 	 */
-	void removePage(String sessionId, int id);
+	void removePage(String sessionId, int pageId);
 
 	/**
 	 * Stores the page to a persistent layer. The page should be stored under the id and the version
 	 * number.
 	 * 
 	 * @param sessionId
+	 *            The session of the page that must be removed
 	 * @param page
+	 *            The page to store
 	 */
 	void storePage(String sessionId, IManageablePage page);
 
 	/**
-	 * The pagestore should cleanup all the pages for that sessionid.
+	 * The page store should cleanup all the pages for that sessionid.
 	 * 
 	 * @param sessionId
+	 *            The session of the page that must be removed
 	 */
 	void unbind(String sessionId);
 
@@ -72,6 +80,7 @@ public interface IPageStore
 	 * object returned by {@link #restoreAfterSerialization(Serializable)}.
 	 * 
 	 * @param sessionId
+	 *            The session of the page that must be removed
 	 * @param page
 	 * @return The Page itself or a SerializedContainer for that page
 	 */
@@ -82,14 +91,17 @@ public interface IPageStore
 	 * to real page instance using {@link #convertToPage(Object)}.
 	 * 
 	 * @param sessionId
+	 *            The session of the page that must be removed
 	 * @param serializable
 	 * @return Page
 	 */
 	Object restoreAfterSerialization(Serializable serializable);
 
 	/**
+	 * Converts a page representation to an instance of {@link IManageablePage}
 	 * 
 	 * @param page
+	 *            some kind of page representation
 	 * @return page
 	 */
 	IManageablePage convertToPage(Object page);

Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/page/PersistentPageManagerTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/page/PersistentPageManagerTest.java?rev=1083507&r1=1083506&r2=1083507&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/page/PersistentPageManagerTest.java (original)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/page/PersistentPageManagerTest.java Sun Mar 20 17:06:56 2011
@@ -38,35 +38,51 @@ public class PersistentPageManagerTest e
 	/**
 	 * WICKET-3470
 	 * 
+	 * Tests that a page already put in the session (in SessionEntry) can be serialized and later
+	 * deserialized without the need of {@link IPageStore}
+	 * 
 	 * @throws ClassNotFoundException
 	 * @throws IOException
 	 */
 	public void testSerializationOutsideWicketLifecyle() throws IOException, ClassNotFoundException
 	{
+		// create IPageManager (with IPageStore) and store a page instance
 		IPageManager pageManager = newPersistentPageManager("test_app");
 		TestPage toSerializePage = new TestPage();
 		pageManager.touchPage(toSerializePage);
 		pageManager.commitRequest();
-		pageManager.destroy();
-		// serializing the Wicket piece in servlet session
+
+		// get the stored SessionEntry
 		Serializable sessionEntry = pageManager.getContext().getSessionAttribute(null);
+
+		// destroy the manager and the store
+		pageManager.destroy();
+
+		// simulate persisting of the http sessions initiated by the web container
 		byte[] serializedSessionEntry = WicketObjects.objectToByteArray(sessionEntry);
 		assertNotNull("Wicket needs to be able to serialize the session entry",
 			serializedSessionEntry);
 
-		// testing if it is possible to deserialize the session entry
-		IPageManager newPageManager = newPersistentPageManager("test_app");
+		// simulate loading of the persisted http session initiated by the web container
+		// when starting an application
 		ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(
 			serializedSessionEntry));
+
+		// WicketFilter is not initialized so there is no Application available yet
 		assertNull("Worker thread should be unaware of Wicket application", in.readObject());
+
+		// without available IPageStore the read SessionEntry holds
+		// the IManageablePage itself, not SerializedPage
 		Serializable loadedSessionEntry = (Serializable)in.readObject();
 		assertNotNull(
 			"Wicket needs to be able to deserialize the session entry regardless the application availability",
 			loadedSessionEntry);
 
+		// provide new IPageStore which will read IManageablePage's or SerializedPage's
+		// from the SessionEntry's
+		IPageManager newPageManager = newPersistentPageManager("test_app");
 		newPageManager.getContext().setSessionAttribute(null, loadedSessionEntry);
 
-
 		TestPage deserializedPage = (TestPage)newPageManager.getPage(toSerializePage.getPageId());
 		assertNotNull(deserializedPage);
 		assertEquals(toSerializePage.instanceID, deserializedPage.instanceID);