If where you have specified log.info("do your stuff here") you intend to
send data back to the client and then loop again and wait for more data I
think you are going to be disappointed. I don't believe any data will be
sent back to the client until your servlet completes. So you'll have to
re-establish a connection every time data gets sent back down.

On Sun, Jan 30, 2011 at 11:20 AM, Artur Downar
<artur.dow...@googlemail.com>wrote:

> Yes, you are right.
> It takes 400-600ms so it costs about an hour of the cpu time per 24hours.
> It is acceptable.
>
>
>  I DO it following way:
>
> Map<Object, ToModemInfoEntity> entity;
>
>
>         try {
>             for (int i=0; i<100; i++) {
>                 entity =  ofy.get(ToModemInfoEntity.class);
>                 if (entity != null && !entity.isEmpty()) {
>
>                     log.info("got data from db, do my stuff here...");
>                 } else {
>                     Thread.sleep(100);
>                 }
>             }
>         }
>
> Can I improove anything else, please ?
>
>
>
>
>
>
>
>
> On Sun, Jan 30, 2011 at 1:36 PM, Didier Durand <durand.did...@gmail.com>wrote:
>
>> PS: you should also combine memcache + ds datastore to reduce cpu.
>>
>> regards
>>
>> didier
>>
>> On Jan 30, 1:10 pm, Artur Downar <artur.dow...@googlemail.com> wrote:
>> > So, you mean polling on the database.
>> >
>> > I wrote:
>> >
>> > try {
>> >             for (int i=0; i<100; i++) {
>> >                 entity = ofy.find(ToModemInfoEntity.class, "whatever");
>> >                 if (entity != null) {
>> >                     log.info("got data from db, do my stuff here...");
>> >                 } else {
>> >                     Thread.sleep(100);
>> >                 }
>> >             }
>> >         }catch (Throwable th) {
>> >             th.printStackTrace();
>> >         }
>> >
>> > It is cpu-time consuming.
>> > It polls for about 11seconds and it takes about 1500ms of the cpu time.
>> > It makes more than 2hours of the CPU time per natural day.
>> >
>> > I can extend the Time.sleep(period) but it still seems unacceptable due
>> to
>> > CPU costs.
>> >
>> > On Sun, Jan 30, 2011 at 8:21 AM, Didier Durand <durand.did...@gmail.com
>> >wrote:
>>  >
>> > > Sorry,
>> >
>> > > hit "send" too quicly
>> >
>> > > b) why don't you do something like this
>> >
>> > > Side reading data:
>> > > ==================
>> >
>> > > do {
>> > >    read new data from ds;
>> > >     if (new data) {
>> > >         mark data as read in ds
>> > >        do what you need
>> > >        return;
>> > >    } else {
>> > >      Thread.sleep(100)
>> > >    }
>> > > } until (running time near 30s)
>> > > if (no new data) {
>> > >    give error message to waiting user
>> > > }
>> >
>> > > Side writing data
>> > > ==================
>> >
>> > > write new data to datastore (with corresponding status showing that
>> > > it's new and not read yet)
>> >
>> > > N.B: the 30s is a hard limit imposed by gae. You've to check for it
>> > > and end gracefully else your servlet will be killed by GAE.
>> >
>> > > regards
>> >
>> > > didier
>> >
>> > > On Jan 30, 8:15 am, Didier Durand <durand.did...@gmail.com> wrote:
>> > > > Hi,
>> >
>> > > > To answer your questions:
>> >
>> > > > a) yes, you can say how long you waits Thread.sleep(millis) where
>> > > > millis says how many milliseconds you want to wait
>> >
>> > > > b) why don't you do something like this
>> >
>> > > > do {
>> > > >     read new data from ds;
>> >
>> > > > }
>> >
>> > > > On Jan 29, 10:38 pm, Stephen Johnson <onepagewo...@gmail.com>
>> wrote:
>> >
>> > > > > At the moment the Channel API is javascript only. There are a lot
>> of
>> > > people
>> > > > > that would like it to be open to other languages for things just
>> like
>> > > you
>> > > > > want to do. You might be able to use something like Rhino to run
>> the
>> > > > > javascript in Java but not sure if that will work. You should take
>> a
>> > > look at
>> > > > > XMPP, it's very simple to have the server send instant messages. I
>> did
>> > > a
>> > > > > quick search for XMPP libraries in Java and here is one I found.
>> I'm
>> > > sure
>> > > > > there are many others. Check outhttp://
>> > > twit88.com/blog/2009/02/17/java-xmpp-client-library/
>> > > > > On Sat, Jan 29, 2011 at 2:07 PM, Artur Downar
>> > > > > <artur.dow...@googlemail.com>wrote:
>> >
>> > > > > > Thank you.
>> >
>> > > > > > I took a brief look on channel API and it seems I it is the
>> thing I
>> > > need.
>> >
>> > > > > > I have a small question.
>> >
>> > > > > > The modem device is a java embedded device and it has no public
>> IP.
>> > > There
>> > > > > > is no javascript on it. Only java.
>> >
>> > > > > > Is it enough for GAE channel API to communicate with it ?
>> >
>> > > > > >   On Sat, Jan 29, 2011 at 9:49 PM, Stephen Johnson <
>> > > onepagewo...@gmail.com
>> > > > > > > wrote:
>> >
>> > > > > >> Sounds like you need more of a Push style. Checkout the Channel
>> API
>> > > or the
>> > > > > >> XMPP api.
>> >
>> > > > > >>    On Sat, Jan 29, 2011 at 1:47 PM, Artur Downar <
>> > > > > >> artur.dow...@googlemail.com> wrote:
>> >
>> > > > > >>>  The external device polls for data from GAE.
>> > > > > >>> It is not specified when the data arrives. To describe it more
>> > > clearly.
>> > > > > >>> The device is a GSM modem device that sends an SMS on the user
>> > > request.
>> >
>> > > > > >>> The user launches a web browser and writes a mobile phone
>> number.
>> > > The
>> > > > > >>> browser sends data to the GAE and the sms should be send
>> > > immediately
>> >
>> > > > > >>> So I cannot specify how long I can wait in Thread.sleep().
>> >
>> > > > > >>> You mention about Objectify. I use that library but I'm quite
>> new
>> > > to it.
>> >
>> > > > > >>>  Does it have the mechanism that works like:
>> >
>> > > > > >>>  process A waits for data until data into database arrives or
>> > > timeout
>> > > > > >>> expires
>> > > > > >>>  process B puts the data into database
>> > > > > >>>  process a continues processing the data inserted by process B
>> >
>> > > > > >>> ?
>> >
>> > > > > >>> On Sat, Jan 29, 2011 at 3:59 PM, Didier Durand <
>> > > durand.did...@gmail.com>wrote:
>> >
>> > > > > >>>> Hi,
>> >
>> > > > > >>>> Forgot: you can use Thread.sleep() to wait (java.lang.Thread
>> is
>> > > also
>> > > > > >>>> part of the JRE)
>> >
>> > > > > >>>> regards
>> >
>> > > > > >>>> didier
>> >
>> > > > > >>>> On Jan 29, 3:35 pm, Didier Durand <durand.did...@gmail.com>
>> > > wrote:
>> > > > > >>>> > Hi,
>> >
>> > > > > >>>> > LinkedBlokingQueue is part of JRE WhiteList:
>> > > > > >>>>http://code.google.com/appengine/docs/java/jrewhitelist.html.
>> So,
>> > > you
>> > > > > >>>> > can use it.
>> >
>> > > > > >>>> > But, I dont see the need. Why don't you just from on the
>> > > datastore on
>> > > > > >>>> > 1 side and read from it on the other. It would be very
>> simple
>> > > and rely
>> > > > > >>>> > on the most basic (i.e solid) mechanism of gae. (I would
>> > > recommend
>> > > > > >>>> > Objectify for ds read/ write)
>> >
>> > > > > >>>> > As you have network round-trips, the read / write time will
>> be
>> > > > > >>>> > negligible even it can seem high compared to an in-memory
>> > > mechanism
>> > > > > >>>> > like a Queue.
>> >
>> > > > > >>>> > regards
>> >
>> > > > > >>>> > didier
>> >
>> > > > > >>>> > On Jan 29, 1:51 pm, arturad <artur.dow...@googlemail.com>
>> > > wrote:
>> >
>> > > > > >>>> > > In my application an embedded device (no public IP)
>> should
>> > > connect
>> > > > > >>>> to
>> > > > > >>>> > > the GAE in order to obtain some data from it. The data
>> are
>> > > provided
>> > > > > >>>> by
>> > > > > >>>> > > the web browser.
>> >
>> > > > > >>>> > > The whole data-passing process looks like:
>> >
>> > > > > >>>> > >                                               web browser
>> ->
>> > > GAE ->
>> > > > > >>>> > > embedded standalone device
>> >
>> > > > > >>>> > > I developed a servlet the device connects to. It issues
>> the
>> > > HTTP
>> > > > > >>>> GET.
>> > > > > >>>> > > On the other side the web browser sends data using
>> standard
>> > > GWT
>> > > > > >>>> > > RemoteServiceServlet.
>> >
>> > > > > >>>> > > In case there is no data for the device the doGet method
>> in
>> > > the
>> > > > > >>>> > > servlet should stop for some seconds until user enters
>> data or
>> > > time
>> > > > > >>>> > > out expires.
>> >
>> > > > > >>>> > > I'm trying to use LinkedBlockingQueue  to pass data
>> between
>> > > two
>> > > > > >>>> > > servlets. It does not work unfortunately. Seems like the
>> GAE
>> > > > > >>>> launches
>> > > > > >>>> > > new JVM for concurrent requests... I pushed the
>> > > LinkedBlockingQueue
>> > > > > >>>> > > into memcache and get it by name from concurrent
>> requests.
>> > > Still
>> > > > > >>>> does
>> > > > > >>>> > > not work. Memcache returns NOTnull. But there are no data
>> in
>> > > the
>> > > > > >>>> > > queue.
>> >
>> > > > > >>>> > > In order to investigate my issue I've made some tests
>> with the
>> > > > > >>>> > > semaphore. Pushed the semaphore to the memcache and made
>> some
>> > > > > >>>> > > concurrent operations ... -> does not work -> one process
>> does
>> > > not
>> > > > > >>>> > > release the other...
>> >
>> > > > > >>>> > > The problem occurs on GAE only. The whole mechanism works
>> on
>> > > the
>> > > > > >>>> > > development server.
>> >
>> > > > > >>>> > > Is there any way to stop/freeze one process (in the doGet
>> > > method in
>> > > > > >>>> > > servlet) and unblock it by another one ?
>> >
>> > > > > >>>> > > Or... Is there any other way to solve my problem ?
>> > > > > >>>> > > Thank you for any suggestions.
>> > > > > >>>> > > Artur
>> >
>> > > > > >>>> --
>> > > > > >>>> 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-java@googlegroups.com.
>> > > > > >>>> To unsubscribe from this group, send email to
>> > > > > >>>> google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com>
>> <google-appengine-java%2bunsubscr...@googlegroups.com<google-appengine-java%252bunsubscr...@googlegroups.com>
>> >
>> > > <google-appengine-java%2bunsubscr...@googlegroups.com<google-appengine-java%252bunsubscr...@googlegroups.com>
>> <google-appengine-java%252bunsubscr...@googlegroups.com<google-appengine-java%25252bunsubscr...@googlegroups.com>
>> >
>> >
>> > > > > >>>> .
>> > > > > >>>> For more options, visit this group at
>> > > > > >>>>http://groups.google.com/group/google-appengine-java?hl=en.
>> >
>> > > > > >>> --
>> > > > > >>> 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-java@googlegroups.com.
>> > > > > >>> To unsubscribe from this group, send email to
>> > > > > >>> google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com>
>> <google-appengine-java%2bunsubscr...@googlegroups.com<google-appengine-java%252bunsubscr...@googlegroups.com>
>> >
>> > > <google-appengine-java%2bunsubscr...@googlegroups.com<google-appengine-java%252bunsubscr...@googlegroups.com>
>> <google-appengine-java%252bunsubscr...@googlegroups.com<google-appengine-java%25252bunsubscr...@googlegroups.com>
>> >
>> >
>> > > > > >>> .
>> > > > > >>> For more options, visit this group at
>> > > > > >>>http://groups.google.com/group/google-appengine-java?hl=en.
>> >
>> > > > > >> --
>> > > > > >>   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-java@googlegroups.com.
>> > > > > >> To unsubscribe from this group, send email to
>> > > > > >> google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com>
>> <google-appengine-java%2bunsubscr...@googlegroups.com<google-appengine-java%252bunsubscr...@googlegroups.com>
>> >
>> > > <google-appengine-java%2bunsubscr...@googlegroups.com<google-appengine-java%252bunsubscr...@googlegroups.com>
>> <google-appengine-java%252bunsubscr...@googlegroups.com<google-appengine-java%25252bunsubscr...@googlegroups.com>
>> >
>> >
>> > > > > >> .
>> > > > > >> For more options, visit this group at
>> > > > > >>http://groups.google.com/group/google-appengine-java?hl=en.
>> >
>> > > > > > --
>> > > > > > 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-java@googlegroups.com.
>> > > > > > To unsubscribe from this group, send email to
>> > > > > > google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com>
>> <google-appengine-java%2bunsubscr...@googlegroups.com<google-appengine-java%252bunsubscr...@googlegroups.com>
>> >
>> > > <google-appengine-java%2bunsubscr...@googlegroups.com<google-appengine-java%252bunsubscr...@googlegroups.com>
>> <google-appengine-java%252bunsubscr...@googlegroups.com<google-appengine-java%25252bunsubscr...@googlegroups.com>
>> >
>> >
>> > > > > > .
>> > > > > > For more options, visit this group at
>> > > > > >http://groups.google.com/group/google-appengine-java?hl=en.
>> >
>> > > --
>> > > You received this message because you are subscribed to the Google
>> >
>> > ...
>> >
>> > 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-java@googlegroups.com.
>> To unsubscribe from this group, send email to
>> google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/google-appengine-java?hl=en.
>>
>>
> --
> 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-java@googlegroups.com.
> To unsubscribe from this group, send email to
> google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=en.
>

-- 
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-java@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