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


Reply via email to