Here's my write up: http://software.danielwatrous.com/software-engineering/wicket-gae-automatic-reload
I'm not sure if I can push directly into wicketstuff, but I'm happy to try. You can grab the source from my site and put it in there. You may even have a more clever way to composing things. Daniel On Tue, Feb 7, 2012 at 12:17 PM, Kayode Odeyemi <[email protected]> wrote: > Glad you got it working Daniel, as Martin mentioned earlier, I'll > appreciate if you can contribute this to existing GaeInitializer or > somewhere comfortable with the full code so it can be valuable to us all. > > Thanks > > On Tue, Feb 7, 2012 at 5:31 PM, Daniel Watrous > <[email protected]>wrote: > >> I finally got it working. Here's the modified function: >> >> public boolean add(IModifiable modifiable, IChangeListener >> listener) { >> // TODO Auto-generated method stub >> checkResources(); >> HashSet<IChangeListener> listenerSet = new >> HashSet<IChangeListener>(); >> Set<IChangeListener> listeners = >> listenersMap.putIfAbsent(modifiable, listenerSet); >> if (listeners != null) { >> return listeners.add(listener); >> } else return listenerSet.add(listener); >> } >> >> I'm not sure if that's a good approach or not, but it works for me and >> that's fantastic. >> >> Daniel >> >> On Tue, Feb 7, 2012 at 9:30 AM, Daniel Watrous <[email protected]> >> wrote: >> > So I was just looking at what I sent along and it seems that >> > putIfAbsent(modifiable, new HashSet<IChangeListener>()) should return >> > the value component, which should be the new HashSet<IChangeListener>. >> > Even if the key modifiable already exists, it should return the >> > previously created HashSet<IChangeListener>. >> > >> > I'm confused that listener is coming back null. >> > >> > Daniel >> > >> > On Tue, Feb 7, 2012 at 9:21 AM, Daniel Watrous <[email protected]> >> wrote: >> >> That helped. I'm getting really close. >> >> >> >> I'm now getting a null pointer exception in this function >> >> >> >> public boolean add(IModifiable modifiable, IChangeListener >> listener) { >> >> // TODO Auto-generated method stub >> >> checkResources(); >> >> Set<IChangeListener> listeners = >> listenersMap.putIfAbsent(modifiable, >> >> new HashSet<IChangeListener>()); >> >> return listeners.add(listener); >> >> } >> >> >> >> listeners is null. >> >> >> >> I noticed that start(Duration pollFrequency) in GaeModificationWatcher >> >> was never getting called, so I updated my WicketApplication to set it >> >> like this: >> >> >> >> IModificationWatcher watcher = new >> GaeModificationWatcher(); >> >> watcher.start(Duration.ONE_SECOND); >> >> getResourceSettings().setResourceWatcher(watcher); >> >> >> >> But that didn't help my problem. I'm still trying to follow >> >> >> http://agilewombat.blogspot.com/2010/01/wicket-on-google-app-engine.html >> >> >> >> Any pointers? >> >> >> >> Thanks, >> >> Daniel >> >> >> >> On Tue, Feb 7, 2012 at 8:42 AM, Martin Grigorov <[email protected]> >> wrote: >> >>> Try with java.util.Map.Entry >> >>> >> >>> On Tue, Feb 7, 2012 at 5:39 PM, Daniel Watrous < >> [email protected]> wrote: >> >>>> I've now created a class MyRequestCycleListener extends >> >>>> AbstractRequestCycleListener. >> >>>> >> >>>> I'm having a little trouble building class GaeModificationWatcher >> >>>> implements IModificationWatcher. I've tried following this example: >> >>>> >> http://agilewombat.blogspot.com/2010/01/wicket-on-google-app-engine.html >> >>>> >> >>>> to create the public void checkResources() function, but I'm not sure >> >>>> what Entry class to import. I have tried importing these two Entry >> >>>> classes: >> >>>> org.apache.wicket.util.collections.IntHashMap.Entry >> >>>> import >> com.google.appengine.repackaged.com.google.common.collect.Multiset.Entry >> >>>> >> >>>> It seems no matter which Entry class I import I get errors like: >> >>>> >> >>>> Multiple markers at this line >> >>>> - Entry cannot be resolved to a type >> >>>> - The constructor >> >>>> >> HashSet<Entry<IModifiable,Set<IChangeListener>>>(Set<Map.Entry<IModifiable,Set<IChangeListener>>>) >> >>>> is >> >>>> undefined >> >>>> - Incorrect number of arguments for type IntHashMap.Entry; it >> cannot >> >>>> be parameterized with arguments <IModifiable, >> >>>> Set<IChangeListener>> >> >>>> >> >>>> Thanks for any pointers. >> >>>> >> >>>> Daniel >> >>>> >> >>>> >> >>>> On Tue, Feb 7, 2012 at 7:07 AM, Martin Grigorov <[email protected]> >> wrote: >> >>>>> On Tue, Feb 7, 2012 at 3:53 PM, Daniel Watrous < >> [email protected]> wrote: >> >>>>>> Thanks Martin, >> >>>>>> >> >>>>>> I did make that much progress yesterday after sending this, but I >> >>>>>> can't figure out how to get the Application inside the >> onBeginRequest >> >>>>>> method that I override. In the other examples they call >> >>>>>> getApplication() >> >>>>>> >> >>>>>> @Override >> >>>>>> protected void onBeginRequest() { >> >>>>>> if >> (getApplication().getConfigurationType().equals(Application.DEVELOPMENT)) >> >>>>>> { >> >>>>>> final GaeModificationWatcher resourceWatcher = >> >>>>>> (GaeModificationWatcher) getApplication() >> >>>>>> .getResourceSettings().getResourceWatcher(true); >> >>>>>> resourceWatcher.checkResources(); >> >>>>>> } >> >>>>>> } >> >>>>>> >> >>>>>> How can I get the Application object? >> >>>>> >> >>>>> Application.get() >> >>>>> >> >>>>>> >> >>>>>> Daniel >> >>>>>> >> >>>>>> On Mon, Feb 6, 2012 at 11:43 PM, Martin Grigorov < >> [email protected]> wrote: >> >>>>>>> Hi, >> >>>>>>> >> >>>>>>> On Tue, Feb 7, 2012 at 1:32 AM, Daniel Watrous < >> [email protected]> wrote: >> >>>>>>>> Hi, >> >>>>>>>> >> >>>>>>>> I'm following up on a previous thread that's still unresolved. I >> would >> >>>>>>>> like GAE to automatically reload my HTML when I save changes. >> Classes >> >>>>>>>> are reloaded when I save (compile) them, but I have to restart >> each >> >>>>>>>> time for HTML changes. >> >>>>>>>> >> >>>>>>>> There are some old articles that show how to do this, but they >> deal >> >>>>>>>> with older versions of Wicket and GAE. For example: >> >>>>>>>> >> http://agilewombat.blogspot.com/2010/01/wicket-on-google-app-engine.html >> >>>>>>>> >> http://apache-wicket.1842946.n4.nabble.com/How-can-I-reload-HTML-in-app-engine-td3005241.html >> >>>>>>>> >> http://code.google.com/p/kickat26/source/browse/trunk/src/de/kickat26/ui/wicket/GAEModificationWatcher.java >> >>>>>>>> >> >>>>>>>> Those suggest creating a class MyWebRequestCycle extends >> >>>>>>>> WebRequestCycle, but wicket 1.5 doesn't have WebRequestCycle. >> >>>>>>>> >> >>>>>>>> How can I accomplish this same thing in the current version of >> wicket? >> >>>>>>> >> >>>>>>> application.getRequestCycleListeners().add(new >> MyRequestCycleListener()) >> >>>>>>> >> >>>>>>> class MyRequestCycleListener extends AbstractRequestCycleListener { >> >>>>>>> // override the method you need here >> >>>>>>> } >> >>>>>>> >> >>>>>>> Once you have it you can contribute it to gae-initializer project >> so >> >>>>>>> other people can re-use it and improve it. >> >>>>>>> >> >>>>>>>> >> >>>>>>>> Daniel >> >>>>>>>> >> >>>>>>>> >> --------------------------------------------------------------------- >> >>>>>>>> To unsubscribe, e-mail: [email protected] >> >>>>>>>> For additional commands, e-mail: [email protected] >> >>>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> -- >> >>>>>>> Martin Grigorov >> >>>>>>> jWeekend >> >>>>>>> Training, Consulting, Development >> >>>>>>> http://jWeekend.com >> >>>>>>> >> >>>>>>> >> --------------------------------------------------------------------- >> >>>>>>> To unsubscribe, e-mail: [email protected] >> >>>>>>> For additional commands, e-mail: [email protected] >> >>>>>>> >> >>>>>> >> >>>>>> >> --------------------------------------------------------------------- >> >>>>>> To unsubscribe, e-mail: [email protected] >> >>>>>> For additional commands, e-mail: [email protected] >> >>>>>> >> >>>>> >> >>>>> >> >>>>> >> >>>>> -- >> >>>>> Martin Grigorov >> >>>>> jWeekend >> >>>>> Training, Consulting, Development >> >>>>> http://jWeekend.com >> >>>>> >> >>>>> --------------------------------------------------------------------- >> >>>>> To unsubscribe, e-mail: [email protected] >> >>>>> For additional commands, e-mail: [email protected] >> >>>>> >> >>>> >> >>>> --------------------------------------------------------------------- >> >>>> To unsubscribe, e-mail: [email protected] >> >>>> For additional commands, e-mail: [email protected] >> >>>> >> >>> >> >>> >> >>> >> >>> -- >> >>> Martin Grigorov >> >>> jWeekend >> >>> Training, Consulting, Development >> >>> http://jWeekend.com >> >>> >> >>> --------------------------------------------------------------------- >> >>> To unsubscribe, e-mail: [email protected] >> >>> For additional commands, e-mail: [email protected] >> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > > > -- > Odeyemi 'Kayode O. > http://www.sinati.com. t: @charyorde --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
