Author: ivaynberg
Date: Tue Oct 13 05:37:27 2009
New Revision: 824594
URL: http://svn.apache.org/viewvc?rev=824594&view=rev
Log:
more migration wip
Removed:
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/Application.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/Session.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/session/
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/ThreadContext.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockApplication.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockSessionStore.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/protocol/http/WebApplication.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/impl/render/WebRenderPageRequestHandlerDelegate.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/BufferedResponseMapper.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/AbstractHttpSessionStore.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/HttpSessionStore.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/SecondLevelCacheSessionStore.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/session/ISessionStore.java
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java Tue
Oct 13 05:37:27 2009
@@ -18,6 +18,7 @@
import java.io.IOException;
import java.io.InputStream;
+import java.io.Serializable;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
@@ -47,11 +48,39 @@
import org.apache.wicket.markup.resolver.ParentResolver;
import org.apache.wicket.markup.resolver.WicketContainerResolver;
import org.apache.wicket.markup.resolver.WicketMessageResolver;
+import org.apache.wicket.ng.DefaultExceptionMapper;
+import org.apache.wicket.ng.MetaDataKey;
+import org.apache.wicket.ng.Page2;
+import org.apache.wicket.ng.ThreadContext;
+import org.apache.wicket.ng.WicketRuntimeException;
+import org.apache.wicket.ng.page.PageManager;
+import org.apache.wicket.ng.page.PageManagerContext;
+import org.apache.wicket.ng.page.persistent.DataStore;
+import org.apache.wicket.ng.page.persistent.DefaultPageStore;
+import org.apache.wicket.ng.page.persistent.PageStore;
+import org.apache.wicket.ng.page.persistent.PersistentPageManager;
+import org.apache.wicket.ng.page.persistent.disk.DiskDataStore;
+import org.apache.wicket.ng.request.CompoundRequestMapper;
+import org.apache.wicket.ng.request.Request;
+import org.apache.wicket.ng.request.RequestMapper;
+import org.apache.wicket.ng.request.component.PageParameters;
+import org.apache.wicket.ng.request.component.RequestablePage;
+import org.apache.wicket.ng.request.cycle.RequestCycle;
+import org.apache.wicket.ng.request.cycle.RequestCycleContext;
+import org.apache.wicket.ng.request.handler.impl.RenderPageRequestHandler;
+import
org.apache.wicket.ng.request.handler.impl.render.RenderPageRequestHandlerDelegate;
+import org.apache.wicket.ng.request.listener.RequestListenerInterface;
+import org.apache.wicket.ng.request.mapper.MapperContext;
+import org.apache.wicket.ng.request.mapper.ThreadsafeCompoundRequestMapper;
+import org.apache.wicket.ng.request.response.Response;
+import org.apache.wicket.ng.resource.ResourceReferenceRegistry;
import org.apache.wicket.protocol.http.IRequestLogger;
import org.apache.wicket.protocol.http.RequestLogger;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.protocol.http.WebSession;
+import org.apache.wicket.session.DefaultPageFactory;
import org.apache.wicket.session.ISessionStore;
+import org.apache.wicket.session.ISessionStore.UnboundListener;
import org.apache.wicket.settings.IApplicationSettings;
import org.apache.wicket.settings.IDebugSettings;
import org.apache.wicket.settings.IExceptionSettings;
@@ -65,6 +94,7 @@
import org.apache.wicket.settings.ISessionSettings;
import org.apache.wicket.settings.Settings;
import org.apache.wicket.util.convert.ConverterLocator;
+import org.apache.wicket.util.lang.Checks;
import org.apache.wicket.util.lang.Classes;
import org.apache.wicket.util.lang.Objects;
import org.apache.wicket.util.lang.PropertyResolver;
@@ -111,7 +141,7 @@
* @see org.apache.wicket.protocol.http.WebApplication
* @author Jonathan Locke
*/
-public abstract class Application
+public abstract class Application implements UnboundListener
{
/** Configuration constant for the 2 types */
public static final String CONFIGURATION = "configuration";
@@ -133,9 +163,6 @@
private static final Map<String, Application>
applicationKeyToApplication = new HashMap<String, Application>(
1);
- /** Thread local holder of the application object. */
- private static final ThreadLocal<Application> current = new
ThreadLocal<Application>();
-
/** Log. */
private static final Logger log =
LoggerFactory.getLogger(Application.class);
@@ -159,7 +186,7 @@
*/
public static boolean exists()
{
- return current.get() != null;
+ return ThreadContext.getApplication() != null;
}
/**
@@ -169,7 +196,7 @@
*/
public static Application get()
{
- final Application application = current.get();
+ Application application = ThreadContext.getApplication();
if (application == null)
{
throw new WicketRuntimeException("There is no
application attached to current thread " +
@@ -217,7 +244,7 @@
{
throw new IllegalArgumentException("Argument
application can not be null");
}
- current.set(application);
+ ThreadContext.setApplication(this);
}
/**
@@ -920,8 +947,16 @@
String applicationKey = getApplicationKey();
applicationKeyToApplication.put(applicationKey, this);
- sessionStore = newSessionStore();
converterLocator = newConverterLocator();
+
+ sessionStore = newSessionStore();
+ sessionStore.registerUnboundListener(this);
+ pageManager = newPageManager();
+ pageManager.setContext(getPageManagerContext());
+ rootRequestMapper = newRequestHandlerEncoderRegistry();
+ resourceReferenceRegistry = newResourceReferenceRegistry();
+ pageFactory = newPageFactory();
+ registerDefaultEncoders();
}
/**
@@ -1191,4 +1226,335 @@
{
return true;
}
+
+ /**
+ * TODO javadoc
+ *
+ * TODO WICKET NG REVIEW
+ *
+ * */
+ public void sessionUnbound(String sessionId)
+ {
+ getPageManager().sessionExpired(sessionId);
+ }
+
+ //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ //
+ // Page Manager
+ //
+ //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ protected PageManager newPageManager()
+ {
+ int cacheSize = 40;
+ int fileChannelPoolCapacity = 50;
+ DataStore dataStore = new DiskDataStore(getName(), 1000000,
fileChannelPoolCapacity);
+ PageStore pageStore = new DefaultPageStore(getName(),
dataStore, cacheSize);
+ return new PersistentPageManager(getName(), pageStore);
+ }
+
+ private PageManager pageManager;
+
+ /**
+ * Context for PageManager to interact with rest of Wicket
+ */
+ private final PageManagerContext pageManagerContext = new
PageManagerContext()
+ {
+ public void bind()
+ {
+ Session.get().bind();
+ }
+
+ private final MetaDataKey<Object> requestCycleMetaDataKey = new
MetaDataKey<Object>()
+ {
+ private static final long serialVersionUID = 1L;
+ };
+
+ public Object getRequestData()
+ {
+ RequestCycle requestCycle = RequestCycle.get();
+ if (requestCycle == null)
+ {
+ throw new IllegalStateException("Not a request
thread.");
+ }
+ return
requestCycle.getMetaData(requestCycleMetaDataKey);
+ }
+
+ public Serializable getSessionAttribute(String key)
+ {
+ return ThreadContext.getSession().getAttribute(key);
+ }
+
+ public String getSessionId()
+ {
+ return Session.get().getId();
+ }
+
+ public void setRequestData(Object data)
+ {
+ RequestCycle requestCycle = RequestCycle.get();
+ if (requestCycle == null)
+ {
+ throw new IllegalStateException("Not a request
thread.");
+ }
+ requestCycle.setMetaData(requestCycleMetaDataKey, data);
+ }
+
+ public void setSessionAttribute(String key, Serializable value)
+ {
+ Session.get().setAttribute(key, value);
+ }
+ };
+
+ /**
+ * Returns the {...@link PageManager} instance.
+ *
+ * @return {...@link PageManager} instance.
+ */
+ public PageManager getPageManager()
+ {
+ return pageManager;
+ }
+
+ protected PageManagerContext getPageManagerContext()
+ {
+ return pageManagerContext;
+ }
+
+ /**
+ * TODO WICKET NG MIGRATION - REVIEW
+ *
+ * Register the default encoders - necessary for the application to
work.
+ */
+ protected void registerDefaultEncoders()
+ {
+
+ }
+
+ /**
+ * TODO WICKET NG MIGRATION - REVIEW
+ */
+ public final MapperContext getEncoderContext()
+ {
+ return encoderContext;
+ }
+
+ /**
+ * TODO WICKET NG MIGRATION - REVIEW
+ */
+ public void registerEncoder(RequestMapper encoder)
+ {
+ getRootRequestMapper().register(encoder);
+ }
+
+ private final MapperContext encoderContext = new MapperContext()
+ {
+ public String getBookmarkableIdentifier()
+ {
+ return "bookmarkable";
+ }
+
+ public String getNamespace()
+ {
+ return "wicket";
+ }
+
+ public String getPageIdentifier()
+ {
+ return "page";
+ }
+
+ public String getResourceIdentifier()
+ {
+ return "resource";
+ }
+
+ public ResourceReferenceRegistry getResourceReferenceRegistry()
+ {
+ return Application.this.getResourceReferenceRegistry();
+ }
+
+ public RequestListenerInterface
requestListenerInterfaceFromString(String interfaceName)
+ {
+ return RequestListenerInterface.forName(interfaceName);
+ }
+
+ public String
requestListenerInterfaceToString(RequestListenerInterface listenerInterface)
+ {
+ return listenerInterface.getName();
+ }
+
+ public RequestablePage newPageInstance(Class<? extends
RequestablePage> pageClass,
+ PageParameters pageParameters)
+ {
+ if (pageParameters == null)
+ {
+ return getPageFactory().newPage(pageClass);
+ }
+ else
+ {
+ return getPageFactory().newPage(pageClass,
pageParameters);
+ }
+ }
+
+ public RequestablePage getPageInstance(int pageId)
+ {
+ return Page2.get(pageId);
+ }
+
+ public Class<? extends RequestablePage> getHomePageClass()
+ {
+ return Application.this.getHomePage();
+ }
+ };
+ private CompoundRequestMapper rootRequestMapper;
+
+ /**
+ * Override to create custom {...@link ThreadsafeCompoundRequestMapper}.
+ *
+ * @return new {...@link ThreadsafeCompoundRequestMapper} instance
+ */
+ protected CompoundRequestMapper newRequestHandlerEncoderRegistry()
+ {
+ return new ThreadsafeCompoundRequestMapper();
+ };
+
+ /**
+ * returns the {...@link ThreadsafeCompoundRequestMapper} for this
application.
+ *
+ * @return
+ */
+ public final CompoundRequestMapper getRootRequestMapper()
+ {
+ return rootRequestMapper;
+ }
+
+ /**
+ * Returns {...@link PageFactory} for this application.
+ *
+ * @return
+ */
+ public final IPageFactory getPageFactory()
+ {
+ return pageFactory;
+ }
+
+ private IPageFactory pageFactory;
+
+ /**
+ * Override to create custom {...@link PageFactory}
+ *
+ * @return new {...@link PageFactory} instance.
+ */
+ protected IPageFactory newPageFactory()
+ {
+ return new DefaultPageFactory();
+ }
+
+ private ResourceReferenceRegistry resourceReferenceRegistry;
+
+ /**
+ * Override to create custom {...@link ResourceReferenceRegistry}.
+ *
+ * @return new {...@link ResourceReferenceRegistry} instance.
+ */
+ protected ResourceReferenceRegistry newResourceReferenceRegistry()
+ {
+ return new ResourceReferenceRegistry();
+ }
+
+ /**
+ * Returns {...@link ResourceReferenceRegistry} for this application.
+ *
+ * @return
+ */
+ public final ResourceReferenceRegistry getResourceReferenceRegistry()
+ {
+ return resourceReferenceRegistry;
+ }
+
+ //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ //
+ // Page Rendering
+ //
+ //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ /**
+ * Returns the {...@link RenderPageRequestHandlerDelegate} responsible
for rendering the page.
+ */
+ public abstract RenderPageRequestHandlerDelegate
getRenderPageRequestHandlerDelegate(
+ RenderPageRequestHandler renderPageRequestHandler);
+
+ protected abstract Session newSession(RequestCycle requestCycle);
+
+
+ Session fetchCreateAndSetSession(RequestCycle requestCycle)
+ {
+ Checks.argumentNotNull(requestCycle, "requestCycle");
+
+ Session session =
getSessionStore().lookup(requestCycle.getRequest());
+ if (session == null)
+ {
+ session = newSession(requestCycle);
+ ThreadContext.setSession(session);
+ getPageManager().newSessionCreated();
+ }
+ else
+ {
+ ThreadContext.setSession(session);
+ }
+ return session;
+ }
+
+ public final RequestCycle createRequestCycle(Request request, Response
response)
+ {
+ // FIXME exception mapper should come from elsewhere
+ RequestCycleContext context = new RequestCycleContext(request,
response,
+ getRootRequestMapper(), new DefaultExceptionMapper());
+
+ RequestCycle requestCycle = newRequestCycle(context);
+ requestCycle.register(new RequestCycle.DetachCallback()
+ {
+ public void onDetach(RequestCycle requestCycle)
+ {
+ getPageManager().commitRequest();
+ }
+ });
+ return requestCycle;
+ }
+
+ /**
+ * Override this method to create custom Request Cycle instance.
+ *
+ * @param context
+ * holds context necessary to instantiate a request cycle,
such as the current
+ * request, response, and request mappers
+ * @return
+ */
+ protected RequestCycle newRequestCycle(RequestCycleContext context)
+ {
+
+ return new RequestCycle(context);
+ }
+
+ /**
+ * Destroys the application.
+ */
+ public void destroy()
+ {
+ try
+ {
+ pageManager.destroy();
+ sessionStore.destroy();
+ }
+ finally
+ {
+ applications.remove(name);
+ }
+ }
+
}
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java Tue Oct 13
05:37:27 2009
@@ -33,6 +33,7 @@
import org.apache.wicket.authorization.IAuthorizationStrategy;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.FeedbackMessages;
+import org.apache.wicket.ng.ThreadContext;
import org.apache.wicket.protocol.http.IgnoreAjaxRequestException;
import org.apache.wicket.request.ClientInfo;
import org.apache.wicket.session.ISessionStore;
@@ -161,9 +162,6 @@
/** Name of session attribute under which this session is stored */
public static final String SESSION_ATTRIBUTE_NAME = "session";
- /** Thread-local current session. */
- private static final ThreadLocal<Session> current = new
ThreadLocal<Session>();
-
/** A store for dirty objects for one request */
private static final ThreadLocal<List<IClusterable>> dirtyObjects = new
ThreadLocal<List<IClusterable>>();
@@ -189,7 +187,7 @@
*/
public static boolean exists()
{
- return current.get() != null;
+ return ThreadContext.getSession() != null;
}
/**
@@ -246,7 +244,7 @@
*/
public static Session get()
{
- Session session = current.get();
+ Session session = ThreadContext.getSession();
if (session == null)
{
session = findOrCreate();
@@ -269,7 +267,7 @@
throw new IllegalArgumentException("Argument session
can not be null");
}
- current.set(session);
+ ThreadContext.setSession(session);
// execute any attach logic now
session.attach();
@@ -283,7 +281,7 @@
*/
public static void unset()
{
- current.set(null);
+ ThreadContext.setSession(null);
}
/** A number to generate names for auto create pagemaps */
@@ -342,7 +340,7 @@
* instance).
* </p>
*/
- private transient Map<String, Object> temporarySessionAttributes;
+ private transient Map<String, Serializable> temporarySessionAttributes;
/** A linked list for last used pagemap queue */
private final LinkedList/* <IPageMap> */<IPageMap> usedPageMaps = new
LinkedList<IPageMap>();
@@ -400,7 +398,7 @@
if (temporarySessionAttributes != null)
{
- for (Entry<String, Object> entry :
temporarySessionAttributes.entrySet())
+ for (Entry<String, Serializable> entry :
temporarySessionAttributes.entrySet())
{
store.setAttribute(request,
String.valueOf(entry.getKey()), entry.getValue());
}
@@ -1260,7 +1258,7 @@
* @param value
* The value of the attribute
*/
- protected final void setAttribute(String name, Object value)
+ protected final void setAttribute(String name, Serializable value)
{
if (!isTemporary())
{
@@ -1299,7 +1297,7 @@
// session instance gets shared across threads
if (temporarySessionAttributes == null)
{
- temporarySessionAttributes = new
HashMap<String, Object>(3);
+ temporarySessionAttributes = new
HashMap<String, Serializable>(3);
}
temporarySessionAttributes.put(name, value);
}
@@ -1396,7 +1394,7 @@
List<IClusterable> dirtyObjects = Session.dirtyObjects.get();
Session.dirtyObjects.set(null);
- Map<String, Object> tempMap = new HashMap<String, Object>();
+ Map<String, Serializable> tempMap = new HashMap<String,
Serializable>();
// Go through all dirty entries, replicating any dirty objects
if (dirtyObjects != null)
@@ -1404,7 +1402,7 @@
for (final Iterator<IClusterable> iterator =
dirtyObjects.iterator(); iterator.hasNext();)
{
String attribute = null;
- Object object = iterator.next();
+ IClusterable object = iterator.next();
if (object instanceof Page)
{
final Page page = (Page)object;
@@ -1437,7 +1435,7 @@
// in case we have dirty attributes, set them to session
if (tempMap.isEmpty() == false)
{
- for (Entry<String, Object> entry : tempMap.entrySet())
+ for (Entry<String, Serializable> entry :
tempMap.entrySet())
{
setAttribute(entry.getKey(), entry.getValue());
}
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/ThreadContext.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/ThreadContext.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/ThreadContext.java
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/ThreadContext.java
Tue Oct 13 05:37:27 2009
@@ -16,6 +16,7 @@
*/
package org.apache.wicket.ng;
+import org.apache.wicket.Session;
import org.apache.wicket.ng.request.cycle.RequestCycle;
public class ThreadContext
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockApplication.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockApplication.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockApplication.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockApplication.java
Tue Oct 13 05:37:27 2009
@@ -25,7 +25,7 @@
import org.apache.wicket.ng.request.mapper.BookmarkableMapper;
import org.apache.wicket.ng.request.mapper.PageInstanceMapper;
import org.apache.wicket.ng.request.mapper.ResourceReferenceMapper;
-import org.apache.wicket.ng.session.SessionStore;
+import org.apache.wicket.session.ISessionStore;
public class MockApplication extends Application
{
@@ -68,7 +68,7 @@
}
@Override
- protected SessionStore newSessionStore()
+ public ISessionStore newSessionStore()
{
return new MockSessionStore();
}
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockSessionStore.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockSessionStore.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockSessionStore.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockSessionStore.java
Tue Oct 13 05:37:27 2009
@@ -17,23 +17,28 @@
package org.apache.wicket.ng.mock;
import java.io.Serializable;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArraySet;
-import org.apache.wicket.ng.Session;
+import org.apache.wicket.IPageMap;
+import org.apache.wicket.Page;
+import org.apache.wicket.Session;
import org.apache.wicket.ng.request.Request;
-import org.apache.wicket.ng.session.SessionStore;
+import org.apache.wicket.session.ISessionStore;
+import org.apache.wicket.version.IPageVersionManager;
/**
* Session store that holds one session.
*
* @author Matej Knopp
*/
-public class MockSessionStore implements SessionStore
+public class MockSessionStore implements ISessionStore
{
public MockSessionStore()
@@ -118,4 +123,70 @@
unboundListeners.remove(listener);
}
+ // EVERYTHING BELOW WAS AUTOMATICALLY STUBBED
OUT////////////////////////////////
+
+ public void bind(org.apache.wicket.Request request, Session newSession)
+ {
+ }
+
+ public IPageMap createPageMap(String name)
+ {
+ return null;
+ }
+
+ public Serializable getAttribute(org.apache.wicket.Request request,
String name)
+ {
+ return null;
+ }
+
+ public List<String> getAttributeNames(org.apache.wicket.Request request)
+ {
+ return null;
+ }
+
+ public String getSessionId(org.apache.wicket.Request request, boolean
create)
+ {
+ return null;
+ }
+
+ public Collection<UnboundListener> getUnboundListeners()
+ {
+ return null;
+ }
+
+ public void invalidate(org.apache.wicket.Request request)
+ {
+ }
+
+ public Session lookup(org.apache.wicket.Request request)
+ {
+ return null;
+ }
+
+ public IPageVersionManager newVersionManager(Page page)
+ {
+ return null;
+ }
+
+ public void onBeginRequest(org.apache.wicket.Request request)
+ {
+ }
+
+ public void onEndRequest(org.apache.wicket.Request request)
+ {
+ }
+
+ public void removeAttribute(org.apache.wicket.Request request, String
name)
+ {
+ }
+
+ public void setAttribute(org.apache.wicket.Request request, String
name, Serializable value)
+ {
+ }
+
+ public void unbind(String sessionId)
+ {
+ }
+
+
}
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/protocol/http/WebApplication.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/protocol/http/WebApplication.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/protocol/http/WebApplication.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/protocol/http/WebApplication.java
Tue Oct 13 05:37:27 2009
@@ -29,8 +29,8 @@
import
org.apache.wicket.ng.request.handler.impl.render.WebRenderPageRequestHandlerDelegate;
import org.apache.wicket.ng.request.mapper.SystemMapper;
import org.apache.wicket.ng.request.response.BufferedWebResponse;
-import org.apache.wicket.ng.session.HttpSessionStore;
-import org.apache.wicket.ng.session.SessionStore;
+import org.apache.wicket.protocol.http.HttpSessionStore;
+import org.apache.wicket.session.ISessionStore;
/**
*
@@ -40,82 +40,82 @@
public abstract class WebApplication extends Application
{
- public WebApplication()
- {
- super();
- }
-
- @Override
- protected void registerDefaultEncoders()
- {
- registerEncoder(new SystemMapper());
- }
-
- public void mount(RequestMapper encoder)
- {
- registerEncoder(encoder);
- }
-
- // TODO: Do this properly
- private Map<String, BufferedWebResponse> storedResponses = new
ConcurrentHashMap<String, BufferedWebResponse>();
-
- public boolean hasBufferedResponse(String sessionId, Url url)
- {
- String key = sessionId + url.toString();
- return storedResponses.containsKey(key);
- }
-
- public BufferedWebResponse getAndRemoveBufferedResponse(String sessionId,
Url url)
- {
- String key = sessionId + url.toString();
- return storedResponses.remove(key);
- }
-
- public void storeBufferedResponse(String sessionId, Url url,
BufferedWebResponse response)
- {
- String key = sessionId + url.toString();
- storedResponses.put(key, response);
- }
-
- @Override
- protected SessionStore newSessionStore()
- {
- return new HttpSessionStore(this);
- }
-
- /**
- * Gets the servlet context for this application. Use this to get
references to absolute paths,
- * global web.xml parameters (<context-param>), etc.
- *
- * @return The servlet context for this application
- */
- public ServletContext getServletContext()
- {
- if (wicketFilter != null)
- {
- return wicketFilter.getFilterConfig().getServletContext();
- }
- throw new IllegalStateException("servletContext is not set yet. Any
code in your"
- + " Application object that uses the wicket filter instance
should be put"
- + " in the init() method instead of your constructor");
- }
-
- public void setWicketFilter(WicketFilter wicketFilter)
- {
- this.wicketFilter = wicketFilter;
- }
-
- private WicketFilter wicketFilter;
-
- @Override
- public RenderPageRequestHandlerDelegate
getRenderPageRequestHandlerDelegate(
- RenderPageRequestHandler renderPageRequestHandler)
- {
- return new
WebRenderPageRequestHandlerDelegate(renderPageRequestHandler);
- }
-
- public static WebApplication get()
- {
- return (WebApplication)Application.get();
- }
+ public WebApplication()
+ {
+ super();
+ }
+
+ @Override
+ protected void registerDefaultEncoders()
+ {
+ registerEncoder(new SystemMapper());
+ }
+
+ public void mount(RequestMapper encoder)
+ {
+ registerEncoder(encoder);
+ }
+
+ // TODO: Do this properly
+ private final Map<String, BufferedWebResponse> storedResponses = new
ConcurrentHashMap<String, BufferedWebResponse>();
+
+ public boolean hasBufferedResponse(String sessionId, Url url)
+ {
+ String key = sessionId + url.toString();
+ return storedResponses.containsKey(key);
+ }
+
+ public BufferedWebResponse getAndRemoveBufferedResponse(String
sessionId, Url url)
+ {
+ String key = sessionId + url.toString();
+ return storedResponses.remove(key);
+ }
+
+ public void storeBufferedResponse(String sessionId, Url url,
BufferedWebResponse response)
+ {
+ String key = sessionId + url.toString();
+ storedResponses.put(key, response);
+ }
+
+ @Override
+ protected ISessionStore newSessionStore()
+ {
+ return new HttpSessionStore(this);
+ }
+
+ /**
+ * Gets the servlet context for this application. Use this to get
references to absolute paths,
+ * global web.xml parameters (<context-param>), etc.
+ *
+ * @return The servlet context for this application
+ */
+ public ServletContext getServletContext()
+ {
+ if (wicketFilter != null)
+ {
+ return
wicketFilter.getFilterConfig().getServletContext();
+ }
+ throw new IllegalStateException("servletContext is not set yet.
Any code in your"
+ + " Application object that uses the wicket filter
instance should be put"
+ + " in the init() method instead of your constructor");
+ }
+
+ public void setWicketFilter(WicketFilter wicketFilter)
+ {
+ this.wicketFilter = wicketFilter;
+ }
+
+ private WicketFilter wicketFilter;
+
+ @Override
+ public RenderPageRequestHandlerDelegate
getRenderPageRequestHandlerDelegate(
+ RenderPageRequestHandler renderPageRequestHandler)
+ {
+ return new
WebRenderPageRequestHandlerDelegate(renderPageRequestHandler);
+ }
+
+ public static WebApplication get()
+ {
+ return (WebApplication)Application.get();
+ }
}
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/impl/render/WebRenderPageRequestHandlerDelegate.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/impl/render/WebRenderPageRequestHandlerDelegate.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/impl/render/WebRenderPageRequestHandlerDelegate.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/handler/impl/render/WebRenderPageRequestHandlerDelegate.java
Tue Oct 13 05:37:27 2009
@@ -17,7 +17,7 @@
package org.apache.wicket.ng.request.handler.impl.render;
import org.apache.wicket.ng.Application;
-import org.apache.wicket.ng.Session;
+import org.apache.wicket.ng.ThreadContext;
import org.apache.wicket.ng.protocol.http.WebApplication;
import org.apache.wicket.ng.request.Url;
import org.apache.wicket.ng.request.component.RequestablePage;
@@ -66,12 +66,12 @@
protected String getSessionId()
{
- return Session.get().getId();
+ return ThreadContext.getSession().getId();
}
protected boolean isSessionTemporary()
{
- return Session.get().isTemporary();
+ return ThreadContext.getSession().isTemporary();
}
protected BufferedWebResponse getAndRemoveBufferedResponse(Url url)
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/BufferedResponseMapper.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/BufferedResponseMapper.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/BufferedResponseMapper.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/request/mapper/BufferedResponseMapper.java
Tue Oct 13 05:37:27 2009
@@ -16,7 +16,7 @@
*/
package org.apache.wicket.ng.request.mapper;
-import org.apache.wicket.ng.Session;
+import org.apache.wicket.ng.ThreadContext;
import org.apache.wicket.ng.protocol.http.WebApplication;
import org.apache.wicket.ng.request.Request;
import org.apache.wicket.ng.request.RequestHandler;
@@ -40,7 +40,7 @@
protected String getSessionId()
{
- return Session.get().getId();
+ return ThreadContext.getSession().getId();
}
protected boolean hasBufferedResponse(Url url)
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/AbstractHttpSessionStore.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/AbstractHttpSessionStore.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/AbstractHttpSessionStore.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/AbstractHttpSessionStore.java
Tue Oct 13 05:37:27 2009
@@ -17,6 +17,10 @@
package org.apache.wicket.protocol.http;
import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
@@ -94,7 +98,13 @@
Application application =
Application.get(applicationKey);
if (application != null)
{
-
application.getSessionStore().unbind(sessionId);
+ ISessionStore sessionStore =
application.getSessionStore();
+ sessionStore.unbind(sessionId);
+
+ for (UnboundListener listener :
sessionStore.getUnboundListeners())
+ {
+
listener.sessionUnbound(sessionId);
+ }
}
}
}
@@ -329,4 +339,25 @@
}
return (WebRequest)request;
}
+
+ /** TODO javadoc */
+ private final Set<UnboundListener> unboundListeners = new
CopyOnWriteArraySet<UnboundListener>();
+
+ /** TODO javadoc */
+ public void registerUnboundListener(UnboundListener listener)
+ {
+ unboundListeners.add(listener);
+ }
+
+ /** TODO javadoc */
+ public void unregisterUnboundListener(UnboundListener listener)
+ {
+ unboundListeners.remove(listener);
+ }
+
+ /** TODO javadoc */
+ public
Collection<org.apache.wicket.session.ISessionStore.UnboundListener>
getUnboundListeners()
+ {
+ return Collections.unmodifiableCollection(unboundListeners);
+ }
}
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/HttpSessionStore.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/HttpSessionStore.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/HttpSessionStore.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/HttpSessionStore.java
Tue Oct 13 05:37:27 2009
@@ -16,6 +16,7 @@
*/
package org.apache.wicket.protocol.http;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
@@ -27,6 +28,8 @@
import org.apache.wicket.IPageMap;
import org.apache.wicket.Request;
import org.apache.wicket.Session;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
@@ -34,9 +37,15 @@
* {...@link javax.servlet.http.HttpSession} to store its attributes.
*
* @author Eelco Hillenius
+ * @author Matej Knopp
+ * @author Igor Vaynberg
*/
public class HttpSessionStore extends AbstractHttpSessionStore
{
+
+ /** log. */
+ private static Logger logger =
LoggerFactory.getLogger(HttpSessionStore.class);
+
/**
* Construct.
*
@@ -57,16 +66,16 @@
}
/**
- * @see
org.apache.wicket.session.ISessionStore#getAttribute(org.apache.wicket.Request,
- * java.lang.String)
+ * @{inheritDoc
*/
- public Object getAttribute(Request request, String name)
+ public Serializable getAttribute(Request request, String name)
{
WebRequest webRequest = toWebRequest(request);
HttpSession httpSession = getHttpSession(webRequest);
if (httpSession != null)
{
- return
httpSession.getAttribute(getSessionAttributePrefix(webRequest) + name);
+ return
(Serializable)httpSession.getAttribute(getSessionAttributePrefix(webRequest) +
+ name);
}
return null;
}
@@ -129,7 +138,7 @@
* @see
org.apache.wicket.session.ISessionStore#setAttribute(Request,java.lang.String,
* java.lang.Object)
*/
- public void setAttribute(Request request, String name, Object value)
+ public void setAttribute(Request request, String name, Serializable
value)
{
// ignore call if the session was marked invalid
if (!isSessionValid())
@@ -190,4 +199,6 @@
return true; // we simply don't know, so play safe and rely on
// servlet container's code to check availability
}
+
+
}
\ No newline at end of file
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/SecondLevelCacheSessionStore.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/SecondLevelCacheSessionStore.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/SecondLevelCacheSessionStore.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/SecondLevelCacheSessionStore.java
Tue Oct 13 05:37:27 2009
@@ -747,7 +747,7 @@
* java.lang.String, java.lang.Object)
*/
@Override
- public void setAttribute(Request request, String name, Object value)
+ public void setAttribute(Request request, String name, Serializable
value)
{
// ignore all pages, they are stored through the pagemap
if (!(value instanceof Page))
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/session/ISessionStore.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/session/ISessionStore.java?rev=824594&r1=824593&r2=824594&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/session/ISessionStore.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/session/ISessionStore.java
Tue Oct 13 05:37:27 2009
@@ -16,6 +16,8 @@
*/
package org.apache.wicket.session;
+import java.io.Serializable;
+import java.util.Collection;
import java.util.List;
import javax.servlet.http.HttpSession;
@@ -32,6 +34,7 @@
*
* @author Eelco Hillenius
* @author Johan Compagner
+ * @author Matej Knopp
*/
public interface ISessionStore
{
@@ -44,7 +47,7 @@
* The name of the attribute to store
* @return The value of the attribute
*/
- Object getAttribute(Request request, final String name);
+ Serializable getAttribute(Request request, final String name);
/**
* @param request
@@ -83,7 +86,7 @@
* @param value
* the value of the attribute
*/
- void setAttribute(Request request, String name, Object value);
+ void setAttribute(Request request, String name, Serializable value);
/**
* Get the session id for the provided request. If create is false and
the creation of the
@@ -165,4 +168,33 @@
* Called when the WebApplication is destroyed.
*/
void destroy();
+
+ /**
+ * Listener invoked when session is unbound.
+ *
+ * @author Matej Knopp
+ */
+ public interface UnboundListener
+ {
+ public void sessionUnbound(String sessionId);
+ };
+
+ /**
+ * Registers listener invoked when session is unbound.
+ *
+ * @param listener
+ */
+ public void registerUnboundListener(UnboundListener listener);
+
+ /**
+ * Unregisters listener invoked when session is unbound.
+ *
+ * @param listener
+ */
+ public void unregisterUnboundListener(UnboundListener listener);
+
+ /**
+ * @return immutable collection of unbound listeners
+ */
+ public Collection<UnboundListener> getUnboundListeners();
}