/* * 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(); } }