[
https://issues.apache.org/jira/browse/WICKET-2950?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12891032#action_12891032
]
Hudson commented on WICKET-2950:
--------------------------------
Integrated in Apache Wicket 1.4.x #53 (See
[http://hudson.zones.apache.org/hudson/job/Apache%20Wicket%201.4.x/53/])
> remove final from AbstractHttpSessionStore#getSessionId
> -------------------------------------------------------
>
> Key: WICKET-2950
> URL: https://issues.apache.org/jira/browse/WICKET-2950
> Project: Wicket
> Issue Type: Wish
> Components: wicket
> Reporter: Peter Ertl
> Assignee: Juergen Donnerstag
> Fix For: 1.4.10, 1.5-M1
>
>
> Hi wicket devs!
> I am currently working on an own implementation of a wicket failover-safe
> session store.
> I know about
> http://letsgetdugg.com/2010/02/07/clustering-wicket-for-fun-and-profit but
> want to get around the session affinity problem and avoid using the one pass
> rendering strategy.
> There's still some way to go before my implementation could eventually work.
> However I am facing the problem that a critical method in
> AbstractHttpSessionStore is final.
> public ____final____ String getSessionId(Request request, boolean create)
> I am asking you guys if this final could be removed. I don't see much danger
> there or harm that could be done by making this method overridable.
> Currently my approach to clustering is like that:
> For efficiency's sake someone should use sticky sessions.
> Whenever the session changes the delta (only the important parts of the
> session) should be replicated to a memcache instance (other distributed
> storage will work as well).
> When a server dies another server will be called through the load balancer
> and should restore the user's session from memcache.
> I figured out that the best place to restore a previous session would be
> AbstractHttpSessionStore.getSessionId()
> The basic idea is like this:
> MyCustomHttpStoreThatProvidesPrettyFailoverCapabilities.java :-)
> @Override
> public String getSessionId(Request request, boolean create)
> {
> // check if session exists
> String sessionId = super.getSessionId(request, false);
> // no session there, but create required ... this could be a failover
> scenario
> if (sessionId == null && create)
> {
> // save client's requested session id (this should contain the
> id of the lost session before failover)
> WebRequest webRequest = toWebRequest(request);
> String requestedSessionId =
> webRequest.getHttpServletRequest().getRequestedSessionId();
> // create new session
> sessionId = super.getSessionId(request, true);
> // was a previous session id requested?
> if (requestedSessionId != null)
> {
> String oldKey = memcachePrefix + SESSION_PREFIX +
> requestedSessionId;
> FailoverSessionInfo savedState = (FailoverSessionInfo)
> memcache.get(oldKey);
> // check if memcache contains the previous session
> if (savedState != null)
> {
> // store previous session under new session key
> // (currently storing everything as one state
> instance this is very
> // stupid and simple and obviously needs some
> tuning,
> // e.g. storing only the session delta after
> each request, ...)
> memcache.delete(oldKey);
> memcache.set(memcachePrefix + SESSION_PREFIX +
> sessionId, Integer.MAX_VALUE, savedState);
> HttpSession httpSession =
> webRequest.getHttpServletRequest().getSession(false);
> // restore http session from failover storage
> for (Map.Entry<String, Serializable> entry :
> savedState)
>
> httpSession.setAttribute(entry.getKey(), entry.getValue());
> }
> }
> }
> return sessionId;
> }
> So I would really beg you to remove [final] from
> AbstractHttpSessionStore.getSessionId(..) in 1.4.x and 1.5.x :-)
> Best Regards
> Peter
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.