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
