Hi,

Since recently the RequestCycleListeners are executed in reverse order
for #onDetach() and #onException(). I.e. registered first - notified
last.
I'm facing a problem with Session#invalidate(). This method registers
a listener with #onDetach() which actually invalidates the http
session and null-ifies the Session#sessionStore.
In org.apache.wicket.Application.createRequestCycle(Request, Response)
we register a listener which executes
org.apache.wicket.page.IPageManager.commitRequest() at the end of each
request cycle. This listener is setup such way that it is always
executed as last.
The problem is:
- my app calls Session#invalidate() in a callback method (e.g. onClick())
- later when the listeners are executed Session#invalidateNow() and
Session#destroy() are called (so the http session and sessionStore are
destroyed)
- even later the special listener is executed [1] and :
-- it re-creates a new http session !
-- re-uses the same Wicket Session object. See
https://issues.apache.org/jira/browse/WICKET-3690 for a member which
leaked. But it will leak even worse if there is user impl of
WebSession with its own properties.

Am I correct in my investigations ?


1.
PersistentPageManager$PersitentRequestAdapter(RequestAdapter).bind() line: 80   
PersistentPageManager$PersitentRequestAdapter.getSessionEntry(boolean)
line: 339
PersistentPageManager$PersitentRequestAdapter.storeTouchedPages(List<IManageablePage>)
line: 373
PersistentPageManager$PersitentRequestAdapter(RequestAdapter).commitRequest()
line: 185
PersistentPageManager(AbstractPageManager).commitRequest() line: 94     
PageAccessSynchronizer$1(PageManagerDecorator).commitRequest() line: 68 
PageAccessSynchronizer$1.commitRequest() line: 203      
Application$2.onDetach(RequestCycle) line: 1522 
RequestCycleListenerCollection$3.notify(IRequestCycleListener) line: 100        
RequestCycleListenerCollection$3.notify(Object) line: 95        
RequestCycleListenerCollection(ListenerCollection<T>).reversedNotify(Iterator<T>,
INotifier<T>) line: 121
RequestCycleListenerCollection(ListenerCollection<T>).reversedNotify(INotifier<T>)
line: 112
RequestCycleListenerCollection.onDetach(RequestCycle) line: 94  
RequestCycle.onDetach() line: 547       
RequestCycle.detach() line: 479 
RequestCycle.processRequestAndDetach() line: 257        
....

-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

Reply via email to