That looks like just what I needed, Thanks David
On Dec 15, 9:17 pm, David Chandler <[email protected]> wrote: > Vince Bonfanti's Deferred.defer() makes using task queues very easy, > as there's only one servlet needed and he's already written it! > There's an example of using it and a reference to the forum thread in > which Vince posted the code here: > > http://turbomanage.wordpress.com/2009/11/20/deferred-defer-is-a-thing... > > HTH, > /dmc > > On Dec 15, 2:23 pm, Rusty Wright <[email protected]> wrote: > > > At this point I'd suggest that you don't do it with GWT; step into the > > wayback machine and write a plain java servlet and do the necessary > > configuration/mapping with your web.xml. Can you say old school? There > > should be plenty of tutorials and samples on the web. > > > I'm thinking that you'd extend javax.servlet.http.HttpServlet and override > > its doGet() method. > > > John VDenleywrote: > > > Wondering if this is now really a GWT question? Anyone got any ideas? > > > > On Dec 14, 10:25 am, John VDenley<[email protected]> wrote: > > >> Thanks JD (slightly weird, I feel like Im writing to myself!) I think > > >> we all understand what task queues are, the problem is how to actually > > >> set up the functionality behind the URL > > > >> I think we are getting close to a simple example, which I will post as > > >> soon as I get this mechanism working. From what I can tell it works > > >> something like this (which Im posing as a series of questions): > > > >> Where should I put the function which extends the HttpServlet (eg > > >> public class MyServletFunction extends HttpServlet {/*do something > > >> useful*/} ) > > >> I'm guessing it should be on the server side (eg as a new file within > > >> com.myappname.server) called MyServletFunctionFile.java? > > >> If so then should this be included somewhere OTHER than in the > > >> myappname.gwt.xml file (eg <servlet path="/MyServletFunction" > > >> class="com.myappname.server.MyServletFunctionFile"/>) > > > >> Im guessing that this would then mean that in theory I could type > > >> inhttp://myappname.appspot.com/MyServletFunctiontoinvokethe "/*do > > >> something useful*/" code? > > > >> Is there anything else I'm meant to define anywhere? Have I totally > > >> misunderstood this process? If so then hopefully what Ive written here > > >> illustrates the problems that some of us are having with getting our > > >> head around some of these "basic" concepts! > > > >> Thanks for everyones input and help so far here guys... > > > >> Cheers, > > >> J > > > >> On Dec 14, 3:00 am, jd <[email protected]> wrote: > > > >>> Hi, task queues are just a way to call a url some time in the future. > > >>> As Jason mentioned above, for a tasks "handler" you should probably > > >>> just create a servlet (extend HttpServlet) because you do not need to > > >>> generate a nice webpage as the result of the call - no one will see > > >>> it. In the HttpServlet.service(...) method write your code to > > >>> actually handle the task making sure that it won't take longer than 30 > > >>> seconds. This method will be called for POSTs or GETs to its url. > > >>> Then you need to define the url that will call this servlet in your > > >>> web.xml file. If you are just using the default queue then you should > > >>> map /_ah/queue/default to your "handler" servlet. > > >>> To execute your task you could either call the url directly in a > > >>> browser, from your GWT client or from other server side code. But you > > >>> probably want to use the TaskQueue to schedule the call for some time > > >>> in the future from some other server side code like within your GWT > > >>> RPC servlet. > > >>> On Dec 14, 4:53 am, John VDenley<[email protected]> wrote: > > >>>> Well put Rusty, thats exactly the frustration im having!!! LOL > > >>>> On Dec 13, 9:42 pm, Rusty Wright <[email protected]> wrote: > > >>>>> What method gets called in your code when your app receives a GET > > >>>>> request? Or a POST request? I think that's what you're looking for. > > >>>>> Unfortunately the documentation for these frameworks sometimes tries > > >>>>> to sugar coat things and hide ("abstract away") these low level > > >>>>> details, or they assume it's obvious how things work, which it may be > > >>>>> to to some but not all of us. > > >>>>> John VDenleywrote: > > >>>>>> LOL - damn... though it shouldnt matter whats being used for the > > >>>>>> front > > >>>>>> end really....maybe Im asking the wrong question!! > > >>>>>> Does anyone else have any idea how to explain what the entry point is > > >>>>>> within the java code, or where the code is that actually executes > > >>>>>> what > > >>>>>> thetaskqueueis supposed to do? Does anyone know how to ask the > > >>>>>> question Im trying to ask?! > > >>>>>> On Dec 13, 8:22 pm, Rusty Wright <[email protected]> wrote: > > >>>>>>> Heh, I'm on the flip side; I don't know anything about GWT. > > >>>>>>> John VDenleywrote: > > >>>>>>>> Thanks for this Rusty, Im not sure I understand all of it right > > >>>>>>>> away > > >>>>>>>> (perhaps with more investigation I will work it out) > > >>>>>>>> However Its worth mentioning that as far as I know Im not using > > >>>>>>>> Spring > > >>>>>>>> or Stripes or Struts (not even sure what any of these are!) > > >>>>>>>> I am using native GWT (v2.0)/GAE(v1.2.8) and using RPC to make > > >>>>>>>> calls > > >>>>>>>> to the server side. > > >>>>>>>> I have tried creating a "public" function in my main java file > > >>>>>>>> (right > > >>>>>>>> above the onModuleLoad() function) as follows: > > >>>>>>>> public void testqueues() > > >>>>>>>> { > > >>>>>>>> Window.alert("hello test queues"); > > >>>>>>>> } > > >>>>>>>> The thinking then being that I might be able to make a call to > > >>>>>>>>http://your-gae-app.appspot.com/testqueuesanditwouldshowthealert > > >>>>>>>> box. (I would like to prove this in the dev environment, but Im not > > >>>>>>>> sure how to do this now that the URL for that is currently > > >>>>>>>>http://localhost:8888/IDeBanet.html/testqueues?gwt.codesvr=192.168.0....) > > >>>>>>>> Its entirely possible that I have totally misunderstood how this is > > >>>>>>>> meant to be working and if so I apologise for asking stupid > > >>>>>>>> questions, > > >>>>>>>> or making incorrect/confusing statements, but it seems theres no > > >>>>>>>> real > > >>>>>>>> way of figuring out this stuff until you just try to implement it! > > >>>>>>>> Ive > > >>>>>>>> learnt a huge amount about web development and in particular > > >>>>>>>> GWT/GAE > > >>>>>>>> over the last 4-5 months!! > > >>>>>>>> Cheers, > > >>>>>>>> J > > >>>>>>>> On Dec 13, 5:46 am, Rusty Wright <[email protected]> wrote: > > >>>>>>>>> I think I got the gist of it. As a test I modified the Stripes > > >>>>>>>>> action bean that handles my first page and added the following to > > >>>>>>>>> its @DefaultHandler method: > > >>>>>>>>> finalQueuequeue= QueueFactory.getDefaultQueue(); > > >>>>>>>>> queue.add(TaskOptions.Builder.url("/zugzug.zug")); // web.xml > > >>>>>>>>> maps *.zug to stripes > > >>>>>>>>> It's adding ataskto thequeue. > > >>>>>>>>> Then I created an action bean for thegaetaskqueueautomaton to > > >>>>>>>>> poke: > > >>>>>>>>> @UrlBinding("/zugzug.zug") > > >>>>>>>>> public class TaskQueueActionBean implements ActionBean { ... > > >>>>>>>>> and its @DefaultHandler method contains: > > >>>>>>>>> @SuppressWarnings("unchecked") > > >>>>>>>>> final List headerNames = > > >>>>>>>>> > > >>>>>>>>> Collections.list(getContext().getRequest().getHeaderNames()); > > >>>>>>>>> this.log.debug("header names: {}", headerNames); > > >>>>>>>>> And then the log received: > > >>>>>>>>> header names: [Content-Type, User-Agent, Referer, Host, > > >>>>>>>>> X-AppEngine-QueueName, X-AppEngine-TaskName, > > >>>>>>>>> X-AppEngine-TaskRetryCount, Content-Length] > > >>>>>>>>> The first time I tried it I forgot to create the corresponding > > >>>>>>>>> jsp view file, zugzug.jsp (which is essentially empty), and > > >>>>>>>>> thetaskqueueautomaton kept retrying because stripes was returning > > >>>>>>>>> an error because the jsp file was missing; lots of those > > >>>>>>>>> log.debug lines in the log file. After I fixed that then it was > > >>>>>>>>> only in there once for each time I went to my first page. > > >>>>>>>>> The first page action bean enqueued thetask, > > >>>>>>>>> thetaskqueueautomaton sent an http request to the url zugzug.zug, > > >>>>>>>>> then the TaskQueueActionBean was invoked and its success caused > > >>>>>>>>> the automaton to dequeue thetask(but not if it returned an error; > > >>>>>>>>> then the automaton retries). > > >>>>>>>>> Rusty Wright wrote: > > >>>>>>>>>> The docs say "The defaultqueuewill call the request handler at > > >>>>>>>>>> the URL > > >>>>>>>>>> /worker ..." So it sounds to me that if you were, forexample, > > >>>>>>>>>> using > > >>>>>>>>>> Spring MVC, and had a Spring controller with > > >>>>>>>>>> @Controller > > >>>>>>>>>> @RequestMapping("/worker") > > >>>>>>>>>> public final class WorkerController { > > >>>>>>>>>> �...@requestmapping(method = RequestMethod.GET) > > >>>>>>>>>> public String handleGetRequest(final ModelMap model) { > > >>>>>>>>>> this.log.debug("called"); > > >>>>>>>>>> return (null); > > >>>>>>>>>> } > > >>>>>>>>>> } > > >>>>>>>>>> then it would call your handleGetRequest() method 5 times a > > >>>>>>>>>> second, by > > >>>>>>>>>> sending an http GET (or POST?) request to your /worker url each > > >>>>>>>>>> time. > > >>>>>>>>>> Similarly, with Stripes (and for Struts 2 probably something > > >>>>>>>>>> similar) it > > >>>>>>>>>> would be something like > > >>>>>>>>>> @UrlBinding("/worker") > > >>>>>>>>>> public class WorkerActionBean implements ActionBean { > > >>>>>>>>>> �...@defaulthandler > > >>>>>>>>>> public Resolution handleRequest() { > > >>>>>>>>>> this.log.debug("called"); > > >>>>>>>>>> return (null); > > >>>>>>>>>> } > > >>>>>>>>>> } > > >>>>>>>>>> I'm returning null because I don't know what thetaskqueuething > > >>>>>>>>>> does > > >>>>>>>>>> with what it gets back (I didn't read much of their docs; to > > >>>>>>>>>> tell the > > >>>>>>>>>> truth, I stopped at that sentence I quoted at the top because it > > >>>>>>>>>> sounds > > >>>>>>>>>> very similar to their cron thing, which docs I did read most > > >>>>>>>>>> of). I'm > > >>>>>>>>>> undoubtedly also lacking the code needed to pull the nexttaskoff > > >>>>>>>>>> the > > >>>>>>>>>> queueand do something with it. > > >>>>>>>>>> I'm assuming that you have some web framework in front of > > >>>>>>>>>> everything and > > ... > > read more » -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.
