Last Wednesday, the App Engine team hosted the latest session of its
bimonthly IRC office hours. A transcript of the session and a summary
of the topics covered is provided below. The next session will take
place on Wednesday, September 16th from 9:00-10:00 a.m. PDT in the
#appengine channel on irc.freenode.net.

--SUMMARY-----------------------------------------------------------
- Q: Where can I find information on per-minute and daily quotas,
maximum number of simultaneous requests, etc.? A: The Quotas doc at
http://code.google.com/appengine/docs/quotas.html lists most per-
minute and daily quotas. Task queue quotas and limits are listed in
http://code.google.com/appengine/docs/python/taskqueue/overview.html#Quotas_and_Limits.
You can also check the Quota Details page in the Admin Console to see
quota information for a particular application.  [7:01, 7:03]

- JSF 2.0, ICEFaces 1.8.1 compatibility with App Engine -- several
developers have written posts on using JSF 2.0 with App Engine (see
http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine),
but it appears that ICEFaces is not currently compatible.  [7:04-7:07,
7:11, 7:14-7:15, 7:42, 7:56]

- Tip: one way to optimize your application, especially when you're
working with large entities (i.e. entities with large BLOB properties)
is to create separate entities, placing the BLOB data in its own
entity and referencing this from the original entity. This way,
retrieving the entity doesn't necessarily pull down the large BLOBs,
although they're available should you need them later -- think of a
listing of file metadata (i.e. name, size, hash) where the actual file
is only loaded when the user clicks on a particular filename. [7:19,
7:21]

- http://code.google.com/p/googleappengine/issues/detail?id=1444
strikes again -- (Java) deployment fails because of a vague "more than
100 URLMap entries in application configuration" error. We'll work on
trying to reproduce this internally, but if you're seeing this, please
create a new thread in the group with the contents of your web.xml and
appengine-web.xml file and the number of JSPs and static files your
application includes. [7:22, 7:26, 7:28, 7:36-7:38, 7:41]

- Q: Is there support for HTTPS on custom domains? A: We're waiting on
broader support for SNI before we implement this. [7:26, 7:28, 7:30]

- If your application experiences a denial of service attack, your
application may stop serving if requests come in at 500 qps or above,
the request limit for applications with billing enabled. Currently,
you can filter requests by IP address if an attacker is primarily
using one or several machines. The team is planning a better API for
dealing with potential attacks, but unfortunately it wasn't
prioritized highly enough to make it on the latest roadmap. [7:35,
7:40, 7:49]


--FULL TRANSCRIPT---------------------------------------------------
[7:00pm] Jason_Google: Welcome Everyone! I'll be here for the next
hour or so to answer any App Engine questions, so don't hold back.
[7:00pm] joakime:
[7:01pm] kaminoo: First time for me here, do we just fire off our
questions?
[7:01pm] Jason_Google: Yep, fire away.
[7:01pm] kaminoo: Wanted to ask about Task Queues
[7:01pm] joakime: Java - where can I find information about
Simultaneous Request limits and quota details?  i've been hitting it
recently. even tho i have a $20 budget set and less than 1%
utilization on all other quota constrained stuff.
[7:03pm] maxoizo: Hi Jason! Can google team update offline docs with
actual documentation? (last update May 8, 2009).
[7:03pm] kaminoo: Python: Task Queues. Me and some other guys have
posted a lot of bugs we have found in the queue system. My bugs in
particular have been more than a month there, not even acknowledge. Do
we bother keep testing it? Are we doing a good job at it? Will we have
an answer?
[7:03pm] Jason_Google: joakime: It looks like
http://code.google.com/appengine/docs/python/taskqueue/overview.html#Quotas_and_Limits
is the only thing that's available for now.
[7:03pm] Jason_Google: maxoizo: Thanks for the suggestion. I'll try to
do this for you soon, hopefully before the end of the week. Adding it
to my to-dos right now.
[7:04pm] maxoizo: 2Jason_Google: tnx!
[7:04pm] guest07: i used the dev server for java
[7:04pm] Jason_Google: kaminoo: Yes, please keep filing your bugs.
We're not doing the best job acknowledging them on the public tracker,
but we are tracking them internally.
[7:04pm] guest07: and it seems that appengine doesn't support jsf 1.2
[7:05pm] gae-peon: ?
[7:05pm] Jason_Google: guest07: Have you seen
http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?
[7:05pm] kaminoo: Jason_Google: Great to know. The feature is GREAT.
But unusable with the current problems. Plus, we had a lot of
suggestions to make it even better. Hopefully we'll see some updates
soon enough. tnx!
[7:06pm] Jason_Google: guest07: Which links to
https://sites.google.com/a/wildstartech.com/adventures-in-java/Java-Platform-Enterprise-Edition/JavaServer-Faces/sun-javaserver-faces-reference-implementation/configuring-jsf-20-to-run-on-the-google-appengine
[7:06pm] gae-peon: Is 1.2.5 coming soon?
[7:06pm] Jason_Google: kaminoo: Sure thing, and thanks for sending
your feedback. Please keep doing so and encourage other developers to
star the issues that you're reporting.
[7:06pm] Jason_Google: gae-peon: Yes, pretty soon.
[7:07pm] guest07: java.lang.AbstractMethodError:
javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/
ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
[7:07pm] joakime: Jason_Google: any news on Tasks / Queues / JMS-like
apis for us on Java?
[7:07pm] guest07: that is the error message from the dev server
[7:08pm] gae-peon: Will there be better documentation on capability
module in 1.2.5?
[7:08pm] Jason_Google: joakime: Task Queues should be included in the
next Java release.
[7:08pm] LenT: For Java, is there any way with JDO, JPA or low level
API to get the count of the number of entities of a kind if it is over
1000?  In development environment, I get the right answer (5002) but
in production I get 1000.
[7:08pm] gae-peon: I mean google.appengine.api.capabilities...
[7:09pm] Jason_Google: guest07: I haven't tried it myself, but I
pointed the link out since other developers have seemingly had better
luck getting it to run on App Engine. If you're having problems, I
suggest pasting your stack trace into a new thread in the discussion
group in case another developer has run into the same problem. And if
I find an answer, I'll update the wiki page I linked to earlier.
[7:11pm] Jason_Google: LenT: For now, I don't believe so. The
disparity between the production and local environments is a bug.
Please feel free to file a new report in our tracker.
[7:11pm] objectuser: guest07: i've not tried 1.2 but i have jsf 2.0
working
[7:11pm] Jason_Google: LenT: Have you tried using an Extent in JDO?
[7:11pm] objectuser: the google group has a link of someone with a
very good post on how to set it up
[7:11pm] objectuser: not sure if it has 1.2-specific info though
[7:12pm] joakime: Jason_Google: any possibility that future Downtime
notifications (in the rather handy google-appengine-downtime group)
will include Java details for the CapabilitySet and
CapabilityDisabledError recommendations?
[7:12pm] objectuser: but jsf 2.0 is better.
[7:12pm] Jason_Google: objectuser: Is the link in the Will it Play in
App Engine wiki? If not, go ahead and send it to me and I'll add it.
[7:12pm] gae-peon: Anyone know a good way to handle counters (not
necessarily sharded) using tasks that doesn't require memcaching for
dirty flag?  Big problem is the required idempotency of task handlers.
[7:12pm] objectuser: i'll see if i can find it
[7:13pm] Jason_Google: joakime: I noticed this yesterday myself. I'll
add another to-do.
[7:14pm] LenT: I haven't tried using Extent in JDO as I'm currently
using JPA but I will look into it.  I read in some post that even if
we ask for specific fields in a query, appengine actually fetches all
the fields of a kind, is this true?
[7:14pm] objectuser: JSF thread:
http://groups.google.com/group/google-appengine-java/browse_thread/thread/5251d6add8373a88/1eaf97a9d2be5b04
[7:14pm] objectuser: specific link of coolness:
https://sites.google.com/a/wildstartech.com/adventures-in-java/Java-Platform-Enterprise-Edition/JavaServer-Faces/sun-javaserver-faces-reference-implementation/configuring-jsf-20-to-run-on-the-google-appengine
[7:15pm] guest07: my problem is that i am using icefaces 1.8.1 and
there is a jsf 1.2 dependency
[7:15pm] Jason_Google: LenT: It will fetch all fields in the default
fetch group, which includes all core types including strings, dates,
and numbers. You can add lists and user-defined types to the default
fetch group explicitly.
[7:15pm] kaminoo: Jason_Google: Could the roadmap be updated? I would
love to know on what you are working on, when are more things coming
to Labs, and when do you plan to launch Task Queues out of a beta
[7:15pm] Jason_Google: objectuser: Thanks
[7:15pm] guest07: objectuser: thanks I will look at the posts
[7:16pm] joakime: kaminoo: is there a "appengine labs" project
floating around somewhere? ooh.
[7:16pm] kaminoo: joakime: Task Queue is
[7:16pm] Jason_Google: kaminoo: The roadmap isn't updated very often
-- a few times a year. We updated it in June, I believe. We'll remove
things from the roadmap as new features are launched, but it may be a
few more months before we revise it again.
[7:17pm] objectuser: no problem.  and if it's a possibility (i realize
there are often other issues), JSF 2.0 was largely backward compatible
for me (was coming from myfaces 1.1) and it has all of the annotation
goodness as well as facelets
[7:17pm] kaminoo: Jason_Google: tnx
[7:17pm] Jason_Google: kaminoo: But there's a lot of cool stuff on
there as it is.
[7:17pm] guest07: i already setup my vps on rackspace, but if GAE
works then I might switch over
[7:19pm] LenT: Jason_Google: thanks for the information.  I read in
another postings that if an kind includes a blob field that if the
blob was separated out into another kind that updates on the original
kind would be faster since all fields are updated.  Is this still the
case if the entity the blob was separated out into is owned by the
main entity?
[7:20pm] joakime: Jason_Google: how is the limit on urls counted? (I
keep hitting a warning on 100 url limit on deploy)  is there docs
somewhere detailing it?  recommendations on working with/around it?
[7:20pm] guest07: objectuser: i am playing around with the devserver
right now.  I will let you know if I have any success
[7:21pm] Jason_Google: LenT: Yes, that's a general best practice,
especially if your blobs are large.
[7:21pm] Jason_Google: joakime: Sorry, which limit are you hitting?
[7:22pm] joakime: There's a warning on deploy (from my workstation to
gae server) that the app cannot be deployed due to having more than
100 urls.
[7:22pm] LenT: Jason_Google: thanks.  I just wanted to make sure that
the entity that the blob is in wouldn't get updated due to cascading
when the main entity is updated (unless the blob entity is actually
loaded and updated).
[7:22pm] Jason_Google: joakime: Ah, I see. There was a thread on this
in the discussion group at one point. Let me see if I can find it.
[7:22pm] ceej_: any reason why
http://code.google.com/appengine/docs/python/xmpp/overiew.html#Receiving_Instant_Messages
is down ?
[7:22pm] joakime: so i find myself juggling servlets, servlet-
mappings, making new dispatch servlets, etc ...
[7:23pm] Jason_Google: ceej_: Was it ever up? XMPP for Python hasn't
been released.
[7:24pm] ceej_: O....you should disable the link on
http://code.google.com/appengine/docs/users.htm confusing
[7:26pm] ceej_: can you have https for your own domain now?
[7:26pm] gae-peon: What does it mean that there's a limit of 100
URL's?  Is that a Java thing?  If not, do you mean 100 routes in an
application?
[7:26pm] Jason_Google: ceej_: No, not yet.
[7:27pm] ceej_:  is there a road map for it?
[7:28pm] Jason_Google: gae-peon: You can run into a "Found more than
100 URLMap entries" error in Java if you have too many <servlet-
mapping> elements in your web.xml file. I'm trying to see what else
could cause this error.
[7:28pm] joakime: Jason_Google: that can't be right.  i have 4
servlets + 4 servlet mappings and i hit that regularly.
[7:28pm] Jason_Google: ceej_: No since it's largely outside of our
control. Waiting on more SNI adoption.
[7:28pm] gae-peon: So this servlet-mapping issue won't crop up in
python apps?
[7:28pm] Jason_Google: joakime: Right, so there must be another issue.
[7:29pm] Jason_Google: gae-peon: I haven't seen this in Python, no.
[7:29pm] guest07: let me try jsf 2.0 api and impl in dev
[7:30pm] joakime: Jason_Google: this one?
http://groups.google.com/group/google-appengine/browse_thread/thread/54860ad2b058f54e/66a6ae2df9f93e74?q=urlmap+entries#66a6ae2df9f93e74
[7:30pm] kaminoo: Jason_Google: Could you explain why https for our
own domains it's outside GAE control? SNI stands for what? Sorry,
don't know
[7:30pm] Jason_Google: joakime: That's one of them. I'm looking for
one with more content.
[7:31pm] joakime: Jason_Google: there's Issue 1444 as well. but no
real details. just a vague mention of a conversation on IRC. (heh)
[7:31pm] jcgregorio: kaminoo: 
http://en.wikipedia.org/wiki/Server_Name_Indication
[7:31pm] Jason_Google: kaminoo: This is largely outside the realm of
my expertise, but Wikipedia has a pretty good description:
http://en.wikipedia.org/wiki/Server_Name_Indication. If you look
through our past transcripts, you'll find more information, since this
gets raised quite a bit.
[7:32pm] Jason_Google: Ah, Joe beat me to it.
[7:32pm] jcgregorio:
[7:32pm] kaminoo: ha!, tnx both of you, I'll look into the scripts
then...
[7:33pm] Jason_Google: joakime: How many static files does your
application have?
[7:33pm] joakime: 1 html. 1 image. and about a dozen files generated
from a GWT compile.
[7:34pm] joakime: (the GWT compile generates a .js and many cryptic
files with long hex codes for names)
[7:34pm] joakime: no jsps
[7:35pm] gae-peon: Jason, are there tests for the appengine SDK?
[7:35pm] maxoizo: Jason, my friend recieved this email http://dpaste.com/88952/
for him online project. What advice would you, if this project will be
hosted on AppEngine? Is there some progress in your "firewall", or are
still at the level of discussion?
[7:36pm] Jason_Google: joakime: How many is "many"?
[7:37pm] Jason_Google: gae-peon: All the code that's available now is
in the Google Code project at 
http://code.google.com/p/googleappengine/source/browse/
[7:37pm] joakime: Jason_Google: $ find . -type f | wc -l      (33)
[7:37pm] joakime: not that many.
[7:38pm] joakime: Jason_Google: i've traced the jetty webappcontext,
plus configs, along with mappings, jetty level handlers and filters
(as present in the dev server) and at most can only come up with 51
possible URL paths.
[7:38pm] joakime: <-- works for Webtide (now Intalio) i'm intimately
familiar with Jetty.
[7:38pm] gae-peon: jason: I had already looked through the SDK but
couldn't find any testing files.  Do you have separate test files that
just aren't checked in to the open source repo?
[7:40pm] Jason_Google: maxoizo: Google's back-end has some protections
in place -- e.g. your application likely won't go offline -- but you
will still be charged for the extra resource usage. The team is
planning a better API for dealing with potential attacks, but
unfortunately it wasn't prioritized highly enough to make it on the
latest roadmap.
[7:40pm] LenT: In a posting "JDO request IN" topic in GAE Java group
(http://groups.google.com/group/google-appengine-java/browse_thread/
thread/b91fd5f80c1b1f7/b5982556e9662622?hl=en#b5982556e9662622), a
datanucleus person said that IN clause is supported at least at the
datanucleus level.  Is this supported in JDO with GAE?  If so, is it
supported in JPA?
[7:41pm] Jason_Google: joakime: Out of curiosity, do you have an entry
in your appengine-web.xml file specifying which files are static and
which are resource? (By default, all files are uploaded as both static
and resource).
[7:41pm] joakime: interesting. no. no i dont. but i will shortly.
[7:42pm] pct: hello,
[7:42pm] Jason_Google: LenT: I don't know the JPA syntax, but in JDO,
you can use .contains. So if you have a list of Strings, you can do
something like ... "myList.contains(stringParam)"
[7:42pm] Jason_Google: in your queries
[7:42pm] Jason_Google: pct: Hi
[7:42pm] guest07: so close, but icefaces 1.8.1 with jsf 2.0 is still
experimental
[7:42pm] guest07: http://www.icefaces.org/JForum/posts/list/14029.page
[7:43pm] pct: I've got a GAE WARNING msg: urlfetch_stub.py:268]
Stripped prohibited headers from URLFetch request: ['Content-Length',
'Host']
[7:43pm] Jason_Google: joakime:
http://code.google.com/appengine/docs/java/config/appconfig.html#Static_Files_and_Resource_Files
I don't know if that will help, but I'd be very interested in the
result...
[7:43pm] objectuser: guest07: bummer ... and you need some of the
icefaces components i take it?  makes sense.
[7:43pm] joakime: Jason_Google: thanks. i found that a smidgen of a
second before you pasted it.
[7:43pm] pct: could someone give me suggestions?
[7:43pm] joakime: Jason_Google: I'll have to get back to you during
the end of month chat. (promise)
[7:44pm] pct: app engine ver: 1.2.4
[7:44pm] Jason_Google: pct: I'm not much of a Python guy,
unfortunately. Are you trying to set these headers yourself?
[7:44pm] maxoizo: 2Jason: Tnx. Unfortunately application will go
offline, cos attack more then 500req/min...
[7:44pm] pct: Jason_Google:
[7:45pm] objectuser: LenT: i was interested in the answer to that as
well but haven't tried it ... and didn't know if it would be done in
the datastore or in the JDO framework.  it sure seems like an "in"
query, which, i think, means it has to be done in JDO which means it's
the same as running several queries, one for each element in the "in"
list.  happy to be wrong though.
[7:45pm] joakime: Jason_Google: one last question, any plans for some
sane UrlFetch performance improvements?  (like fire-n-forget, or
queued up and bulk http/1.1 pipelining)?  (need that for integrating
with things like Apple's Push Notification servers)
[7:45pm] maxoizo: * 500 req/sec
[7:45pm] Jason_Google: pct: According to the docs, you can't set these
headers yourself: 
http://code.google.com/appengine/docs/python/urlfetch/overview.html#Request_Headers
[7:46pm] kaminoo: interested in joakime question too
[7:46pm] Jason_Google: joakime: Task queues are coming for Java soon,
which means you won't have to do all of your URL Fetch calls in a
single handler. That should help there.
[7:46pm] guest07: objectuser: maybe in time
[7:47pm] Jason_Google: joakime: Also, the Python API has asynchronous
URL Fetch, which should be coming to Java soon, hopefully.
[7:47pm] joakime: cool.
[7:47pm] maxoizo: 2Jason: any plans for 24/7 support?
[7:47pm] joakime: what about http/1.1 pipelining many requests to a
single host?
[7:48pm] LenT: objectuser:  I also hope that is being done in the
datastore as well and hope that it is also supported in JPA.
[7:49pm] Jason_Google: maxoizo: Yes, unfortunately. The servers aren't
actually going down but the DOS protection kicks in at that point and
your app will stop serving requests. I'll look into what can be done
about this more, but unfortunately, I don't think I have the best
answer for you right now.
[7:49pm] Jason_Google: maxoizo: No 24/7 support for the time being.
I'm all you've got.
[7:50pm] pct: Jason_Google: thanks
[7:50pm] Jason_Google: joakime: Not sure about that one in particular.
Sounds like a feature request for the issue tracker.
[7:50pm] joakime: Jason_Google: look into the QoSFilter and DosFilter
on the Jetty7 codebase. (they can likely be backported to Jetty 6
easily enough)
[7:51pm] maxoizo: 2Jason
[7:51pm] joakime: Jason_Google: never mind. they were backported into
6.1.19 it seems.
[7:52pm] Jason_Google: joakime: If you don't have a chance to try the
static file trick before the end of the session, please post a new
question in the group. Your case sounds like one of the most extreme,
since you don't have very many mappings or static files. Hopefully
that will help us track down the source of this issue.
[7:54pm] maxoizo: 2Jason: Can you email me, when you found best answer
for my question? (m...@oizo.biz)
[7:55pm] Jason_Google: maxoizo: I'm terrible at email.  I'd prefer if
you post in the group instead. I check that daily, and that way it
won't slip off my plate.
[7:56pm] guest07: 2Jason: Seems icefaces 1.8.1 w/jsf 1.2 or jsf 2.0 is
not compatible with gae
[7:57pm] maxoizo: 2Jason: ok, thx. I'll create a group.
[7:57pm] Jason_Google: guest07: I was waiting to hear back on IceFaces
compatibility. Have you tried any other versions?
[7:57pm] Jason_Google: maxoizo: Thank you.
[7:57pm] guest07: no 1.8.1 is their latest release
[7:58pm] rsaccon: Jason_Google: has anything changed in regard to XMPP
BOSH ? Now that wave has been announced and subpub server-server
thing, a GAE based comet-client-endpoint solution would be highly
desireable.
[7:58pm] jcgregorio: joakime: pipelining is fairly hard to do and the
fact that it could only be used in a tiny fraction of all requests
means there isn't much chance of it getting done
[7:59pm] guest07: also some nice features of icefaces like serverpush
have to be disabled
[8:00pm] guest07: 2jason: I can send an email about this to you if you
need it
[8:01pm] Jason_Google: rsaccon: Getting outside my comfort area
again.  The point of PubSubHubbub is to reduce the need for long-lived
requests. But XMPP support is coming, as indicated on our roadmap.
[8:01pm] maxoizo: Jason: can google team documented "capabilities
API"?
[8:02pm] Jason_Google: maxoizo: I'll follow up on this too.
[8:02pm] Jason_Google: I don't know what the current plans are.
[8:02pm] Jason_Google: OK Everyone. Thanks for another great Chat
Time. I'll be posting the transcript and a summary to the discussion
groups shortly. The next session will be in 2 weeks, Sep. 16 from 9-10
a.m. PDT.
--~--~---------~--~----~------------~-------~--~----~
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