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);