Re: unwanted DefaultPageManagerProvider
I think we have to improve Application#setPageMangerProvider(): public synchronized final void setPageManagerProvider(final IPageManagerProvider provider) { pageManagerProvider = provider; if (pageManager != null) { synchronized (this) { if (pageManager == null) { pageManager.destroy(); pageManager = null; } } } } WDYT? Sven On 10/25/2013 12:14 AM, uwe schaefer wrote: On 22.10.2013 10:22, Sven Meier wrote: Hi Sven, currently there's no way to change the PageManager once it's fetched in Application#internalGetPageManager(). agreed. Do you have a stacktrace for the code triggering Application.getPageManagerProvider().get() ? Besides devutils I don't see any call to this from Wicket. it is the sessionUnbound method that supposedly was triggered by the container doing its clustering while wicket still initializes; Application:478 public void sessionUnbound(final String sessionId){ internalGetPageManager().sessionExpired(sessionId); ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ } cu uwe - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: unwanted DefaultPageManagerProvider
On 10/25/2013 09:39 AM, Sven Meier wrote: Hi Sven, I think we have to improve Application#setPageMangerProvider(): public synchronized final void setPageManagerProvider(final IPageManagerProvider provider) WDYT? better, but to my understanding, not quite there yet. while that helps cleanly shutting down the unwanted (default) PageManagerProvider, imho, we should make sure, that the user has the chance to register his PageManagerProvider, before the get-call is being issued. in our case, with the above fix, we still have a call originating from sessionUnbound, that tries to work with the default PMP, which then complains about the file/directory he thinks is associated to the session being unbound, does not exist. (because, we dont use the DiskPageManager, duh :) ) how about registering to the container AFTER wicket init() has been executed, so that the application has had the chance to swap the default PMP for some other before it is called first? for a quick workaround we introduced an application state flag being flipped from INITIALIZING to RUNNING at the end of init() and just return from sessionUnbound unless this flag is RUNNING. not quite as elegant - in other words hacky - but works for now. cu uwe - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: unwanted DefaultPageManagerProvider
On 22.10.2013 10:22, Sven Meier wrote: Hi Sven, currently there's no way to change the PageManager once it's fetched in Application#internalGetPageManager(). agreed. Do you have a stacktrace for the code triggering Application.getPageManagerProvider().get() ? Besides devutils I don't see any call to this from Wicket. it is the sessionUnbound method that supposedly was triggered by the container doing its clustering while wicket still initializes; Application:478 public void sessionUnbound(final String sessionId){ internalGetPageManager().sessionExpired(sessionId); ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ } cu uwe - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: unwanted DefaultPageManagerProvider
Hi Uwe, currently there's no way to change the PageManager once it's fetched in Application#internalGetPageManager(). Do you have a stacktrace for the code triggering Application.getPageManagerProvider().get() ? Besides devutils I don't see any call to this from Wicket. Regards Sven On 10/21/2013 06:16 PM, uwe schaefer wrote: On 10/21/2013 09:07 AM, Martin Grigorov wrote: Hi Martin, I hope the ticket will describe better what and the damage is done actually means. sorry if i was unclear. looks like i got lost in the details. the actual damage is: there is a Thread started and associated with a AsynchronousDataStore, which is not used and superseeded during init() with the HttpSession-based DataStore to be actually used. There is no obvious way to get a reference to that thread, so that it cannot be stopped on destruction of the application - thus redeployment gets problematic. cu uwe - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: unwanted DefaultPageManagerProvider
Hi, On Fri, Oct 18, 2013 at 9:50 PM, uwe schaefer u...@codesmell.de wrote: On 18.10.2013 09:03, Martin Grigorov wrote: Hi Martin, Can you give more details about the setup and the problem ? of course. we use two Tomcat6 with clustering enabled (Backup-Manager) with apache in front using sticky sessions. when redeploying, we restart tomcat. Now when one tomcat is restarted and the wicket initializes, there is a time-window in which wicket is not yet fully initialized (and our DataStore is not yet set), yet the application is already bound as an UnbindingListener. This is where we see sessionUnbound being called, which as i mentioned, causes a default datastore (disk) being wrapped in an AsyncDatastore and the damage is done: Application:478 public void sessionUnbound(final String sessionId){ internalGetPageManager().**sessionExpired(sessionId); } Application:1387 pageManager = pageManagerProvider.get(**getPageManagerContext()); DefaultPageManagerProvider:58 if (dataStore.canBeAsynchronous()**) { int capacity = storeSettings.**getAsynchronousQueueCapacity()**; dataStore = new AsynchronousDataStore(**dataStore, capacity); } and then AsynchronousDataStore:97 pageSavingThread.start(); what other info in particular are you looking for? i could create a quickstart and attach it to a jira issue. I hope the ticket will describe better what and the damage is done actually means. I'm not sure whether it is just me (there are no other responses in this thread) but your problem description emphasis more on Wicket's code than on what really is the problem you face. cu uwe --**--**- To unsubscribe, e-mail: users-unsubscribe@wicket.**apache.orgusers-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: unwanted DefaultPageManagerProvider
On 10/21/2013 09:07 AM, Martin Grigorov wrote: Hi Martin, I hope the ticket will describe better what and the damage is done actually means. sorry if i was unclear. looks like i got lost in the details. the actual damage is: there is a Thread started and associated with a AsynchronousDataStore, which is not used and superseeded during init() with the HttpSession-based DataStore to be actually used. There is no obvious way to get a reference to that thread, so that it cannot be stopped on destruction of the application - thus redeployment gets problematic. cu uwe - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: unwanted DefaultPageManagerProvider
Hi, Can you give more details about the setup and the problem ? On Thu, Oct 17, 2013 at 11:35 PM, uwe schaefer u...@codesmell.de wrote: On 14.10.2013 21:41, uwe schaefer wrote: could it also be a racecondition with clustering and public void sessionUnbound(final String sessionId) being called before init() returns? after further investigation it is pretty clear, that the above race condition happens (at least on tomcat6) - so if noone objects, i would hop to jira and create an issue for that. our quick workaround includes ignoring all WebApplicatoin.sessionUnbound(* *String) calls until initialization is complete. cu uwe --**--**- To unsubscribe, e-mail: users-unsubscribe@wicket.**apache.orgusers-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: unwanted DefaultPageManagerProvider
On 18.10.2013 09:03, Martin Grigorov wrote: Hi Martin, Can you give more details about the setup and the problem ? of course. we use two Tomcat6 with clustering enabled (Backup-Manager) with apache in front using sticky sessions. when redeploying, we restart tomcat. Now when one tomcat is restarted and the wicket initializes, there is a time-window in which wicket is not yet fully initialized (and our DataStore is not yet set), yet the application is already bound as an UnbindingListener. This is where we see sessionUnbound being called, which as i mentioned, causes a default datastore (disk) being wrapped in an AsyncDatastore and the damage is done: Application:478 public void sessionUnbound(final String sessionId){ internalGetPageManager().sessionExpired(sessionId); } Application:1387 pageManager = pageManagerProvider.get(getPageManagerContext()); DefaultPageManagerProvider:58 if (dataStore.canBeAsynchronous()) { int capacity = storeSettings.getAsynchronousQueueCapacity(); dataStore = new AsynchronousDataStore(dataStore, capacity); } and then AsynchronousDataStore:97 pageSavingThread.start(); what other info in particular are you looking for? i could create a quickstart and attach it to a jira issue. cu uwe - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: unwanted DefaultPageManagerProvider
On 14.10.2013 21:41, uwe schaefer wrote: could it also be a racecondition with clustering and public void sessionUnbound(final String sessionId) being called before init() returns? after further investigation it is pretty clear, that the above race condition happens (at least on tomcat6) - so if noone objects, i would hop to jira and create an issue for that. our quick workaround includes ignoring all WebApplicatoin.sessionUnbound(String) calls until initialization is complete. cu uwe - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: unwanted DefaultPageManagerProvider
On 14.10.2013 21:10, uwe schaefer wrote: Now for the question: what is the suggested way to register a PageManagerProvider BEFORE anyone asks for it? PS: rather than an initializer being the culprit, could it also be a racecondition with clustering and public void sessionUnbound(final String sessionId) being called before init() returns? cu uwe - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org