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
