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 2014/03/10 16:56:57 UTC
[2/3] git commit: WICKET-5527 Inefficient
DefaultPageStore.SerializedPagesCache
WICKET-5527 Inefficient DefaultPageStore.SerializedPagesCache
Extract AbstractCachingPageStore - an AbstractPageStore that uses SecondLevelPageCache to manage the caching
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/583e03cf
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/583e03cf
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/583e03cf
Branch: refs/heads/5527-inefficient-DefaultDataStore
Commit: 583e03cf8f282c6c02d21c614594eaf1eecc15ae
Parents: 65bd82f
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Mon Mar 10 17:45:16 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Mon Mar 10 17:45:16 2014 +0200
----------------------------------------------------------------------
.../pageStore/AbstractCachingPageStore.java | 105 +++++++++++++++++++
.../wicket/pageStore/AbstractPageStore.java | 4 +-
.../wicket/pageStore/DefaultPageStore.java | 61 +++--------
.../wicket/pageStore/PerSessionPageStore.java | 58 ++--------
.../wicket/pageStore/SecondLevelPageCache.java | 2 +
5 files changed, 135 insertions(+), 95 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/583e03cf/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractCachingPageStore.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractCachingPageStore.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractCachingPageStore.java
new file mode 100644
index 0000000..86b8d82
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractCachingPageStore.java
@@ -0,0 +1,105 @@
+/*
+ * 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 org.apache.wicket.page.IManageablePage;
+import org.apache.wicket.serialize.ISerializer;
+import org.apache.wicket.util.lang.Args;
+
+/**
+ * An abstract {@link org.apache.wicket.pageStore.IPageStore} that uses
+ * {@link org.apache.wicket.pageStore.SecondLevelPageCache} to cache the stored pages in memory
+ *
+ * @param <P>
+ * The type of the page to be stored
+ */
+public abstract class AbstractCachingPageStore<P> extends AbstractPageStore
+{
+ /**
+ * The cache implementation
+ */
+ protected final SecondLevelPageCache<String, Integer, P> pagesCache;
+
+ /**
+ * Constructor.
+ *
+ * @param pageSerializer
+ * The serializer that will convert pages to/from byte[]
+ * @param dataStore
+ * The third level page cache
+ * @param pagesCache
+ * The cache to use as a second level store
+ */
+ protected AbstractCachingPageStore(ISerializer pageSerializer, IDataStore dataStore,
+ SecondLevelPageCache<String, Integer, P> pagesCache)
+ {
+ super(pageSerializer, dataStore);
+
+ this.pagesCache = Args.notNull(pagesCache, "pagesCache");
+ }
+
+ @Override
+ public IManageablePage getPage(final String sessionId, final int pageId)
+ {
+ P fromCache = pagesCache.getPage(sessionId, pageId);
+ if (fromCache != null)
+ {
+ return convertToPage(fromCache);
+ }
+
+ byte[] data = getPageData(sessionId, pageId);
+ if (data != null)
+ {
+ return deserializePage(data);
+ }
+ return null;
+ }
+
+ @Override
+ public void removePage(final String sessionId, final int pageId)
+ {
+ pagesCache.removePage(sessionId, pageId);
+ removePageData(sessionId, pageId);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void storePage(final String sessionId, final IManageablePage page)
+ {
+ byte[] data = serializePage(page);
+ if (data != null)
+ {
+ int pageId = page.getPageId();
+ pagesCache.storePage(sessionId, pageId, (P) page);
+ storePageData(sessionId, pageId, data);
+ }
+ }
+
+ @Override
+ public void unbind(final String sessionId)
+ {
+ removePageData(sessionId);
+ pagesCache.removePages(sessionId);
+ }
+
+ @Override
+ public void destroy()
+ {
+ super.destroy();
+ pagesCache.destroy();
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/583e03cf/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractPageStore.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractPageStore.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractPageStore.java
index 16b1cbc..07f97d5 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractPageStore.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/AbstractPageStore.java
@@ -41,7 +41,7 @@ public abstract class AbstractPageStore implements IPageStore
protected AbstractPageStore(final ISerializer pageSerializer, final IDataStore dataStore)
{
Args.notNull(pageSerializer, "pageSerializer");
- Args.notNull(dataStore, "DataStore");
+ Args.notNull(dataStore, "dataStore");
this.pageSerializer = pageSerializer;
this.dataStore = dataStore;
@@ -149,6 +149,6 @@ public abstract class AbstractPageStore implements IPageStore
{
Args.notNull(data, "data");
- return (IManageablePage)pageSerializer.deserialize(data);
+ return (IManageablePage) pageSerializer.deserialize(data);
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/583e03cf/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageStore.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageStore.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageStore.java
index b27e04f..393fac3 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageStore.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/DefaultPageStore.java
@@ -34,12 +34,10 @@ import org.slf4j.LoggerFactory;
* direction when loading {@link SerializedPage} from the data store.
*
*/
-public class DefaultPageStore extends AbstractPageStore
+public class DefaultPageStore extends AbstractCachingPageStore<DefaultPageStore.SerializedPage>
{
private static final Logger LOG = LoggerFactory.getLogger(DefaultPageStore.class);
- private final SerializedPagesCache serializedPagesCache;
-
/**
* Construct.
*
@@ -54,53 +52,22 @@ public class DefaultPageStore extends AbstractPageStore
public DefaultPageStore(final ISerializer pageSerializer, final IDataStore dataStore,
final int cacheSize)
{
- super(pageSerializer, dataStore);
- serializedPagesCache = new SerializedPagesCache(cacheSize);
- }
-
- @Override
- public IManageablePage getPage(final String sessionId, final int id)
- {
- SerializedPage fromCache = serializedPagesCache.getPage(sessionId, id);
- if (fromCache != null && fromCache.data != null)
- {
- return deserializePage(fromCache.data);
- }
-
- byte[] data = getPageData(sessionId, id);
- if (data != null)
- {
- return deserializePage(data);
- }
- return null;
- }
-
- @Override
- public void removePage(final String sessionId, final int id)
- {
- serializedPagesCache.removePage(sessionId, id);
- removePageData(sessionId, id);
+ super(pageSerializer, dataStore, new SerializedPagesCache(cacheSize));
}
@Override
public void storePage(final String sessionId, final IManageablePage page)
{
- SerializedPage serialized = serializePage(sessionId, page);
+ SerializedPage serialized = createSerializedPage(sessionId, page);
if (serialized != null)
{
- serializedPagesCache.storePage(sessionId, page.getPageId(), serialized);
- storePageData(sessionId, serialized.getPageId(), serialized.getData());
+ int pageId = page.getPageId();
+ pagesCache.storePage(sessionId, pageId, serialized);
+ storePageData(sessionId, pageId, serialized.getData());
}
}
@Override
- public void unbind(final String sessionId)
- {
- removePageData(sessionId);
- serializedPagesCache.removePages(sessionId);
- }
-
- @Override
public IManageablePage convertToPage(final Object object)
{
if (object == null)
@@ -140,7 +107,7 @@ public class DefaultPageStore extends AbstractPageStore
*/
private SerializedPage restoreStrippedSerializedPage(final SerializedPage serializedPage)
{
- SerializedPage result = serializedPagesCache.getPage(serializedPage.getSessionId(),
+ SerializedPage result = pagesCache.getPage(serializedPage.getSessionId(),
serializedPage.getPageId());
if (result != null)
{
@@ -164,13 +131,13 @@ public class DefaultPageStore extends AbstractPageStore
if (page instanceof IManageablePage)
{
IManageablePage _page = (IManageablePage)page;
- result = serializedPagesCache.getPage(sessionId, _page.getPageId());
+ result = pagesCache.getPage(sessionId, _page.getPageId());
if (result == null)
{
- result = serializePage(sessionId, _page);
+ result = createSerializedPage(sessionId, _page);
if (result != null)
{
- serializedPagesCache.storePage(sessionId, _page.getPageId(), result);
+ pagesCache.storePage(sessionId, _page.getPageId(), result);
}
}
}
@@ -304,7 +271,7 @@ public class DefaultPageStore extends AbstractPageStore
* @param page
* @return the serialized page information
*/
- protected SerializedPage serializePage(final String sessionId, final IManageablePage page)
+ protected SerializedPage createSerializedPage(final String sessionId, final IManageablePage page)
{
Args.notNull(sessionId, "sessionId");
Args.notNull(page, "page");
@@ -478,5 +445,11 @@ public class DefaultPageStore extends AbstractPageStore
}
}
}
+
+ @Override
+ public void destroy()
+ {
+ cache.clear();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/583e03cf/wicket-core/src/main/java/org/apache/wicket/pageStore/PerSessionPageStore.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/PerSessionPageStore.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/PerSessionPageStore.java
index ac57ab9..f1d5d9a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/PerSessionPageStore.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/PerSessionPageStore.java
@@ -25,16 +25,13 @@ import java.util.concurrent.ConcurrentSkipListMap;
import org.apache.wicket.page.IManageablePage;
import org.apache.wicket.serialize.ISerializer;
import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.lang.Objects;
import org.apache.wicket.util.time.Time;
/**
*
*/
-public class PerSessionPageStore extends AbstractPageStore
+public class PerSessionPageStore extends AbstractCachingPageStore<IManageablePage>
{
- private final SecondLevelPageCache<String, Integer, IManageablePage> pagesCache;
-
/**
* Construct.
*
@@ -49,50 +46,7 @@ public class PerSessionPageStore extends AbstractPageStore
public PerSessionPageStore(final ISerializer pageSerializer, final IDataStore dataStore,
final int cacheSize)
{
- super(pageSerializer, dataStore);
- this.pagesCache = new PagesCache(cacheSize);
- }
-
- @Override
- public IManageablePage getPage(final String sessionId, final int id)
- {
- IManageablePage fromCache = pagesCache.getPage(sessionId, id);
- if (fromCache != null)
- {
- return fromCache;
- }
-
- byte[] data = getPageData(sessionId, id);
- if (data != null)
- {
- return deserializePage(data);
- }
- return null;
- }
-
- @Override
- public void removePage(final String sessionId, final int id)
- {
- pagesCache.removePage(sessionId, id);
- removePageData(sessionId, id);
- }
-
- @Override
- public void storePage(final String sessionId, final IManageablePage page)
- {
- byte[] data = serializePage(page);
- if (data != null)
- {
- pagesCache.storePage(sessionId, page.getPageId(), page);
- storePageData(sessionId, page.getPageId(), data);
- }
- }
-
- @Override
- public void unbind(final String sessionId)
- {
- removePageData(sessionId);
- pagesCache.removePages(sessionId);
+ super(pageSerializer, dataStore, new PagesCache(cacheSize));
}
@Override
@@ -166,7 +120,7 @@ public class PerSessionPageStore extends AbstractPageStore
@Override
public int compare(PageValue p1, PageValue p2)
{
- return Objects.compareWithConversion(p1.accessTime, p2.accessTime);
+ return p1.accessTime.compareTo(p2.accessTime);
}
}
@@ -333,5 +287,11 @@ public class PerSessionPageStore extends AbstractPageStore
}
}
}
+
+ @Override
+ public void destroy()
+ {
+ cache.clear();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/583e03cf/wicket-core/src/main/java/org/apache/wicket/pageStore/SecondLevelPageCache.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/pageStore/SecondLevelPageCache.java b/wicket-core/src/main/java/org/apache/wicket/pageStore/SecondLevelPageCache.java
index 656827e..3d30857 100644
--- a/wicket-core/src/main/java/org/apache/wicket/pageStore/SecondLevelPageCache.java
+++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/SecondLevelPageCache.java
@@ -37,4 +37,6 @@ public interface SecondLevelPageCache<S, PI, P>
P getPage(S session, PI pageId);
void storePage(S session, PI pageId, P page);
+
+ void destroy();
}