You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Sven Meier (JIRA)" <ji...@apache.org> on 2013/02/14 15:12:13 UTC

[jira] [Commented] (WICKET-5040) Session.exists() returns false when ThreadContext#session is not set to current session

    [ https://issues.apache.org/jira/browse/WICKET-5040?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13578390#comment-13578390 ] 

Sven Meier commented on WICKET-5040:
------------------------------------

With commit:80adc54 RestartResponseAtInterceptPageException.InterceptData#get() checks for existence of a session with Session#exists() before calling Session#get():

			if (Session.exists())
			{
				return Session.get().getMetaData(key);
			}
			return null;

This was changed so that RestartResponseAtInterceptPageException#MAPPER doesn't create a (temporary) session if not needed (e.g. when a resource is requested).

Note that Session#exists()'s javadoc is ambiguous about this detail:

	/**
	 * Checks if the <code>Session</code> threadlocal is set in this thread
	 * 
	 * @return true if {@link Session#get()} can return the instance of session, false otherwise
	 */
	public static boolean exists()

It claims to return true if #get() can return the session. If there's a current session but it is not set on the ThreadContext yet, #exists() will return false, but #get() will return the session from the session store.
                
> Session.exists() returns false when ThreadContext#session is not set to current session
> ---------------------------------------------------------------------------------------
>
>                 Key: WICKET-5040
>                 URL: https://issues.apache.org/jira/browse/WICKET-5040
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 6.5.0
>            Reporter: Sven Meier
>            Assignee: Sven Meier
>
> There are several places in Wicket which check for the existence of a Session before actually getting a reference to it, e.g. FeedbackCollector:
> 	public final List<FeedbackMessage> collect(final IFeedbackMessageFilter filter)
> 	{
> 		...
> 		if (includeSession && Session.exists())
> 		{
> 			messages.addAll(Session.get().getFeedbackMessages().messages(filter));
> 		}
> 	}
> If no one has called Session#get(), all calls to Session#exists() return false although a session might exist in the session store, i.e. it might just not be set to ThreadContext#session already.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira