Re: [appengine-java] Re: Spring application context initialization on every request

2010-01-04 Thread aswath satrasala
Hello,
My application is Struts2 based

I have tried setting up the cron job every minute.  But, still it does not
help.
The response time was still 20sec for the first time.

-Aswath

On Mon, Jan 4, 2010 at 10:00 AM, zhiw...@gmail.com zhiw...@gmail.comwrote:

 have a look at this link:

 http://groups.google.com/group/google-appengine-java/browse_thread/thread/603cc766d1e1c3d4/88913abfcb6351e8

 On Dec 31 2009, 6:17 pm, Naim mdnh...@gmail.com wrote:
  Hi,
 
  I have deployed a small application on appengine using Spring
  framework.
  But I have noticed, if my app does not get any request for a after
  period of time (10 mins perhaps), all the initialization done by
  Spring vanishes. To serve the next request, it initializes the Spring
  application context and all the servlet contexts.
  At the moment, I am preventing this by running a cron that makes a
  request to my app every minute.
 
  Is there any other way? Am I missing something?
  __
  Naim
  mdnh...@gmail.com

 --

 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.comgoogle-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-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.




[appengine-java] custom vs. generated keys / storage?

2010-01-04 Thread phraktle
Hi,

I'm generating my own entity keys, with new Entity(Foo, myId). I
noticed that in the DataStore viewer, these entities still seem to
have a default key:

Decoded entity key: Foo: name=myId
Entity key:
ahFzY2FyYWJyZWNvbW1lbmRlcnJACxIVUHJvZHVjdFJlY29tbWVuZGF0aW9uIiU1OTg1MEMzMzMwOUZGRjV8MjAxMDAxMDQwMTAzNTN8cHJvZF8wDA

So the Entity key here still seems to be generated by GAE. Why is
this needed? I do have a primary key already. So does it get stored as
simply another indexed column? Does this impact storage space too? I
don't need the GAE entity key at all, and would prefer not having to
pay for its storage either :)

Thanks,
  Viktor

--

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.




[appengine-java] Re: Querying by Category class

2010-01-04 Thread Itzik Yatom
I have tried the simplest approach and it works:

query.setFilter(tags == ' + aTagValue + ' );

On Jan 3, 5:05 pm, Itzik Yatom itzik...@hotmail.com wrote:
 I consider to use the built in Category class for implementing tags
 for one of my datastore classes. Something like:
 .
 import com.google.appengine.api.datastore.Category;
 .
 @Persistent
 protectedListCategory tags;
 .
 My question is how do I filter objects by a tag value, for example I
 want to get all objects that have a 'pollution' tag.
 Actually, there are here two questions:
 1. How to query by fields that are lists (or collections)?
 2. How to use Category class in queries ?

 Thanks

--

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.




[appengine-java] Re: Querying by Category class

2010-01-04 Thread datanucleus
 I have tried the simplest approach and it works:
 query.setFilter(tags == ' + aTagValue + ' );

It may work, but is actually invalid JDOQL and you should always use
valid JDOQL syntax like
tags.contains(tagParam)
and your current query would fail in future releases.

--

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.




[appengine-java] Re: any plans for deferred.defer in Java?

2010-01-04 Thread David Chandler
John,

I think my earlier serialization error problems in production were
because I was unnwittingly using an old version of GAE (1.2.6). Vince
was never able to reproduce the issue in production. I believe
everything is working in dev and prod as of 1.2.8. Give it a whirl and
post your feedback.

/dmc
http://turbomanage.wordpress.com

On Jan 1, 1:42 am, John Howe jhowe...@gmail.com wrote:
 I greatly appreciate the work that has been done here. But let me ask my
 question another way. Is it known that this does not work?

 On Thu, Dec 31, 2009 at 5:19 PM, John Howe jhowe...@gmail.com wrote:
  I can't seem to find any additional postings on this topic and I'm not
  sure what the conclusion for being able to use the Deferred capability
  with the latest Java SDK release. I'm just wondering if Vince's
  solution works on both server and development environments.

  On Dec 16, 10:42 am, David Chandler turboman...@gmail.com wrote:
   Thanks, Vince.

   Regarding a way to access the Guice injector, I've figured out I can
   simply create and access the injector via a static factory, so no
   changes are needed to Deferred or Deferrable. This works for AppEngine
   since there is only one WAR per JVM. If there were more than web app,
   I'm not sure whether Guice ServletModules would work, but that's not
   an issue for now.

   /dmchttp://turbomanage.wordpress.com

   On Dec 2, 2:47 pm, Vince Bonfanti vbonfa...@gmail.com wrote:

The behavior you're reporting is exactly the opposite of what I'm
  seeing.
For me, deserialization always fails on the dev server and always works
  in
production. What I'm seeing on the dev server is that the bytes
  retrieved
from the task payload (req.getInputStream) are not the same bytes that
  are
sent; the result is the StreamCorruptedException. Again, though, I only
  see
this on the dev server and never in production. Can you send me an
  example
that fails in production? I'd like to understand what's going on before
applying the Base64 encoder workaround.

I'm not at all familiar with Guice, but I think I understand what
  you're
trying to do. One thought I've had is that we could pass the
HttpServletRequest object to the doTask() method. This would allow you
  to
add attributes (objects) to the HttpServletRequest within your Guice
  filter
and then retrieve them within your doTask() method.

Vince

On Fri, Nov 27, 2009 at 7:53 PM, David Chandler turboman...@gmail.com
  wrote:

 I've solved the serialization problems by Base64 encoding the
 serialized task before calling payload() and decoding it in the
 deserialize(HttpServletRequest) method. I'm guessing something in the
 task queue chain (either task queue payload storage or the servlet
 call when task is run) has problems transmitting the binary data, as
 the exception I was getting at one point was a
 java.io.StreamCorruptedException.

 I'll send another patch to Vince. My solution works, but I'm not
 completely satisfied that I've diagnosed the problem correctly. I
  used
 Apache commons-codec for Base64. Is it safe to use com.sun.misc
 instead? I see it in appengine.repackaged chain, as well, but don't
 see it as part of an official Google API.

 Somewhat related, I've wired up the Deferred servlet through the
 GuiceFilter so I can pass a Guice injector to Deferrable tasks. Since
 the task objects are not created through Guice, but rather by
 deserializing, I modified doTask() to accept an additional Injector
 argument. We probably don't want that in the official version of
 Deferrable, though.

 Is there a better way for my Deferrable classes to get access to a
 Guice context? I'm trying to avoid Guice.createInjector(), as it
 results in a duplicate PersistenceManagerFactory being created since
 other servlets are also being served through Guice.

 Thank you,
 /dmc

 On Nov 27, 5:42 pm, David Chandler turboman...@gmail.com wrote:
  Jeff,

  I'm seeing problems with deserialization, too, when deployed on
  AppEngine. In dev, I can deserialize(serialize(task)) and it works
  just fine, but not so in AppEngine. I get the same error whether
  the
  task payload is the serialized Deferrable task itself or just the
  Key
  with the task in the db, but I haven't yet figured out which is the
  cause of the problem.

  The error I'm getting on AppEngine is invalid type code: 00 in
  Deferred.deserialize method. I've tried Base64 encoding after
  serialization in case it's related to special binary escape
  sequences
  that happen to be in the serialized object stream but still no
  success.

  I'm pretty sure AppEngine has written some custom code to do
  serialization because I previously got an AppEngine acess control
  exception when calling enableResolveObject(true) in a subclass of
  ObjectInputStream, 

Re: [appengine-java] Cannot install app engine plugin in eclipse 3.5 (Galileo)

2010-01-04 Thread Jason Parekh
Hi Uros,

Could you try installing again?  I think there may have been
intermittent connection issues.

jason

On Mon, Dec 28, 2009 at 4:21 AM, Uros uipa...@gmail.com wrote:
 Hello,

 When I try to install app engine plugin in eclipse I get the following
 error:

 An error occurred while collecting items to be installed
  session context was:(profile=epp.package.jee,
 phase=org.eclipse.equinox.internal.provisional.p2.engine.phases.Collect,
 operand=, action=).
  Unable to read repository at
 http://dl.google.com/eclipse/plugin/3.5/plugins/com.google.appengine.eclipse.sdkbundle.1.3.0_1.3.0.v200912141120.jar.
  Read timed out

 An error occurred while collecting items to be installed
 An exception stack trace is not available.

 Unable to read repository at
 http://dl.google.com/eclipse/plugin/3.5/plugins/com.google.appengine.eclipse.sdkbundle.1.3.0_1.3.0.v200912141120.jar.
 java.net.SocketTimeoutException: Read timed out
 at java.net.SocketInputStream.socketRead0(Native Method)
 at java.net.SocketInputStream.read(Unknown Source)
 at java.io.BufferedInputStream.fill(Unknown Source)
 at java.io.BufferedInputStream.read1(Unknown Source)
 at java.io.BufferedInputStream.read(Unknown Source)
 at org.apache.commons.httpclient.ContentLengthInputStream.read
 (ContentLengthInputStream.java:170)
 at java.io.FilterInputStream.read(Unknown Source)
 at org.apache.commons.httpclient.AutoCloseInputStream.read
 (AutoCloseInputStream.java:108)
 at java.io.FilterInputStream.read(Unknown Source)
 at org.apache.commons.httpclient.AutoCloseInputStream.read
 (AutoCloseInputStream.java:127)
 at
 org.eclipse.ecf.provider.filetransfer.retrieve.AbstractRetrieveFileTransfer
 $1.performFileTransfer(AbstractRetrieveFileTransfer.java:140)
 at org.eclipse.ecf.filetransfer.FileTransferJob.run
 (FileTransferJob.java:73)
 at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

 session context was:(profile=epp.package.jee,
 phase=org.eclipse.equinox.internal.provisional.p2.engine.phases.Collect,
 operand=, action=).
 An exception stack trace is not available.

 eclipse.buildId=M20090917-0800
 java.version=1.6.0_17
 java.vendor=Sun Microsystems Inc.
 BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
 Framework arguments:  -product org.eclipse.epp.package.jee.product
 Command-line arguments:  -os win32 -ws win32 -arch x86 -product
 org.eclipse.epp.package.jee.product

 Is there any workaround to this problem?

 Thanks,
 Uros

 --

 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.




--

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.




[appengine-java] Re: https on my domain

2010-01-04 Thread Pion
I just found this SSL/HTTPS Support on Google Apps domains (issue
792) on
http://code.google.com/p/googleappengine/issues/detail?id=792q=httpscolspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component.

There are 50+ comments on this issue.

On Jan 3, 10:26 am, Pion onlee2...@gmail.com wrote:
 http://www.slideshare.net/bess.ho/google-health-architecture-api
 (slide 28) shows that Google Health is using Google App Engine.

 I just registered to Google Health. After logging in, the url of the
 Google Health ishttps://health.google.com/health/p/-- notice the
 https and no *.appspot.com

 How is it done?

 Thanks in advance for your help.

 On Jan 3, 10:01 am, Pion onlee2...@gmail.com wrote:

 http://code.google.com/appengine/kb/general.html#httpsappssays, Can
  I use SSL (HTTPS) on App Engine with my Google Apps domain?

  All secure traffic with Google App Engine must be served from your
  appspot.com domain (https://your-app-id.appspot.com). If you are
  serving your app off of a Google Apps domain, you must direct all
  secure traffic through your app's appspot domain.

  On Thursday, October 16, 
  2008,http://googleappengine.blogspot.com/2008/10/announcing-https-support-...
  says, You may be wondering why we're only supporting appspot.com
  right now, and not arbitrary Google Apps domains. This has to do with
  fundamental limitations in the SSL protocol. We're currently
  investigating workarounds for this using e.g. SNI, which provides a
  viable solution for newer browsers--we'll keep you posted! 

  I don't see it the product 
  roadmaphttp://code.google.com/appengine/docs/roadmap.html.

  What's the latest status/plan on this?

--

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.




Re: [appengine-java] SUBSTRING function for JPA

2010-01-04 Thread Max Ross (Google)
It's not implemented.  Could you please file a bug?

http://code.google.com/p/datanucleus-appengine/issues/list

Thanks,
Max

On Sun, Jan 3, 2010 at 7:16 AM, Wong lhw...@gmail.com wrote:


 SUBSTRING function for JPA is not working.

 entityManager.createQuery(SELECT SUBSTRING(v.name, 1, 3) from Venue
 v) return v.name but NOT the substring.


 Anyone has any idea?

 --

 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.comgoogle-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-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.




Re: [appengine-java] Set cache expiration time for many static files (GAE+GWT)

2010-01-04 Thread Don Schwarz
I believe that the suggested configuration for GWT is:

static-files
   include path=**.nocache.* expiration=1s/
   include path=** expiration=30d/
/static-files

Does that work?

If not, please send me your web.xml and appengine-web.xml (privately if you
want) and I'll determine why this configuration is blowing up to  100
URLMap entries.  There's a combinatorial issue here between static-file
patterns, authentication patterns, and filter patterns that could be causing
trouble.

On Fri, Jan 1, 2010 at 3:16 PM, Nohu civle...@gmail.com wrote:

 Hello

 I am developing some application written in GWT on App Engine. I'm on
 optimalization stage,
 so i want to allow browsers to cache as much of static files as
 possible.

 If I don't put any static files in appengine-web.xml directly, App
 Engine threat all files in
 war directory as static files (except WEB-INF directory) and when I
 deploy my application
 I have about 450 of them.

 I read (http://code.google.com/p/googleappengine/issues/detail?
 id=1662 http://code.google.com/p/googleappengine/issues/detail?id=1662)
 that App Engine sets default
 cache expiration time to 10 minutes (which is too short).

 So, if I want to set different time I need to define all my static
 files in appengine-web.xml
 (because if I define even one static file, App Engine abandon his
 default behavior, and don't
 look automatically for other static files) and set my expiration time
 for them in expiration attribiute.

 And then we come to my problem. When I put all my static files in
 appengine-web.xml for example like this:

 static-files
include path=/**.cache.* expiration=3000d/
include path=/**.png expiration=30d/
include path=/**.gif expiration=30d/
include path=/**.jpg expiration=30d/
include path=/**.css expiration=30d/
include path=/**.html expiration=30d/
 /static-files

 on deploy I have error:

 Unable to update app: Error posting to URL:xxx
 400 Bad Request
 Error when loading application configuration:
 Invalid object:
 Found more than 100 URLMap entries in application configuration


 See the deployment console for more details

 As I understand App Engine maps every of my defined static files to
 URL's, and it exceeds some
 limits (http://code.google.com/p/googleappengine/issues/detail?
 id=1444 http://code.google.com/p/googleappengine/issues/detail?id=1444),
 but why was that
 working when I didn't specify static files in appengine-web.xml? App
 Engine choosed even more static
 files then (all from war directory).

 GWT generates many static files for its own (many js files, that can
 be cached forever),
 and if you use runAsync code splitting, there are even more of them.
 It's essential in GWT to allow
 cache this files, because that's what GWT is! If they are downloaded
 every time when user requests
 page, it doesn't have sense (at least in performance meaning).

 I assume that App Engine and GWT combination has strong support from
 Google
 (Eclipse plugin for example makes developing with them so easy), so I
 think that there have to
 be some solution.

 Is there any workaround for it? I just want to set cache expiration
 time for my static files.

 Marcin

 --

 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.comgoogle-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-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.




[appengine-java] db error on 2010: Persistent class Class guestbook.Greeting does not seem to have been enhanced.

2010-01-04 Thread John Lin
Dear Sir,

I got this db error on th efirst working day of 2010.  Please see the
erros in details.  I run theis as an wev application and lunch the GUI
as: http://localhost:8080/index.html

It seems the db has some changes recently.

Please advise me.  Thanks.

John

errors
HTTP ERROR: 500

Persistent class Class guestbook.Greeting does not seem to have been
enhanced.  You may want to rerun the enhancer and check for errors in
the output. has no table in the database, but the operation requires
it. Please check the specification of the MetaData for this class.

RequestURI=/
Caused by:

javax.jdo.JDOUserException: Persistent class Class guestbook.Greeting
does not seem to have been enhanced.  You may want to rerun the
enhancer and check for errors in the output. has no table in the
database, but the operation requires it. Please check the
specification of the MetaData for this class.
at
org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException
(NucleusJDOHelper.java:375)
at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:230)
at org.apache.jsp.guestbookujsp_jsp._jspService
(guestbookujsp_jsp.java:94)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.apache.jasper.servlet.JspServletWrapper.service
(JspServletWrapper.java:324)
at org.apache.jasper.servlet.JspServlet.serviceJspFile
(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at com.google.appengine.tools.development.PrivilegedJspServlet.access
$101(PrivilegedJspServlet.java:23)
at com.google.appengine.tools.development.PrivilegedJspServlet$2.run
(PrivilegedJspServlet.java:59)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.appengine.tools.development.PrivilegedJspServlet.service
(PrivilegedJspServlet.java:57)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
487)
at org.mortbay.jetty.servlet.ServletHandler.handle
(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle
(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle
(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle
(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
405)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle
(DevAppEngineWebAppContext.java:54)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:268)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
at
com.google.appengine.tools.development.StaticFileUtils.serveWelcomeFileAsForward
(StaticFileUtils.java:80)
at
com.google.appengine.tools.development.LocalResourceFileServlet.maybeServeWelcomeFile
(LocalResourceFileServlet.java:254)
at
com.google.appengine.tools.development.LocalResourceFileServlet.doGet
(LocalResourceFileServlet.java:120)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1093)
at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
at com.google.appengine.tools.development.StaticFileFilter.doFilter
(StaticFileFilter.java:121)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
at org.mortbay.jetty.servlet.ServletHandler.handle
(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle
(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle
(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle
(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
405)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle
(DevAppEngineWebAppContext.java:54)
at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
at com.google.appengine.tools.development.JettyContainerService
$ApiProxyHandler.handle(JettyContainerService.java:342)
at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
506)
at 

[appengine-java] Re: Set cache expiration time for many static files (GAE+GWT)

2010-01-04 Thread Nohu
That was the answer I was hoping for.
Yes, that configuration works.
Thank you - very much appreciated!

Strange thing is, that if I use configuration:
static-files
include path=**.nocache.* expiration=1s/
include path=/**.cache.* expiration=3000d/
include path=/**.png expiration=30d/
include path=/**.gif expiration=30d/
include path=/**.jpg expiration=30d/
include path=/**.css expiration=30d/
include path=/**.html expiration=30d/
/static-files

it doesn't work (Bad request error, Found more than 100 URLMap entries
in application configuration),
but if I use configuration (omit include path=**.nocache.*
expiration=1s/):
static-files
include path=/**.cache.* expiration=3000d/
include path=/**.png expiration=30d/
include path=/**.gif expiration=30d/
include path=/**.jpg expiration=30d/
include path=/**.css expiration=30d/
include path=/**.html expiration=30d/
/static-files

or

static-files
   include path=**.nocache.* expiration=1s/
   include path=** expiration=30d/
/static-files

it works fine with the same web.xml file in all cases.

All in all, many thanks for that.

Marcin

On 4 Sty, 19:49, Don Schwarz schwa...@google.com wrote:
 I believe that the suggested configuration for GWT is:

 static-files
        include path=**.nocache.* expiration=1s/
        include path=** expiration=30d/
 /static-files

 Does that work?

 If not, please send me your web.xml and appengine-web.xml (privately if you
 want) and I'll determine why this configuration is blowing up to  100
 URLMap entries.  There's a combinatorial issue here between static-file
 patterns, authentication patterns, and filter patterns that could be causing
 trouble.

 On Fri, Jan 1, 2010 at 3:16 PM, Nohu civle...@gmail.com wrote:
  Hello

  I am developing some application written in GWT on App Engine. I'm on
  optimalization stage,
  so i want to allow browsers to cache as much of static files as
  possible.

  If I don't put any static files in appengine-web.xml directly, App
  Engine threat all files in
  war directory as static files (except WEB-INF directory) and when I
  deploy my application
  I have about 450 of them.

  I read (http://code.google.com/p/googleappengine/issues/detail?
  id=1662 http://code.google.com/p/googleappengine/issues/detail?id=1662)
  that App Engine sets default
  cache expiration time to 10 minutes (which is too short).

  So, if I want to set different time I need to define all my static
  files in appengine-web.xml
  (because if I define even one static file, App Engine abandon his
  default behavior, and don't
  look automatically for other static files) and set my expiration time
  for them in expiration attribiute.

  And then we come to my problem. When I put all my static files in
  appengine-web.xml for example like this:

  static-files
         include path=/**.cache.* expiration=3000d/
         include path=/**.png expiration=30d/
         include path=/**.gif expiration=30d/
         include path=/**.jpg expiration=30d/
         include path=/**.css expiration=30d/
         include path=/**.html expiration=30d/
  /static-files

  on deploy I have error:

  Unable to update app: Error posting to URL:xxx
  400 Bad Request
  Error when loading application configuration:
  Invalid object:
  Found more than 100 URLMap entries in application configuration

  See the deployment console for more details

  As I understand App Engine maps every of my defined static files to
  URL's, and it exceeds some
  limits (http://code.google.com/p/googleappengine/issues/detail?
  id=1444 http://code.google.com/p/googleappengine/issues/detail?id=1444),
  but why was that
  working when I didn't specify static files in appengine-web.xml? App
  Engine choosed even more static
  files then (all from war directory).

  GWT generates many static files for its own (many js files, that can
  be cached forever),
  and if you use runAsync code splitting, there are even more of them.
  It's essential in GWT to allow
  cache this files, because that's what GWT is! If they are downloaded
  every time when user requests
  page, it doesn't have sense (at least in performance meaning).

  I assume that App Engine and GWT combination has strong support from
  Google
  (Eclipse plugin for example makes developing with them so easy), so I
  think that there have to
  be some solution.

  Is there any workaround for it? I just want to set cache expiration
  time for my static files.

  Marcin

  --

  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.comgoogle-appengine-java%2bunsubscr...@googlegroups.com
  .
  For more options, visit this group at
 

[appengine-java] Re: Could not fetch URL with URLFetchService but with HttpClient

2010-01-04 Thread derkent
alrighty, gotcha now.

thanks for the clarification.

On Jan 3, 2:59 pm, m seleron seler...@gmail.com wrote:
 Hi,

 I'm sorry for being not able to explain adequately.

 I tried.

 cfm?fuseaction=Reports.SetReport
                                    ^
 I think that this sign is a cause in the development
 where the Exception occurs.

 However, even if this sign is included
 I do not think that production garish excetion is generated.

 The appearance is seen for a while.
 If there is no workaround

 There might be a necessity for doing post to the Issue list.

 thanks.

 2010/1/3 derkent derkentgib...@gmail.com:

  hey thanks, you seem to be right.

  It seems a bug in the sdk, in production the problem goes away.

  I am not sure what you mean though when you say, when value of the url
  paramater dot is included.

  Thanks again,

  On Jan 1, 8:42 pm, seleronm seler...@gmail.com wrote:
  Hi,

  I tried a little.
  ( SDK 1.3.0)

  The condition that IOException is generated
  when value of the URL parameter .(dot) is included.

  This is not generated in production.

  I think that the possibility of bug of development environment(SDK).

  thanks.

  I have an url which is redirecting:

  http://www.accessdata.fda.gov/Scripts/cder/DrugsatFDA/index.cfm?fusea...
  Reports.SetReportrptname=1reportSelectDate=12%2F2009ta=Submits

  org.apache.http.client.HttpClient can follow the redirect without any
  problem and get the content.
  However URLFetchService has problems following the redirects,
  java.io.IOException: Could not fetch URL.

  Clearly the implementations are different, but I wonder how I can get
  the URLFetchService to also read in that url. Could this be a bug? If
  I ask HttpClient not to follow the redirect, it comes back with
  temporarily moved, which I believe is HTTP Error 302.

  Any help would be very kind.

  The code using the URLFetchService:

  URL url = new URL(urlStr);
  URLFetchService urlFetchService =
  URLFetchServiceFactory.getURLFetchService();
  HTTPRequest httpRequest = new HTTPRequest(url,
  HTTPMethod.GET,followRedirects());
  HTTPResponse response = urlFetchService.fetch(httpRequest);

  The code using HTTPClient

  String url = http://www.accessdata.fda.gov/Scripts/cder/DrugsatFDA/
  index.cfm?
  fuseaction=Reports.SetReportrptname=1reportSelectDate=12%2F2009ta=Submits
  ;
  HttpClient httpclient = new DefaultHttpClient
  ();
  httpclient.getParams().setBooleanParameter
  (
              http.protocol.handle-redirects,
  true);
  HttpGet httpGet = new HttpGet
  (url);
  ResponseHandlerString responseHandler = new BasicResponseHandler
  ();
  String
  responseBody;
  try
  {
  responseBody = httpclient.execute(httpGet,
  responseHandler);
      System.out.println
  (responseBody);
  } catch (ClientProtocolException e)
  {
  e.printStackTrace
  ();
  } catch (IOException e)
  {
  e.printStackTrace
  ();
  }

  --

  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 
  athttp://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-j...@googlegroups.com.
  To unsubscribe from this group, send email to 
  google-appengine-java+unsubscr...@googlegroups.com.
  For more options, visit this group 
  athttp://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-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.




[appengine-java] Re: db error on 2010: Persistent class Class guestbook.Greeting does not seem to have been enhanced.

2010-01-04 Thread Xlorep DarkHelm
If you are using Eclipse, this can typically be fixed by making a
small change to one of your JDO enhanced classes (like, hit space and
then delete the space), save the file, and try re-sending the app to
Google. I know it sounds strange (you effectively are not doing
anything to the actual file in the end), but it works.

On Jan 4, 11:41 am, John Lin john...@google.com wrote:
 Dear Sir,

 I got this db error on th efirst working day of 2010.  Please see the
 erros in details.  I run theis as an wev application and lunch the GUI
 as:http://localhost:8080/index.html

 It seems the db has some changes recently.

 Please advise me.  Thanks.

 John

 errors
 HTTP ERROR: 500

 Persistent class Class guestbook.Greeting does not seem to have been
 enhanced.  You may want to rerun the enhancer and check for errors in
 the output. has no table in the database, but the operation requires
 it. Please check the specification of the MetaData for this class.

 RequestURI=/
 Caused by:

 javax.jdo.JDOUserException: Persistent class Class guestbook.Greeting
 does not seem to have been enhanced.  You may want to rerun the
 enhancer and check for errors in the output. has no table in the
 database, but the operation requires it. Please check the
 specification of the MetaData for this class.
         at
 org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException
 (NucleusJDOHelper.java:375)
         at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:230)
         at org.apache.jsp.guestbookujsp_jsp._jspService
 (guestbookujsp_jsp.java:94)
         at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
         at org.apache.jasper.servlet.JspServletWrapper.service
 (JspServletWrapper.java:324)
         at org.apache.jasper.servlet.JspServlet.serviceJspFile
 (JspServlet.java:292)
         at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
         at com.google.appengine.tools.development.PrivilegedJspServlet.access
 $101(PrivilegedJspServlet.java:23)
         at com.google.appengine.tools.development.PrivilegedJspServlet$2.run
 (PrivilegedJspServlet.java:59)
         at java.security.AccessController.doPrivileged(Native Method)
         at com.google.appengine.tools.development.PrivilegedJspServlet.service
 (PrivilegedJspServlet.java:57)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
         at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
 487)
         at org.mortbay.jetty.servlet.ServletHandler.handle
 (ServletHandler.java:362)
         at org.mortbay.jetty.security.SecurityHandler.handle
 (SecurityHandler.java:216)
         at org.mortbay.jetty.servlet.SessionHandler.handle
 (SessionHandler.java:181)
         at org.mortbay.jetty.handler.ContextHandler.handle
 (ContextHandler.java:712)
         at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
 405)
         at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle
 (DevAppEngineWebAppContext.java:54)
         at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:268)
         at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
         at
 com.google.appengine.tools.development.StaticFileUtils.serveWelcomeFileAsFo 
 rward
 (StaticFileUtils.java:80)
         at
 com.google.appengine.tools.development.LocalResourceFileServlet.maybeServeW 
 elcomeFile
 (LocalResourceFileServlet.java:254)
         at
 com.google.appengine.tools.development.LocalResourceFileServlet.doGet
 (LocalResourceFileServlet.java:120)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
         at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
 487)
         at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
 (ServletHandler.java:1093)
         at
 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
 (TransactionCleanupFilter.java:43)
         at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
 (ServletHandler.java:1084)
         at com.google.appengine.tools.development.StaticFileFilter.doFilter
 (StaticFileFilter.java:121)
         at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
 (ServletHandler.java:1084)
         at org.mortbay.jetty.servlet.ServletHandler.handle
 (ServletHandler.java:360)
         at org.mortbay.jetty.security.SecurityHandler.handle
 (SecurityHandler.java:216)
         at org.mortbay.jetty.servlet.SessionHandler.handle
 (SessionHandler.java:181)
         at org.mortbay.jetty.handler.ContextHandler.handle
 (ContextHandler.java:712)
         at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
 405)
         at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle
 (DevAppEngineWebAppContext.java:54)
         at 

[appengine-java] Task Queues... errors...

2010-01-04 Thread Xlorep DarkHelm
Hello, I'm getting an error when I try and upload my app (xdh-
playlist):



com.google.appengine.tools.admin.AdminException: Unable to update app:
Error posting to URL: 
http://appengine.google.com/api/queue/update?app_id=xdh-playlistversion=1;
500 Internal Server Error

Server Error (500)
A server error has occurred.

at com.google.appengine.tools.admin.AppAdminImpl.update
(AppAdminImpl.java:62)
at com.google.appengine.eclipse.core.proxy.AppEngineBridgeImpl.deploy
(AppEngineBridgeImpl.java:271)
at
com.google.appengine.eclipse.core.deploy.DeployProjectJob.runInWorkspace
(DeployProjectJob.java:148)
at org.eclipse.core.internal.resources.InternalWorkspaceJob.run
(InternalWorkspaceJob.java:38)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: java.io.IOException: Error posting to URL:
http://appengine.google.com/api/queue/update?app_id=xdh-playlistversion=1;
500 Internal Server Error

Server Error (500)
A server error has occurred.

at com.google.appengine.tools.admin.ServerConnection.send
(ServerConnection.java:143)
at com.google.appengine.tools.admin.ServerConnection.post
(ServerConnection.java:81)
at com.google.appengine.tools.admin.AppVersionUpload.send
(AppVersionUpload.java:522)
at com.google.appengine.tools.admin.AppVersionUpload.updateQueue
(AppVersionUpload.java:255)
at com.google.appengine.tools.admin.AppVersionUpload.doUpload
(AppVersionUpload.java:134)
at com.google.appengine.tools.admin.AppAdminImpl.update
(AppAdminImpl.java:56)
... 4 more






I'm using Eclipse Galileo, App Engine SDK 1.3.0, Java 1.6. This is
annoying, because it just suddenly started happening, and the queue
file had loaded before. Anyone else having this issue? Or better yet,
could help me with getting this taken care of?

Here is my queue.xml file, for reference:

?xml version=1.0 encoding=UTF-8?
queue-entries
  queue
nameload/name
rate1/s/rate
bucket-size1/bucket-size
  /queue

  queue
nameclean/name
rate1/s/rate
bucket-size1/bucket-size
  /queue

  queue
nameprocess/name
rate2/s/rate
bucket-size2/bucket-size
  /queue

  queue
namefinalize/name
rate1/s/rate
bucket-size1/bucket-size
  /queue

  queue
namemakelist/name
rate1/s/rate
bucket-size1/bucket-size
  /queue

  queue
namesendlist/name
rate1/s/rate
bucket-size1/bucket-size
  /queue
/queue-entries

--

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.




[appengine-java] Re: why my app on GAE first access is so slow

2010-01-04 Thread Ed Murphy
There are some proposed new features for GAE to allow apps to keep
their byte-code 'warm', either on the application server, or as a pre-
initialized image on disk that can be loaded and not incur a full
initialization.  Check out this issue, contribute suggestions and
vote for it if you want to see a feature like this;

http://code.google.com/p/googleappengine/issues/detail?id=2456


On Nov 7 2009, 3:22 am, Prashant antsh...@gmail.com wrote:
 yes, your guess is right. if your app is inactive then app engine will
 remove your app servlets from memory and reloads from datastore (or wherever
 it is stored) when you access it first time.

--

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.




[appengine-java] Problem accessing a file on file system

2010-01-04 Thread Steph
I am using a RandomAccessFile, which is whitelisted on Google App
Engine.

My simple code looks like:

  RandomAccessFile file = new RandomAccessFile(/WEB-INF/classes/
myfile.dat, r);

which gets a

java.security.AccessControlException: access denied
(java.io.FilePermission \WEB-INF\classes\myfile.dat read)
at java.security.AccessControlContext.checkPermission
(AccessControlContext.java:323)
at java.security.AccessController.checkPermission
(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:
532)

Same thing if I put the file in /WEB-INF directly.

Am I missing something? Thanks for your help.

--

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.