Hi!
One of the main problem with large (huge) web applications is the session
footprint.
While it is nice to have support for multiple browser tabs or windows, it is
otoh pretty memory consuming, because WebApps must maintain their own
'SubSession'. With CODI we provide this for our @WindowScoped,
@ViewAccessScoped
and @ConversationScoped beans.
But even if a page/tab only got opened once and then got closed again very
quickly, we currently still store the WindowContext for this page for as long
as
60 minutes.
So what about adding a small JavaScript which periodically (e.g. all 60
seconds)
'ping' some Servlet or anything else with an AJAX request and increments a
counter in it's WindowContext? Each normal bean access will reset this counter
to 0 within the EditableWindowContext#touch(); If the counter reaches 60, we
can
easily cleanup the WindowContext.
With this little trick we can lower down the standard timeout for
WindowContexts
to a much lower value, e.g. 3 minutes. If there is any window for that context
still open, then we will get the 'ping' which resets the timeout.
The only impact I can think of is if you need to leave the current webapp, do
some work in another one and come back later. This might be solved by storing
some information in a cookie and providing an 'openWindowStore' via memcached
or
any othe cluster mechanism. Or open the target page in a single big iframe...
ideas please ;)
wdyt?
LieGrue,
strub