Wondering if this is now really a GWT question? Anyone got any ideas?

On Dec 14, 10:25 am, John V Denley <johnvden...@googlemail.com> 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/MyServletFunctionto invoke the "/*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 <jdpatter...@gmail.com> 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<johnvden...@googlemail.com> wrote:
>
> > > Well put Rusty, thats exactly the frustration im having!!! LOL
>
> > > On Dec 13, 9:42 pm, Rusty Wright <rwright.li...@gmail.com> 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 <rwright.li...@gmail.com> 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/testqueuesanditwouldshowthe alert
> > > > >>> 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 <rwright.li...@gmail.com> 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
> > > > >>>>> thus don't need a servlet mapping in your web.xml for the /worker 
> > > > >>>>> url
> > > > >>>>> since the web framework is handling the url mapping.
> > > > >>>>> So they're "pinging" your /worker url using a plain old http 
> > > > >>>>> request to
> > > > >>>>> initiate running eachtask; your controller or action bean is what
> > > > >>>>> performs thetask.  Think of it like you typed in your browser's 
> > > > >>>>> address
> > > > >>>>> boxhttp://your-gae-app.appspot.com/worker?task_queue_params_go_hereor
> > > > >>>>> you used the command line programs cURL or wget.
> > > > >>>>> If I understand this correctly then I would say that their 
> > > > >>>>> sentence I
> > > > >>>>> quoted isn't as clear as it could be.  Given the way it's stated, 
> > > > >>>>> is the
> > > > >>>>> taskqueuereally able to bypass all of the http request processing 
> > > > >>>>> and
> > > > >>>>> directly invoke my handler method?  How would it know which 
> > > > >>>>> class+method
> > > > >>>>> handles that url?  I would think that the servlet container calls 
> > > > >>>>> the
> > > > >>>>> request method, as a result of theirtaskqueueautomaton diddling 
> > > > >>>>> the url.
> > > > >>>>> John VDenleywrote:
> > > > >>>>>> Yes, I would like a "real"exampleof how to do this too, I get 
> > > > >>>>>> that
> > > > >>>>>> we need to use a URL to accept
>
> ...
>
> 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 google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.


Reply via email to