[appengine-java] Re: App Engine cold starts and overly aggressive cycling
Seems to be the case for me too, I've been noticing instance restarts pretty often these last 2 or 3 days. On 8 fév, 19:02, Ikai L (Google) ika...@google.com wrote: Thanks for the info, Jake. Has anyone else experienced this? That is, has anyone else noticed improvement which has since degraded? On Mon, Feb 8, 2010 at 9:10 AM, Jake jbrooko...@cast.org wrote: Hey all, Since Ikai's post on January 22nd, I haven't had much trouble with my instance rebooting unexpectedly. However, today the problem has returned. I'm getting instance restarts within a minute or two of each other on a somewhat regular basis - sometimes even within a few seconds of each other, caused by my first request. Jake On Jan 30, 3:06 pm, Edwin Hautus ehau...@gmail.com wrote: I am having this problem for the last week or two after months of good performance and very little recycling. As my app start up time is around 15 seconds this is really hitting my user experience in a negative way. On Jan 16, 12:32 am, Ikai Lan i...@google.com wrote: Hey everybody, We've been seeing more and more reports of applications being cycled out overly aggressively, resulting in some folks implementing (discouraged) workarounds to keep their application from being cycled out. - What is your application ID? salsa-amsterdam - How do you know it is being cycled out? You'll need to insert some code that only gets called when the app cold starts. I have some logging which is executed on startup - How much time of inactivity does it take before your application is cycled out? Can be as little as a minute. - What time or days does this seem to happen? Seems to happen all the time. - What frameworks or libraries are you loading? Just the plain Servlet API and Groovy. Any other information you can provide would be helpful. Start up time of the app is about 10 seconds and involves some on the fly compilation of Groovy scripts. Ikai Lan Developer Programs Engineer, Google App Engine -- 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%2B unsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en. -- Ikai Lan Developer Programs Engineer, Google App Enginehttp://googleappengine.blogspot.com|http://twitter.com/app_engine -- 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] news on remote_api for java ?
Hi, Does anybody have some news on the remote_api for java ? It would be great to be able to use our JDO/JPA objects to interact with the datastore without having to upload a version to appengine ! Thanx :) emerix -- 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] Re: vs-accounting.appspot.com - datastore viewer error
Hello Toby, thanks. Yes, the property type email could have been empty. Further dev, I will change them to non-empty. Now, I cannot trace back those entities from my application, as it is being tested and is logged in by different users and entities are created. How can I correct this situation? -Aswath On Sat, Feb 6, 2010 at 1:06 AM, Toby Reyelts to...@google.com wrote: You have an empty property of type e-mail, and that makes the datastore viewer unhappy. You need to either use a different type that can be non-empty (like String), or have non-empty e-mails. On Thu, Feb 4, 2010 at 10:25 PM, aswath satrasala aswath.satras...@gmail.com wrote: My application is running fine. I am still getting the datastore viewer error.What can we do in this scenario. How can we get support? -Aswath On Mon, Feb 1, 2010 at 12:36 PM, aswath satrasala aswath.satras...@gmail.com wrote: Hello GAE team, I am still not able to use the DataStore viewer for my app-id 'vs-accounting' Thanks -Aswath On Thu, Jan 28, 2010 at 11:08 AM, aswath satrasala aswath.satras...@gmail.com wrote: Local file: datastore-indexes !-- Used 2 times in query history -- datastore-index kind=Tenant ancestor=true source=auto property name=tenants_INTEGER_IDX direction=asc/ /datastore-index !-- Used 1 time in query history -- datastore-index kind=Party ancestor=true source=auto property name=partys_INTEGER_IDX direction=asc/ /datastore-index !-- Used 1 time in query history -- datastore-index kind=SecurityGroup ancestor=true source=auto property name=secGrpList_INTEGER_IDX direction=asc/ /datastore-index datastore-index kind=PartyRole ancestor=true source=auto property name=partyRoles_INTEGER_IDX direction=asc/ /datastore-index /datastore-indexes Production: Party partys_INTEGER_IDX ▲ Includes ancestors *Serving* PartyRole partyRoles_INTEGER_IDX ▲ Includes ancestors *Serving* SecurityGroup secGrpList_INTEGER_IDX ▲ Includes ancestors *Serving* Tenant tenants_INTEGER_IDX ▲ Includes ancestors 12hrs ago , the secGrpList_INTEGER_IDX was not shown on the production admin console. Now, it is showing up. The datastore viewer is still responding back error page. -Aswath On Thu, Jan 28, 2010 at 2:48 AM, Ikai L (Google) ika...@google.comwrote: What does you local indexes file look like? Can you post the indexes listed in your production admin console? On Tue, Jan 26, 2010 at 11:24 PM, aswath satrasala aswath.satras...@gmail.com wrote: Hello GAE team, Further observations made while testing the app. I am not able to write entities to the datastore. Upon examining the logs, I found the following error. com.veersoft.action.CreateTenantAction doCreate: com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found.. datastore-index kind=SecurityGroup ancestor=true source=manual property name=secGrpList_INTEGER_IDX direction=asc/ /datastore-index The application is fine on the local develpment server. -Aswath On Tue, Jan 26, 2010 at 8:51 PM, aswath satrasala aswath.satras...@gmail.com wrote: Hello, My app-id is vs-accounting. I login into appengine.google.com. I choose the above application. Then I click on the datastore viewer. I get the error Server Error A server error has occurred. Return to Applications screen » https://appengine.google.com/ -Aswath -- 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. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- 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.comgoogle-appengine-java%2bunsubscr...@googlegroups.com . For more options, visit this group at
[appengine-java] Some weird exception while deploying struts
Uncaught exception from servlet java.lang.reflect.InvocationTargetException at com.google.appengine.runtime.Request.process- df292afe47330d6f(Request.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Method.java:43) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java: 441) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java: 280) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 243) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java: 165) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java: 252) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java: 68) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java: 122) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java: 195) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java: 195) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java: 179) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java: 75) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java: 94) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java: 235) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java: 89) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java: 130) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java: 267) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java: 126) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java: 138) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java: 165) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java: 164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:
[appengine-java] Re: Some weird exception while deploying struts
The above happens when i use Persistence Manager (PMF) with Spring +Struts. On Feb 9, 4:11 pm, Saeed saee...@gmail.com wrote: Uncaught exception from servlet java.lang.reflect.InvocationTargetException at com.google.appengine.runtime.Request.process- df292afe47330d6f(Request.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Method.java:43) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java: 441) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java: 280) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 243) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java: 165) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java: 252) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java: 68) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java: 122) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java: 195) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java: 195) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java: 179) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java: 75) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java: 94) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java: 235) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java: 89) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java: 130) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java: 267) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java: 126) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java: 138) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java: 87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java: 165) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 237) at
[appengine-java] OutOfMemoryError
Hi , I am getting OutOfMemoryErrors. The stack trace always points to the exact same place at the Jetty runtime. see stack trace below has anyone experienced this? These errors occur for the same flow in my code (sometime it succeeds and sometime it get the OutOfMemoryError). this particular flow does not return too much content (around 5KB). If my app had a memory problem I would expect to get the OutOfMemoryErrors all over the place, but, it only happens in one flow. please help. java.lang.OutOfMemoryError: Java heap space at java.nio.HeapByteBuffer.init(Unknown Source) at java.nio.ByteBuffer.allocate(Unknown Source) at com.google.apphosting.runtime.jetty.RpcResponseGenerator.newBufferFromPool(RpcResponseGenerator.java: 213) at com.google.apphosting.runtime.jetty.RpcResponseGenerator.init(RpcResponseGenerator.java: 39) at com.google.apphosting.runtime.jetty.RpcConnection.init(RpcConnection.java: 41) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java: 99) at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: 235) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5235) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5233) at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java: 24) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: 363) at com.google.net.rpc.impl.Server$2.run(Server.java:838) at com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java: 56) at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java: 536) at com.google.net.rpc.impl.Server.startRpc(Server.java:793) at com.google.net.rpc.impl.Server.processRequest(Server.java:368) at com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java: 448) at com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java: 319) at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java: 290) at com.google.net.async.Connection.handleReadEvent(Connection.java: 466) at com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java: 759) at com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java: 205) at com.google.net.async.EventDispatcher.loop(EventDispatcher.java: 101) at com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java: 251) at com.google.apphosting.runtime.JavaRuntime $RpcRunnable.run(JavaRuntime.java:394) at java.lang.Thread.run(Unknown Source) -- 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] java.lang.VerifyError
I have an application that has been deployed and running for several months. Yesterday it began throwing the error java.lang.VerifyError. No new deployments or changes in usage on my side. The code throwing the error is in this method... /** * Retrieve a list of Expense depending on the Dates and Vendor passed in. There will be two * execution paths because Vendor does not need to be passed in as a filter. */ @SuppressWarnings(unchecked) //query is against Expense.class so it will return ListExpense public Liststeveshrader.budget.client.dto.Expense getExpenses(Date startDate, Date endDate, String vendor) { Liststeveshrader.budget.client.dto.Expense dtoExpenses = new ArrayListsteveshrader.budget.client.dto.Expense(); String userId = getUserId(); if(userId != null) { ListExpense expenses = null; PersistenceManager pm = PMF.get().getPersistenceManager(); Query query = pm.newQuery(Expense.class); query.declareImports(import java.util.Date); query.setOrdering(date asc); String queryFilter = userId == userIdParam date = startDateParam date = endDateParam; Map queryParameters = new HashMap(); queryParameters.put(userIdParam, userId); queryParameters.put(startDateParam, startDate); queryParameters.put(endDateParam, endDate); if(vendor != null vendor.trim().length() 0) { //if a vendor passed in queryFilter = queryFilter + vendor == vendorParam; queryParameters.put(vendorParam, vendor); } query.setFilter(queryFilter); expenses = (ListExpense) query.executeWithMap(queryParameters); for(Expense e : expenses) { dtoExpenses.add(new steveshrader.budget.client.dto.Expense(e.getId(), e.getDate(), e.getAmount(), e.getVendor(), e.getExpenseType(), e.getPaymentType())); } pm.close(); } return dtoExpenses; } The complete stack trace is... javax.servlet.ServletContext log: Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.util.List steveshrader.budget.client.BudgetService.getExpenses(java.util.Date,java.util.Date,java.lang.String)' threw an unexpected exception: java.lang.VerifyError: org/datanucleus/ store/appengine/query/StreamingQueryResult$1 at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java: 360) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java: 546) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java: 166) at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java: 86) at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) 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.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java: 97) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java: 35) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java: 43) 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.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java: 238) 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 org.mortbay.jetty.HttpConnection
Re: [appengine-java] DELETE HTTP Method not working on Google Chrome
Hi. Thank you for responding! Here is my code... This is de jQuery call: $.ajax({ type: DELETE, url: api.getUrl(delete, username, id), contentType: application/json, complete: successByStatus(204, onSuccess, onError) }); I don't see anything on the Appengine Logs after making the request. This is the response I'm getting on Chrome: 1. Request URL: (..) 2. Request Method: DELETE 3. Status Code: 400 Bad Request 4. Request Headers 1. Accept: */* 2. Content-Type: application/json 3. Origin: (...) 4. Referer: (...) 5. User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.307.5 Safari/532.9 6. X-Requested-With: XMLHttpRequest 5. Request Payload 1. undefined 6. Response Headers 1. Cache-Control: private, x-gzip-ok= 2. Content-Length: 1350 3. Content-Type: text/html; charset=UTF-8 4. Date: Tue, 09 Feb 2010 14:14:00 GMT 5. Server: GFE/2.0 6. X-XSS-Protection: 0 htmlhead meta http-equiv=content-type content= text/html;charset=utf-8 title400 Bad Request/title style!-- body {font-family: arial,sans-serif} div.nav {margin-top: 1ex}div.nav A {font-size: 10pt; font-family: arial,sans-serif} span.nav {font-size: 10pt; font-family: arial,sans-serif; font-weight: bold} div.nav A,span.big {font-size: 12pt; color: #cc} div.nav A {font-size: 10pt; color: black}A.l:link {color: #6f6f6f}A.u:link {color: green} //--/style script!--var rc=400; //-- /script /head body text=#00 bgcolor=#ff table border=0 cellpadding=2 cellspacing=0 width=100%trtd rowspan=3 width=1% nowrap bfont face=times color= #0039b6 size=10G/fontfont face=times color=#c41200 size=10o/fontfont face=times color=#f3c518 size=10o/fontfont face=times color=#0039b6 size =10g/fontfont face=times color=#30a72f size=10l/fontfont face=times color=#c41200 size=10e/fontnbsp;nbsp;/b tdnbsp;/td/tr trtd bgcolor=#3366ccfont face=arial,sans-serif color=#ffbError/b /td/tr trtdnbsp;/td/tr/table blockquote H1Bad Request /H1 *Your client has issued a malformed or illegal request.* p /blockquote table width=100% cellpadding=0 cellspacing=0trtd bgcolor =#3366ccimg alt= width=1 height=4/td/tr/table /body/html This is the signature of my Spring 3 MVC controller mapped to the URL, though the request is not reaching this point: @RequestMapping(method = RequestMethod.DELETE) @ResponseBody @ResponseStatus(value = HttpStatus.NO_CONTENT) public final void delete(...); We've tried changing the method to POST and it works fine. But we need it to be a DELETE. Any ideas? Thanks! 2010/2/8 Johan Vallejo jvall...@vnperu.com Francisco send your code for help you El 08/02/2010 10:55 a.m., Francisco Gonzalez escribió: Hi. I'm developing an application that receives AJAX requests to perform some actions. I'm using jQuery to send the requests from the client. One of those requests is of type HTTP DELETE. The problem is that this request does not work when using Google Chrome on the deployed app. It gets a 400 error (bad request) as response. It works fine on my local SDK though. Firefox works well on both SDK and the deployed app. Anyone having the same trouble? Any ideas? Thank you in advance! -- 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.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] OutOfMemoryError
It looks like the response your RPC method is generating is too big. On 9 Feb 2010, at 19:53, Lior Harsat wrote: Hi , I am getting OutOfMemoryErrors. The stack trace always points to the exact same place at the Jetty runtime. see stack trace below has anyone experienced this? These errors occur for the same flow in my code (sometime it succeeds and sometime it get the OutOfMemoryError). this particular flow does not return too much content (around 5KB). If my app had a memory problem I would expect to get the OutOfMemoryErrors all over the place, but, it only happens in one flow. please help. java.lang.OutOfMemoryError: Java heap space at java.nio.HeapByteBuffer.init(Unknown Source) at java.nio.ByteBuffer.allocate(Unknown Source) at com .google .apphosting .runtime .jetty .RpcResponseGenerator.newBufferFromPool(RpcResponseGenerator.java: 213) at com .google .apphosting .runtime.jetty.RpcResponseGenerator.init(RpcResponseGenerator.java: 39) at com .google .apphosting.runtime.jetty.RpcConnection.init(RpcConnection.java: 41) at com .google .apphosting .runtime .jetty .JettyServletEngineAdapter .serviceRequest(JettyServletEngineAdapter.java: 99) at com .google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: 235) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5235) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5233) at com .google .net .rpc .impl .BlockingApplicationHandler .handleRequest(BlockingApplicationHandler.java: 24) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: 363) at com.google.net.rpc.impl.Server$2.run(Server.java:838) at com .google .tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java: 56) at com .google .tracing .LocalTraceSpanBuilder .internalContinueSpan(LocalTraceSpanBuilder.java: 536) at com.google.net.rpc.impl.Server.startRpc(Server.java:793) at com.google.net.rpc.impl.Server.processRequest(Server.java:368) at com .google .net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java: 448) at com .google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java: 319) at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java: 290) at com.google.net.async.Connection.handleReadEvent(Connection.java: 466) at com .google .net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java: 759) at com .google.net.async.EventDispatcher.internalLoop(EventDispatcher.java: 205) at com.google.net.async.EventDispatcher.loop(EventDispatcher.java: 101) at com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java: 251) at com.google.apphosting.runtime.JavaRuntime $RpcRunnable.run(JavaRuntime.java:394) at java.lang.Thread.run(Unknown Source) -- 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 . -- 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] Re: Persistence with JPA + GAE
Hi Jake, Now i have this error Log : javax.persistence.PersistenceException: Transaction is still active. You should always close your transactions correctly using commit() or rollback(). this is my code : EntityManager cn2 = emf.get().createEntityManager(); distritos dist2 = cn2.find(distritos.class, id); evento e = new evento(); e.setDistrito(dist2); Date fecha = new Date(); e.setFechaCreacion(fecha); try{ cn2.getTransaction().begin(); cn2.persist(e); cn2.getTransaction().commit(); response.getWriter().write("ok"); }finally{ cn2.close(); } Distrito : @Entity public class distritos implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Extension (vendorName="datanucleus", key="gae.encoded-pk", value="true") Key id; --getter and setter-- El 08/02/2010 03:37 p.m., Jake escribi: Hello, The Google Datastore has four ways that you can store a Primary Key ID: String, Long, and two variations on Google's own Key object. If you want to create a parent/child relationship between two persisted objects (in your case, evento is the parent and distritos is the child), then you need to use Google's Key object as the primary ID. See: http://code.google.com/appengine/docs/java/datastore/creatinggettinganddeletingdata.html#Keys "If the class is used as a "child" class in a relationship, the key field must be of a type capable of representing an entity group parent: either a Key instance, or a Key value encoded as a string." So, you have two options: 1. Change your Long id values to Key id values. 2. Instead of storing "private distritos distrito" directly in your evento object, store a reference to the id: "private Long distrito_id" Jake On Feb 6, 4:06pm, chevelle jvall...@vnperu.com wrote: Hi I am new in the list, in these days i am trying save data between two entity beans using JPA but without success, i am cheking the log nd says: Uncaught exception from servlet javax.persistence.PersistenceException: Error in meta-data for beans.distritos.id: Cannot have a java.lang.Long primary key and be a child object (owning field is beans.evento.distrito). this is my servlet: Long id = Long.parseLong(request.getParameter("idDistrito")); response.setContentType("text/html"); EntityManager cn = emf.get().createEntityManager(); Query q = cn.createQuery("SELECT d FROM distritos d WHERE d.id = :codigo"); q.setParameter("codigo",id); distritos dist = (distritos) q.getSingleResult(); EntityManager cn2 = emf.get().createEntityManager(); cn2.getTransaction().begin(); evento e = new evento(); e.setDistrito(dist); Date fecha = new Date(); e.setFechaCreacion(fecha); try{ cn2.persist(e); response.getWriter().write("ok"); }finally{ cn2.getTransaction().commit(); cn2.close(); } this is my entity bean Evento: @Entity public class evento implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @Temporal(javax.persistence.TemporalType.DATE) private Date fechaCreacion; @JoinColumn @OneToMany(cascade = CascadeType.ALL) private distritos distrito; --getter and setter-- Distrito: @Entity public class distritos implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; private String distrito; --getter and setter-- i hope anyone help me, Thank! Johan -- 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: Persistence with JPA + GAE
Hey, I don't play with JPA too much, but I saw this: http://www.datanucleus.org/products/datanucleus/jpa/transactions.html Jake On Feb 9, 10:55 am, Johan Vallejo jvall...@vnperu.com wrote: Hi Jake, Now i have this error Log :javax.persistence.PersistenceException: Transaction is still active. You should always close your transactions correctly using commit() or rollback(). this is my code : EntityManager cn2 = emf.get().createEntityManager(); distritos dist2 = cn2.find(distritos.class, id); evento e = new evento(); e.setDistrito(dist2); Date fecha = new Date(); e.setFechaCreacion(fecha); try{ cn2.getTransaction().begin(); cn2.persist(e); cn2.getTransaction().commit(); response.getWriter().write(ok); }finally{ cn2.close(); } Distrito : @Entity public class distritos implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Extension (vendorName=datanucleus, key=gae.encoded-pk, value=true) Key id; --getter and setter-- El 08/02/2010 03:37 p.m., Jake escribió:Hello, The Google Datastore has four ways that you can store a Primary Key ID: String, Long, and two variations on Google's own Key object. If you want to create a parent/child relationship between two persisted objects (in your case, evento is the parent and distritos is the child), then you need to use Google's Key object as the primary ID. See:http://code.google.com/appengine/docs/java/datastore/creatinggettinganddeletingdata.html#KeysIf the class is used as a child class in a relationship, the key field must be of a type capable of representing an entity group parent: either a Key instance, or a Key value encoded as a string. So, you have two options: 1. Change your Long id values to Key id values. 2. Instead of storing private distritos distrito directly in your evento object, store a reference to the id: private Long distrito_id Jake On Feb 6, 4:06 pm, chevellejvall...@vnperu.comwrote:Hi I am new in the list, in these days i am trying save data between two entity beans using JPA but without success, i am cheking the log nd says: Uncaught exception from servlet javax.persistence.PersistenceException: Error in meta-data for beans.distritos.id: Cannot have a java.lang.Long primary key and be a child object (owning field is beans.evento.distrito). this is my servlet: Long id = Long.parseLong(request.getParameter(idDistrito)); response.setContentType(text/html); EntityManager cn = emf.get().createEntityManager(); Query q = cn.createQuery(SELECT d FROM distritos d WHERE d.id = :codigo); q.setParameter(codigo,id); distritos dist = (distritos) q.getSingleResult(); EntityManager cn2 = emf.get().createEntityManager(); cn2.getTransaction().begin(); evento e = new evento(); e.setDistrito(dist); Date fecha = new Date(); e.setFechaCreacion(fecha); try{ cn2.persist(e); response.getWriter().write(ok); }finally{ cn2.getTransaction().commit(); cn2.close(); } this is my entity bean Evento: @Entity public class evento implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @Temporal(javax.persistence.TemporalType.DATE) private Date fechaCreacion; @JoinColumn @OneToMany(cascade = CascadeType.ALL) private distritos distrito; --getter and setter-- Distrito: @Entity public class distritos implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; private String distrito; --getter and setter-- i hope anyone help me, Thank! Johan -- 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: Google Plugin for Eclipse 1.3 plans
This all sounds good. However please make sure that it plays well with other languages, especially scala. I opened this ticket 3 months ago with the scala eclipse plugin team. https://lampsvn.epfl.ch/trac/scala/ticket/2614 Thanks On Feb 4, 2:52 pm, Keith Platfoot kplatf...@google.com wrote: Hey all, Many of you have reported incompatibilities between the Google Plugin for Eclipse and other build systems/project structures, most notably Maven and J2EE/Dynamic Web Projects. For example, issue 1515 (Eclipse plugin requires fixed location for war directory)http://code.google.com/p/googleappengine/issues/detail?id=1515 has collected well over 100 stars, and a similar one in the GWT issue tracker has attracted a lot of attention as well. Based on this feedback, we've decided to try and address as many of the incompatibilities as possible with our upcoming 1.3 release of the plugin. To deliver on that goal, we want to share with your our current plans, and also let you know about a preview build that we'll make available so you can test the changes for yourself and give us feedback before final release. Our plans for the 1.3 release include 4 changes designed to make integration with Maven and J2EE projects easier: 1. The WAR directory can now be configured to be *any* project-relative path (e.g. src/main/webapp if you're using Maven). You'll also be able to specify whether that directory is source-only (typical Maven/J2EE scenario), or whether it should also function as the WAR output directory from which to run/debug or deploy to App Engine. If your WAR directory is input *and* output (which will remain the default for new Web App projects), the plugin will manage synchronizing the contents of WEB-INF/lib WEB-INF/classes with your project's build path and compiled output. Otherwise, we'll leave your WAR source directory alone and you'll need to specify your WAR output location when launching, deploying, etc (the plugin will remember the location once you set it the first time). 2. The Web App launch configuration UI is being redesigned to allow you to see, and if necessary change, *any* of the launch arguments. Previously, we were waiting until launch time to set many of these arguments based on heuristics that were invisible and inaccessible to you. Now you'll be in full control of how your projects get launched. Also, we're adding the capability to automatically migrate your launch configurations when necessary, for example, updating the -javaagent flag when changing App Engine SDKs. 3. GWT/App Engine projects will no longer require our SDK library on the classpath. This means Maven users will be able to pull in JAR files from their M2 repository as they're accustomed to and the plugin won't mind a bit. 4. The severity of any problem marker generated by the plugin will be fully customizable via an Errors/Warnings preference page (similar to the Java Errors/Warnings page), letting you specify either Error, Warning, or Ignore. We'll also be including a few smaller features and bug fixes as well. What does everyone think about the 4 changes outlined above? We've been testing the plugin against various Maven and J2EE configurations to try to ensure that we've eliminated the most critical roadblocks. However, we're very interested in also having you folks take it for a spin before the official release date (slated for next month). We're not quite ready yet, but stay tuned for a 1.3 preview build to be made available hopefully in a few weeks. We'll distribute it as a zip file for dropin installationhttp://code.google.com/eclipse/docs/install-from-zip.html so it will come with the standard warnings and caveats (use with a clean Eclipse install and workspace, use at your risk, etc.). However, it will hopefully give you a chance to give us any last-minute feedback about our changes before the final release. Thanks, Keith -- 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] OutOfMemoryError
Hi Lior, Are you allocating a large amount of memory up front? When you start writing a response, a fixed-size heap allocation occurs to hold it. (Implementation detail). If you've exhausted most of your JVM's memory before this point, it won't have enough left over to allocate that buffer for your response. On Tue, Feb 9, 2010 at 7:53 AM, Lior Harsat lior.har...@gmail.com wrote: Hi , I am getting OutOfMemoryErrors. The stack trace always points to the exact same place at the Jetty runtime. see stack trace below has anyone experienced this? These errors occur for the same flow in my code (sometime it succeeds and sometime it get the OutOfMemoryError). this particular flow does not return too much content (around 5KB). If my app had a memory problem I would expect to get the OutOfMemoryErrors all over the place, but, it only happens in one flow. please help. java.lang.OutOfMemoryError: Java heap space at java.nio.HeapByteBuffer.init(Unknown Source) at java.nio.ByteBuffer.allocate(Unknown Source) at com.google.apphosting.runtime.jetty.RpcResponseGenerator.newBufferFromPool(RpcResponseGenerator.java: 213) at com.google.apphosting.runtime.jetty.RpcResponseGenerator.init(RpcResponseGenerator.java: 39) at com.google.apphosting.runtime.jetty.RpcConnection.init(RpcConnection.java: 41) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java: 99) at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: 235) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5235) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5233) at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java: 24) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: 363) at com.google.net.rpc.impl.Server$2.run(Server.java:838) at com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java: 56) at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java: 536) at com.google.net.rpc.impl.Server.startRpc(Server.java:793) at com.google.net.rpc.impl.Server.processRequest(Server.java:368) at com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java: 448) at com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java: 319) at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java: 290) at com.google.net.async.Connection.handleReadEvent(Connection.java: 466) at com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java: 759) at com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java: 205) at com.google.net.async.EventDispatcher.loop(EventDispatcher.java: 101) at com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java: 251) at com.google.apphosting.runtime.JavaRuntime $RpcRunnable.run(JavaRuntime.java:394) at java.lang.Thread.run(Unknown Source) -- 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] java.lang.VerifyError
Hi Steve, thanks for bringing this to our attention. We've identified a problem on our end and we're in the process of correcting it. You're of course free to continue using an older version of the SDK, but newer versions are not susceptible to this problem. Max On Tue, Feb 9, 2010 at 5:56 AM, Steve Shrader steveshra...@gmail.comwrote: I have an application that has been deployed and running for several months. Yesterday it began throwing the error java.lang.VerifyError. No new deployments or changes in usage on my side. The code throwing the error is in this method... /** * Retrieve a list of Expense depending on the Dates and Vendor passed in. There will be two * execution paths because Vendor does not need to be passed in as a filter. */ @SuppressWarnings(unchecked) //query is against Expense.class so it will return ListExpense public Liststeveshrader.budget.client.dto.Expense getExpenses(Date startDate, Date endDate, String vendor) { Liststeveshrader.budget.client.dto.Expense dtoExpenses = new ArrayListsteveshrader.budget.client.dto.Expense(); String userId = getUserId(); if(userId != null) { ListExpense expenses = null; PersistenceManager pm = PMF.get().getPersistenceManager(); Query query = pm.newQuery(Expense.class); query.declareImports(import java.util.Date); query.setOrdering(date asc); String queryFilter = userId == userIdParam date = startDateParam date = endDateParam; Map queryParameters = new HashMap(); queryParameters.put(userIdParam, userId); queryParameters.put(startDateParam, startDate); queryParameters.put(endDateParam, endDate); if(vendor != null vendor.trim().length() 0) { //if a vendor passed in queryFilter = queryFilter + vendor == vendorParam; queryParameters.put(vendorParam, vendor); } query.setFilter(queryFilter); expenses = (ListExpense) query.executeWithMap(queryParameters); for(Expense e : expenses) { dtoExpenses.add(new steveshrader.budget.client.dto.Expense(e.getId(), e.getDate(), e.getAmount(), e.getVendor(), e.getExpenseType(), e.getPaymentType())); } pm.close(); } return dtoExpenses; } The complete stack trace is... javax.servlet.ServletContext log: Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.util.List steveshrader.budget.client.BudgetService.getExpenses(java.util.Date,java.util.Date,java.lang.String)' threw an unexpected exception: java.lang.VerifyError: org/datanucleus/ store/appengine/query/StreamingQueryResult$1 at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java: 360) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java: 546) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java: 166) at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java: 86) at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) 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.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java: 97) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java: 35) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java: 43) 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
Re: [appengine-java] Re: vs-accounting.appspot.com - datastore viewer error
One solution is to run some cron / task-queue based job which fixes up the entities in the background. On Tue, Feb 9, 2010 at 5:40 AM, aswath satrasala aswath.satras...@gmail.com wrote: Hello Toby, thanks. Yes, the property type email could have been empty. Further dev, I will change them to non-empty. Now, I cannot trace back those entities from my application, as it is being tested and is logged in by different users and entities are created. How can I correct this situation? -Aswath On Sat, Feb 6, 2010 at 1:06 AM, Toby Reyelts to...@google.com wrote: You have an empty property of type e-mail, and that makes the datastore viewer unhappy. You need to either use a different type that can be non-empty (like String), or have non-empty e-mails. On Thu, Feb 4, 2010 at 10:25 PM, aswath satrasala aswath.satras...@gmail.com wrote: My application is running fine. I am still getting the datastore viewer error.What can we do in this scenario. How can we get support? -Aswath On Mon, Feb 1, 2010 at 12:36 PM, aswath satrasala aswath.satras...@gmail.com wrote: Hello GAE team, I am still not able to use the DataStore viewer for my app-id 'vs-accounting' Thanks -Aswath On Thu, Jan 28, 2010 at 11:08 AM, aswath satrasala aswath.satras...@gmail.com wrote: Local file: datastore-indexes !-- Used 2 times in query history -- datastore-index kind=Tenant ancestor=true source=auto property name=tenants_INTEGER_IDX direction=asc/ /datastore-index !-- Used 1 time in query history -- datastore-index kind=Party ancestor=true source=auto property name=partys_INTEGER_IDX direction=asc/ /datastore-index !-- Used 1 time in query history -- datastore-index kind=SecurityGroup ancestor=true source=auto property name=secGrpList_INTEGER_IDX direction=asc/ /datastore-index datastore-index kind=PartyRole ancestor=true source=auto property name=partyRoles_INTEGER_IDX direction=asc/ /datastore-index /datastore-indexes Production: Party partys_INTEGER_IDX ▲ Includes ancestors *Serving* PartyRole partyRoles_INTEGER_IDX ▲ Includes ancestors *Serving* SecurityGroup secGrpList_INTEGER_IDX ▲ Includes ancestors *Serving* Tenant tenants_INTEGER_IDX ▲ Includes ancestors 12hrs ago , the secGrpList_INTEGER_IDX was not shown on the production admin console. Now, it is showing up. The datastore viewer is still responding back error page. -Aswath On Thu, Jan 28, 2010 at 2:48 AM, Ikai L (Google) ika...@google.comwrote: What does you local indexes file look like? Can you post the indexes listed in your production admin console? On Tue, Jan 26, 2010 at 11:24 PM, aswath satrasala aswath.satras...@gmail.com wrote: Hello GAE team, Further observations made while testing the app. I am not able to write entities to the datastore. Upon examining the logs, I found the following error. com.veersoft.action.CreateTenantAction doCreate: com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found.. datastore-index kind=SecurityGroup ancestor=true source=manual property name=secGrpList_INTEGER_IDX direction=asc/ /datastore-index The application is fine on the local develpment server. -Aswath On Tue, Jan 26, 2010 at 8:51 PM, aswath satrasala aswath.satras...@gmail.com wrote: Hello, My app-id is vs-accounting. I login into appengine.google.com. I choose the above application. Then I click on the datastore viewer. I get the error Server Error A server error has occurred. Return to Applications screen » https://appengine.google.com/ -Aswath -- 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. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- 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,
[appengine-java] Re: Use Blobstore Java API with GWT
Dou you have an example source code to do this. i am bit lost in this matter? On Dec 19 2009, 1:28 am, Henry enricrequ...@gmail.com wrote: Yes, I did like this and works without problems...thank for the response! On 17 Dec, 09:42, Raphael André Bauer raphael.andre.ba...@gmail.com wrote: hey henry, the gwt frontend code looks like java, but it is crosscompiled. that's the reason why the imports cannot be found - it's technically something completely different. so what you have to do is having an RPC call to your server, that returns a valid form url where you can upload your files. basically BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); must be in the servlet of your RPC and the value returned by then you get this url back and add it to your client code in .setAction .. hope that helps, ra On Thu, Dec 17, 2009 at 12:08 AM, Henry enricrequ...@gmail.com wrote: Hi Guys, Im trying to upload images using the new Blobstore API to the app engine with GWT. Ive created a FormPanel() to upload the images to the app engine, but when im trying to set up the action in the form using BlobstoreService, i cant because the import com.google.appengine cannot be resolved. My question is: how can I set up the action on the form using the BlobstoreService?? I've this code in the client side: import com.google.appengine.api.blobstore.BlobstoreService; FormPanel form = new FormPanel(); form.setEncoding(FormPanel.ENCODING_MULTIPART); form.setMethod(FormPanel.METHOD_POST); BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); form.setAction(blobstoreService.createUploadUrl(handizo/ upload)); error: import com.google.appengine cannot be resolved. Ive also tried to setup the action without the BlobstoreService, but when the form is read in the server side using the BlobstoreService: private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { MapString, BlobKey blobs = blobstoreService.getUploadedBlobs(req); BlobKey blobKey = blobs.get(myFile); if (blobKey == null) { resp.sendRedirect(/); } else { resp.sendRedirect(/serve?blob-key= + blobKey.getKeyString()); } I've this other error saying me that I've to set up the action using the BlobstoreService. Error: Must be called from a blob upload callback request. at com.google.appengine.api.blobstore.BlobstoreServiceImpl.getUploadedBlobs (BlobstoreServiceImpl.java:97) at com.handizo.server.service.FileUploadAnnouncementServlet.doPost (FileUploadAnnouncementServlet.java:23) at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) So its possible to user the BlobstoreService with GWT by the moment?? Thanks in advance :-) -- 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] makeImageFromBlob but no storeImageToBlob ?
Hello, does anyone know how to update a (image-)blob file after image transformation via ImageService? // LOAD ImagesServiceFactory.makeImageFromBlob(blobKey); // TRANSFORM Transform resize = ImagesServiceFactory.makeResize(150, 200); Image newImage = imagesService.applyTransform(resize, oldImage); // UPDATE NOT POSSIBLE? update blob? thanks in advance alex -- 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] queue.xml question
The bucket size and rate seem to have no effect when running my application in eclipse. The tasks added to my queue are processed at the default rate. Is there something I need to know? ?xml version=1.0 encoding=UTF-8? queue-entries queue nameetfease/name rate0/m/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] VerifyError on StreamingQueryResult
Look similar to http://groups.google.com/group/google-appengine-java/browse_thread/thread/daa540465c4605d/c155d492b8fe89c9?lnk=gstq=StreamingQueryResult%241#c155d492b8fe89c9 app id: swiatlo-czuli gae version: 1.2.1 (?) Uncaught exception from servlet java.lang.VerifyError: org/datanucleus/store/appengine/query/ StreamingQueryResult$1 at org.datanucleus.store.appengine.query.StreamingQueryResult.listIterator(StreamingQueryResult.java: 128) at org.datanucleus.store.appengine.query.StreamingQueryResult.iterator(StreamingQueryResult.java: 120) at pl.simpatico.swiatloczuli.server.supports.FolderSupport.getFoldersTree(FolderSupport.java: 179) at org.apache.jsp.gallery_jsp._jspService(gallery_jsp.java:83) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) 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.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java: 129) at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java: 77) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at pl.simpatico.swiatloczuli.server.filter.CharEncodingFilter.doFilter(CharEncodingFilter.java: 44) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java: 97) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java: 35) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java: 43) 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.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java: 238) 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 org.mortbay.jetty.HttpConnection $RequestHandler.headerComplete(HttpConnection.java:830) at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java: 76) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java: 135) at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: 235) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5485) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5483) at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java: 24) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: 363) at com.google.net.rpc.impl.Server$2.run(Server.java:837) at com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java: 56) at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java: 536) at com.google.net.rpc.impl.Server.startRpc(Server.java:792) at com.google.net.rpc.impl.Server.processRequest(Server.java:367) at com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java: 448) at com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java: 319) at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java: 290) at com.google.net.async.Connection.handleReadEvent(Connection.java: 474) at com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java: 774) at com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java: 205) at com.google.net.async.EventDispatcher.loop(EventDispatcher.java: 101) at com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java: 251) at
[appengine-java] java.lang.NoClassDefFoundError: Could not initialize ... PMF
Error for ... java.lang.NoClassDefFoundError: Could not initialize class dao.PMF at my app got the above problems quite often. And, it will get cured by itself after a while. Any idea how to fix it totally? i checked - nothing above quote limits. -- 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] Re: Persistence with JPA + GAE
Hi Johan, you can use the Long as PK @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; []'s Diego 2010/2/9 Johan Vallejo jvall...@vnperu.com Hi Jake, Now i have this error Log : javax.persistence.PersistenceException: Transaction is still active. You should always close your transactions correctly using commit() or rollback(). this is my code : EntityManager cn2 = emf.get().createEntityManager(); distritos dist2 = cn2.find(distritos.class, id); evento e = new evento(); e.setDistrito(dist2); Date fecha = new Date(); e.setFechaCreacion(fecha); try{ cn2.getTransaction().begin(); cn2.persist(e); cn2.getTransaction().commit(); response.getWriter().write(ok); }finally{ cn2.close(); } Distrito : @Entity public class distritos implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Extension (vendorName=datanucleus, key=gae.encoded-pk, value=true) Key id; --getter and setter-- El 08/02/2010 03:37 p.m., Jake escribió: Hello, The Google Datastore has four ways that you can store a Primary Key ID: String, Long, and two variations on Google's own Key object. If you want to create a parent/child relationship between two persisted objects (in your case, evento is the parent and distritos is the child), then you need to use Google's Key object as the primary ID. See: http://code.google.com/appengine/docs/java/datastore/creatinggettinganddeletingdata.html#Keys If the class is used as a child class in a relationship, the key field must be of a type capable of representing an entity group parent: either a Key instance, or a Key value encoded as a string. So, you have two options: 1. Change your Long id values to Key id values. 2. Instead of storing private distritos distrito directly in your evento object, store a reference to the id: private Long distrito_id Jake On Feb 6, 4:06 pm, chevelle jvall...@vnperu.com jvall...@vnperu.com wrote: Hi I am new in the list, in these days i am trying save data between two entity beans using JPA but without success, i am cheking the log nd says: Uncaught exception from servlet javax.persistence.PersistenceException: Error in meta-data forbeans.distritos.id: Cannot have a java.lang.Long primary key and be a child object (owning field is beans.evento.distrito). this is my servlet: Long id = Long.parseLong(request.getParameter(idDistrito)); response.setContentType(text/html); EntityManager cn = emf.get().createEntityManager(); Query q = cn.createQuery(SELECT d FROM distritos d WHEREd.id = :codigo); q.setParameter(codigo,id); distritos dist = (distritos) q.getSingleResult(); EntityManager cn2 = emf.get().createEntityManager(); cn2.getTransaction().begin(); evento e = new evento(); e.setDistrito(dist); Date fecha = new Date(); e.setFechaCreacion(fecha); try{ cn2.persist(e); response.getWriter().write(ok); }finally{ cn2.getTransaction().commit(); cn2.close(); } this is my entity bean Evento: @Entity public class evento implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @Temporal(javax.persistence.TemporalType.DATE) private Date fechaCreacion; @JoinColumn @OneToMany(cascade = CascadeType.ALL) private distritos distrito; --getter and setter-- Distrito: @Entity public class distritos implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; private String distrito; --getter and setter-- i hope anyone help me, Thank! Johan -- 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] VerifyError on StreamingQueryResult
Thanks for the report. This is indeed the same issue. We're testing a fix now and hope to have this resolved very soon. Max On Tue, Feb 9, 2010 at 4:27 AM, paweł majewski swiatloczuli...@gmail.comwrote: Look similar to http://groups.google.com/group/google-appengine-java/browse_thread/thread/daa540465c4605d/c155d492b8fe89c9?lnk=gstq=StreamingQueryResult%241#c155d492b8fe89c9 app id: swiatlo-czuli gae version: 1.2.1 (?) Uncaught exception from servlet java.lang.VerifyError: org/datanucleus/store/appengine/query/ StreamingQueryResult$1 at org.datanucleus.store.appengine.query.StreamingQueryResult.listIterator(StreamingQueryResult.java: 128) at org.datanucleus.store.appengine.query.StreamingQueryResult.iterator(StreamingQueryResult.java: 120) at pl.simpatico.swiatloczuli.server.supports.FolderSupport.getFoldersTree(FolderSupport.java: 179) at org.apache.jsp.gallery_jsp._jspService(gallery_jsp.java:83) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) 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.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java: 129) at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java: 77) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at pl.simpatico.swiatloczuli.server.filter.CharEncodingFilter.doFilter(CharEncodingFilter.java: 44) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java: 97) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java: 35) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java: 43) 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.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java: 238) 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 org.mortbay.jetty.HttpConnection $RequestHandler.headerComplete(HttpConnection.java:830) at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java: 76) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java: 135) at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: 235) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5485) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5483) at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java: 24) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: 363) at com.google.net.rpc.impl.Server$2.run(Server.java:837) at com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java: 56) at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java: 536) at com.google.net.rpc.impl.Server.startRpc(Server.java:792) at com.google.net.rpc.impl.Server.processRequest(Server.java:367) at com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java: 448) at com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java: 319) at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java: 290) at com.google.net.async.Connection.handleReadEvent(Connection.java: 474) at
[appengine-java] DataStore Error 1000000 characters, but I'm not persisting
Hello, I'm getting the following error: java.lang.IllegalArgumentException: string property _values is too long. It cannot exceed 100 characters. The trick is, I'm not persisting any Blobs and certainly none called _values. I do have one object with a Blob field, but I'm not persisting anything to that field to cause the above exception. Also, this is a new issue and that Blob has been in my application for awhile. All I'm doing is viewing pages that query the datastore. My admin panel doesn't show any quota issues. My newest change is that I'm uploading a 350K XML file (a book), applying some XSLT translation using Saxon and storing the result in an application variable, and displaying certain chunks of that file depending on the clicked page. I do have sessions enabled, which I fear is related, but I'm not sure how to resolve this. Thanks in advance for any help! Jake /titlepage java.lang.IllegalArgumentException: string property _values is too long. It cannot exceed 100 characters. at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java: 33) at com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(DatastoreApiHelper.java: 60) at com.google.appengine.api.datastore.DatastoreServiceImpl $2.run(DatastoreServiceImpl.java:163) at com.google.appengine.api.datastore.TransactionRunner.runInTransaction(TransactionRunner.java: 30) at com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java: 151) at com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java: 131) at com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java: 123) at com.google.apphosting.runtime.jetty.SessionManager $AppEngineSession.save(SessionManager.java:162) at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java: 41) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java: 43) 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.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java: 238) 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 org.mortbay.jetty.HttpConnection $RequestHandler.headerComplete(HttpConnection.java:830) at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java: 76) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java: 135) at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: 235) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5485) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:5483) at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java: 24) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: 363) at com.google.net.rpc.impl.Server$2.run(Server.java:837) at com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java: 56) at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java: 536) at com.google.net.rpc.impl.Server.startRpc(Server.java:792) at com.google.net.rpc.impl.Server.processRequest(Server.java:367) at com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java: 448) at com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java: 319) at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java: 290) at com.google.net.async.Connection.handleReadEvent(Connection.java: 474) at com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java: 774) at com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java: 205) at com.google.net.async.EventDispatcher.loop(EventDispatcher.java: 101) at
Re: [appengine-java] Re: Google Plugin for Eclipse 1.3 plans
I'm a bit of a Scala enthusiast myself, so I'm glad to see folks using Scala on App Engine. Last I checked, Miles was swamped, but here's hoping he can do this! On Tue, Feb 9, 2010 at 8:57 AM, ga...@dynafocus.com ga...@dynafocus.comwrote: This all sounds good. However please make sure that it plays well with other languages, especially scala. I opened this ticket 3 months ago with the scala eclipse plugin team. https://lampsvn.epfl.ch/trac/scala/ticket/2614 Thanks On Feb 4, 2:52 pm, Keith Platfoot kplatf...@google.com wrote: Hey all, Many of you have reported incompatibilities between the Google Plugin for Eclipse and other build systems/project structures, most notably Maven and J2EE/Dynamic Web Projects. For example, issue 1515 (Eclipse plugin requires fixed location for war directory) http://code.google.com/p/googleappengine/issues/detail?id=1515 has collected well over 100 stars, and a similar one in the GWT issue tracker has attracted a lot of attention as well. Based on this feedback, we've decided to try and address as many of the incompatibilities as possible with our upcoming 1.3 release of the plugin. To deliver on that goal, we want to share with your our current plans, and also let you know about a preview build that we'll make available so you can test the changes for yourself and give us feedback before final release. Our plans for the 1.3 release include 4 changes designed to make integration with Maven and J2EE projects easier: 1. The WAR directory can now be configured to be *any* project-relative path (e.g. src/main/webapp if you're using Maven). You'll also be able to specify whether that directory is source-only (typical Maven/J2EE scenario), or whether it should also function as the WAR output directory from which to run/debug or deploy to App Engine. If your WAR directory is input *and* output (which will remain the default for new Web App projects), the plugin will manage synchronizing the contents of WEB-INF/lib WEB-INF/classes with your project's build path and compiled output. Otherwise, we'll leave your WAR source directory alone and you'll need to specify your WAR output location when launching, deploying, etc (the plugin will remember the location once you set it the first time). 2. The Web App launch configuration UI is being redesigned to allow you to see, and if necessary change, *any* of the launch arguments. Previously, we were waiting until launch time to set many of these arguments based on heuristics that were invisible and inaccessible to you. Now you'll be in full control of how your projects get launched. Also, we're adding the capability to automatically migrate your launch configurations when necessary, for example, updating the -javaagent flag when changing App Engine SDKs. 3. GWT/App Engine projects will no longer require our SDK library on the classpath. This means Maven users will be able to pull in JAR files from their M2 repository as they're accustomed to and the plugin won't mind a bit. 4. The severity of any problem marker generated by the plugin will be fully customizable via an Errors/Warnings preference page (similar to the Java Errors/Warnings page), letting you specify either Error, Warning, or Ignore. We'll also be including a few smaller features and bug fixes as well. What does everyone think about the 4 changes outlined above? We've been testing the plugin against various Maven and J2EE configurations to try to ensure that we've eliminated the most critical roadblocks. However, we're very interested in also having you folks take it for a spin before the official release date (slated for next month). We're not quite ready yet, but stay tuned for a 1.3 preview build to be made available hopefully in a few weeks. We'll distribute it as a zip file for dropin installationhttp://code.google.com/eclipse/docs/install-from-zip.html so it will come with the standard warnings and caveats (use with a clean Eclipse install and workspace, use at your risk, etc.). However, it will hopefully give you a chance to give us any last-minute feedback about our changes before the final release. Thanks, Keith -- 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. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- You received this
Re: [appengine-java] Re: Persistence with JPA + GAE
Hi Diego Yes, i try using Long and Key but with both i have the error Log : javax.persistence.PersistenceException: Transaction is still active. You should always close your transactions correctly using commit() or rollback(). El 09/02/2010 01:06 p.m., Diego Osse Fernandes escribi: Hi Johan, you can use the Long as PK @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; []'s Diego 2010/2/9 Johan Vallejo jvall...@vnperu.com Hi Jake, Now i have this error Log : javax.persistence.PersistenceException: Transaction is still active. You should always close your transactions correctly using commit() or rollback(). this is my code : EntityManager cn2 = emf.get().createEntityManager(); distritos dist2 = cn2.find(distritos.class, id); evento e = new evento(); e.setDistrito(dist2); Date fecha = new Date(); e.setFechaCreacion(fecha); try{ cn2.getTransaction().begin(); cn2.persist(e); cn2.getTransaction().commit(); response.getWriter().write("ok"); }finally{ cn2.close(); } Distrito : @Entity public class distritos implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Extension (vendorName="datanucleus", key="gae.encoded-pk", value="true") Key id; --getter and setter-- El 08/02/2010 03:37 p.m., Jake escribi: Hello, The Google Datastore has four ways that you can store a Primary Key ID: String, Long, and two variations on Google's own Key object. If you want to create a parent/child relationship between two persisted objects (in your case, evento is the parent and distritos is the child), then you need to use Google's Key object as the primary ID. See: http://code.google.com/appengine/docs/java/datastore/creatinggettinganddeletingdata.html#Keys "If the class is used as a "child" class in a relationship, the key field must be of a type capable of representing an entity group parent: either a Key instance, or a Key value encoded as a string." So, you have two options: 1. Change your Long id values to Key id values. 2. Instead of storing "private distritos distrito" directly in your evento object, store a reference to the id: "private Long distrito_id" Jake On Feb 6, 4:06pm, chevelle jvall...@vnperu.com wrote: Hi I am new in the list, in these days i am trying save data between two entity beans using JPA but without success, i am cheking the log nd says: Uncaught exception from servlet javax.persistence.PersistenceException: Error in meta-data for beans.distritos.id: Cannot have a java.lang.Long primary key and be a child object (owning field is beans.evento.distrito). this is my servlet: Long id = Long.parseLong(request.getParameter("idDistrito")); response.setContentType("text/html"); EntityManager cn = emf.get().createEntityManager(); Query q = cn.createQuery("SELECT d FROM distritos d WHERE d.id = :codigo"); q.setParameter("codigo",id); distritos dist = (distritos) q.getSingleResult(); EntityManager cn2 = emf.get().createEntityManager(); cn2.getTransaction().begin(); evento e = new evento(); e.setDistrito(dist); Date fecha = new Date(); e.setFechaCreacion(fecha); try{ cn2.persist(e); response.getWriter().write("ok"); }finally{ cn2.getTransaction().commit(); cn2.close(); } this is my entity bean Evento: @Entity public class evento implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @Temporal(javax.persistence.TemporalType.DATE) private Date fechaCreacion; @JoinColumn @OneToMany(cascade = CascadeType.ALL) private distritos distrito; --getter and setter-- Distrito: @Entity public class distritos implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; private String distrito; --getter and setter-- i hope anyone help me, Thank! Johan -- 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. -- 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. -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send
[appengine-java] Discussion on will-it-play-in-app-engine
Has anyone tried some of the payment gateways within AppEngine? I am looking at the Chase Orbital Secure Payment Gateway. One issue I have from an initial look at their Developer Guide is the requirement for an additional SSL security provider: security.provider.3=com.sun.net.ssl.internal.ssl.Provider -- 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] Tag search
I already searchedread app-engine(|-java|-python) forums for tag search and it looks like the the best way to implement tags is unordered relationship many to many. I can search for object with one tag. But I would like to specify multiple tags. e.g. I wish objects that has all 10 tags that I specify or any of 10 tags that I specify. I would like to generate tag cloud also. But SELECT name, count(name) from Tags GROUP by name is not supported Is that possible to implement all most common tag features with app engine? I start thinking that it is not possible. I will have millions of object. So I can't select all objects. Have someone implemented tags in App Engine? Please, tell if know that it is not possible to implement tags in App Engine. Thanks, Max -- 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] Tag search
Hi Max, you could store tags as a multi-valued property which will allow you to search for entities with all tags in a single query. To track how common a tag is you should maintain a count entity for each one. On 10 Feb 2010, at 02:23, Max wrote: I already searchedread app-engine(|-java|-python) forums for tag search and it looks like the the best way to implement tags is unordered relationship many to many. I can search for object with one tag. But I would like to specify multiple tags. e.g. I wish objects that has all 10 tags that I specify or any of 10 tags that I specify. I would like to generate tag cloud also. But SELECT name, count(name) from Tags GROUP by name is not supported Is that possible to implement all most common tag features with app engine? I start thinking that it is not possible. I will have millions of object. So I can't select all objects. Have someone implemented tags in App Engine? Please, tell if know that it is not possible to implement tags in App Engine. Thanks, Max -- 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 . -- 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] Re: Google Plugin for Eclipse 1.3 plans
I filed http://code.google.com/p/google-web-toolkit/issues/detail?id=4608. GPE should NPE even if the source language is Scala. On Tue, Feb 9, 2010 at 11:57 AM, ga...@dynafocus.com ga...@dynafocus.comwrote: This all sounds good. However please make sure that it plays well with other languages, especially scala. I opened this ticket 3 months ago with the scala eclipse plugin team. https://lampsvn.epfl.ch/trac/scala/ticket/2614 Thanks On Feb 4, 2:52 pm, Keith Platfoot kplatf...@google.com wrote: Hey all, Many of you have reported incompatibilities between the Google Plugin for Eclipse and other build systems/project structures, most notably Maven and J2EE/Dynamic Web Projects. For example, issue 1515 (Eclipse plugin requires fixed location for war directory) http://code.google.com/p/googleappengine/issues/detail?id=1515 has collected well over 100 stars, and a similar one in the GWT issue tracker has attracted a lot of attention as well. Based on this feedback, we've decided to try and address as many of the incompatibilities as possible with our upcoming 1.3 release of the plugin. To deliver on that goal, we want to share with your our current plans, and also let you know about a preview build that we'll make available so you can test the changes for yourself and give us feedback before final release. Our plans for the 1.3 release include 4 changes designed to make integration with Maven and J2EE projects easier: 1. The WAR directory can now be configured to be *any* project-relative path (e.g. src/main/webapp if you're using Maven). You'll also be able to specify whether that directory is source-only (typical Maven/J2EE scenario), or whether it should also function as the WAR output directory from which to run/debug or deploy to App Engine. If your WAR directory is input *and* output (which will remain the default for new Web App projects), the plugin will manage synchronizing the contents of WEB-INF/lib WEB-INF/classes with your project's build path and compiled output. Otherwise, we'll leave your WAR source directory alone and you'll need to specify your WAR output location when launching, deploying, etc (the plugin will remember the location once you set it the first time). 2. The Web App launch configuration UI is being redesigned to allow you to see, and if necessary change, *any* of the launch arguments. Previously, we were waiting until launch time to set many of these arguments based on heuristics that were invisible and inaccessible to you. Now you'll be in full control of how your projects get launched. Also, we're adding the capability to automatically migrate your launch configurations when necessary, for example, updating the -javaagent flag when changing App Engine SDKs. 3. GWT/App Engine projects will no longer require our SDK library on the classpath. This means Maven users will be able to pull in JAR files from their M2 repository as they're accustomed to and the plugin won't mind a bit. 4. The severity of any problem marker generated by the plugin will be fully customizable via an Errors/Warnings preference page (similar to the Java Errors/Warnings page), letting you specify either Error, Warning, or Ignore. We'll also be including a few smaller features and bug fixes as well. What does everyone think about the 4 changes outlined above? We've been testing the plugin against various Maven and J2EE configurations to try to ensure that we've eliminated the most critical roadblocks. However, we're very interested in also having you folks take it for a spin before the official release date (slated for next month). We're not quite ready yet, but stay tuned for a 1.3 preview build to be made available hopefully in a few weeks. We'll distribute it as a zip file for dropin installationhttp://code.google.com/eclipse/docs/install-from-zip.html so it will come with the standard warnings and caveats (use with a clean Eclipse install and workspace, use at your risk, etc.). However, it will hopefully give you a chance to give us any last-minute feedback about our changes before the final release. Thanks, Keith -- 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. -- Miguel -- 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
Re: [appengine-java] 500 Server error when loading data into memory
There's a 10mb limit on files, but I'm wondering if we accidentally trip this if it's a bit lower. What happens if you break the zip file up and load it piecemeal? On Wed, Feb 3, 2010 at 1:46 PM, Alyona medel...@gmail.com wrote: Hi, I get a 500 Server error when running my app maui-indexer. It might have something to do with the timeout or the quota, when a relatively large zipped text file (~9M) is loaded into memory, which is required by my app. I had now problems uploading using eclipse and I can't see any specific info in the error logs on the dashboard. Could you please advise what I need to do to make it work? Cheers Alyona - Error: Server Error The server encountered an error and could not complete your request. If the problem persists, please report your problem and mention this error message and the query that caused it. -- 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. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- 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] Best option to scope transactions for fast RPC calls
If the Merchants are the root entity, then a transaction on the Merchant's entity group will not trample a transaction on another Merchant's entity group. Is this how you have things set up? On Fri, Feb 5, 2010 at 1:16 PM, Bourke Floyd IV chb...@gmail.com wrote: I'm working on a RPC like service and I was wondering if I picked the right method to implement my classes that I'll be persisting to the datastore. Also note that I allow users to create their own keys used to lookup their data. Currently I have a MerchantClass Entity that holds my merchants and a DataWrapper Entity that holds the data they are looking for. Several merchants could be making requests at the same time, and as I understand it could cause (read/write) transactions to fail. I don't have any relationships at the moment because I don't want opening a Transaction on the MerchantClass Entity to prevent read/writes to the DataWrapper Entities. However, I do want to limit the scope in a more modular way to keep a merchants transactions from interfering with other merchants transactions. My overall goal is speed if I just need to keep it simple. Currently I can get a merchant and verify their status, then get their requested transaction without any problems. But I merchants can't register two transactions with the same key, and I'm a little worried that one merchant could interfere with the success of another merchants successful transactions. Thanks for input! -- 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. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- 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] Error while uploading the App - Unable to update
Is there any information in that log file that the error mentioned? On Mon, Feb 8, 2010 at 3:22 AM, mike22153 groeg...@gmx.de wrote: Hi, I just tried to upload my first App to the Google App Engine. I tried the Eclipse Plugin and appengine-java-sdk-1.3.0/bin/appcfg.sh. I have Suse Linux 10.3 and jdk1.6.0_18 installed. Each time I tried, I got the following error: -- Reading application configuration data... Beginning server interaction for ... 0% Creating staging directory 5% Scanning for jsp files. 20% Scanning files on local disk. 25% Initiating update. Email: ...@xxx.xx Password for ...@xxx.xx: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.DefaultSSLContextImpl) Unable to update app: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.DefaultSSLContextImpl) Please see the logs [/tmp/appcfg55133.log] for further information. Has anybody an idea? On my pc, the App is running. Best regards, Michael -- 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. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- 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] Estimated expiration average of an entity in memcache
You really aren't going to get a useful answer to this question without doing some testing yourself. There are several factors that can influence this: - How many items are you putting into Memcache? - How large are the items? - Are you forcing the old items out via LRU? Other applications with even only minor deviations in numbers from yours will see significantly different results simply due to different usage patterns. I like the way you're approaching the problem - non-critical data that is regularly flushed. This is the way we'd like to encourage developers to think about how to scale their applications: differentiating between what is critical, non-critical, what can be done synchronously versus what can be done asynchronously. I'd toy with the cron jobs and track a miss rate as a function of the length of the cron job interval. There's probably a stable balance between acceptable miss rate and minimizing datastore updates you can achieve that may very well change with time as you change the data being saved or as your application's usage patterns shift. On Sun, Feb 7, 2010 at 4:34 AM, a.maza andr.m...@gmail.com wrote: Hello, I am keeping non-critical data (which is updated quite often) in memcache. I would like to use a cronjob to fetch the data in frequent intervalls from memcache in order to persist it to the datastore. Thus, I would be interested if anyone has any experiences with the average expiration time of entities that are kept in memcache (and there quite frequentally accessed) - 5min? 10min? Thanks and regards, andr -- 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. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- 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: What is the most optimal way to delete and create objects in the datastore?
Ikai, First, I really would like to thank you for your response. I appreciate the details and links you gave me on improving datastore performance. I work on research, and somehow I need to able to update and/or delete significant amounts of data. This is part of a setup cost our application has to undergo in order to function properly. Our users really do not expect to see an immediate response from the application, but we also would like to reduce the amount of delay when processing data. I think your links about using cache, batch processing, and AJAX operations could help us to alleviate the setup cost of our application. Those may be the alternative mechanisms that we need in our data intensive operations. Are you aware of the possibility of running computer simulations in App Engine? Is it possible? Is there a way to keep running a process longer than the timeout deadlines? Thanks for your help. On Feb 9, 3:20 pm, Ikai L (Google) ika...@google.com wrote: We're always looking at ways to improve datastore performance, but we really try to push developers towards optimizing the performance from the User's perspective. That is - if you have to delete or create 150 persistent, indexed objects, you may want to rethink what problems you are trying to solve. Users have come to expect a certain level of quality of service when it comes to certain types of page serves, and you can fake this out by using Memcache and task queues for writes. True, the amount of computation still does not go down, but there's a net gain here from an improved experience and increased user retention. I'm not surprised that you're seeing the numbers you're seeing based on the data you've provided. To really scale up, think about how to make operations fast. There are a few tips that go a long way: - make as much as you can asynchronous. For some operations this may not make sense - cache heavily. Use a write-through cache when saving and task queues for big saves - write to as few indexes and entities as possible if you need to do anything synchronously This is one of my favorite articles about this subject: http://highscalability.com/blog/2010/1/22/how-buddypoke-scales-on-fac... http://highscalability.com/blog/2010/1/22/how-buddypoke-scales-on-fac...BuddyPoke realized early on they weren't working with a relational database and made full use of the fact that App Engine's datastore is build on a distributed key-value store with custom indexing. On Mon, Feb 8, 2010 at 11:37 AM, RSN romeo.sanc...@gmail.com wrote: Hi, I am kind of new to GAE, and I was wondering if someone has statistics or data that shows what are the most optimal (efficient) ways for deleting and creating objects in the Datastore. I did some small experiments in order to identify a more efficient mechanism to delete and create objects in the datastore. In these tests, I have a single persistent object that contains 8 persistent fields. In the first test, I have a loop of 150 instances, and at each iteration I create the persistent object, and I call the makePersistent function to add the single instance to the datastore. This should take much longer, and it does. It takes on average 16-17 seconds. In the second test, the loop only creates the 150 objects, and then outside the loop, I call the makePersistentAll function, passing all my collection of objects. As it is mentioned in the documentation, this is supposed to be faster, and it is. It takes on average 1-2 seconds. I have experimented only with one way for deleting objects. Basically, I make a query to retrieve ONLY the keys of my objects. Query query = pm.newQuery(select objectKey from + objectClass.getName()); keys = (ListKey) query.execute(); Then, once all keys have been retrieved, I call the following service method: DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); ds.delete(keys); To delete the objects. It takes on average 2-4 seconds to delete 150 instances. I was just wondering if I am missing something, and if there is a more efficient way for deleting (or creating) objects in the datastore. I see also that there is a higher variance in deleting objects than in creating them. For example, the fastest run in my test took 1.6 seconds to delete the 150 instances, while the slowest run took almost 8 seconds. I do not see this variability when I create the objects (i.e., when I add them to GAE). Any advice or suggestions on alternative methods for doing these kinds of operations in GAE is GREATLY APPRECIATED. Or, If I am in the right track, please let me know. THANKS A LOT. -- 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 togoogle-appengine-j...@googlegroups.com. To unsubscribe from this group, send email
Re: [appengine-java] 500 Server error when loading data into memory
How large is your file unzipped? If it's 9M compressed, I wouldn't be surprised if it comes out to be 100M decompressed in Java heap space causing your heap to be blown out. Are you sure there aren't any errors in your admin console? On Wed, Feb 3, 2010 at 4:46 PM, Alyona medel...@gmail.com wrote: Hi, I get a 500 Server error when running my app maui-indexer. It might have something to do with the timeout or the quota, when a relatively large zipped text file (~9M) is loaded into memory, which is required by my app. I had now problems uploading using eclipse and I can't see any specific info in the error logs on the dashboard. Could you please advise what I need to do to make it work? Cheers Alyona - Error: Server Error The server encountered an error and could not complete your request. If the problem persists, please report your problem and mention this error message and the query that caused it. -- 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] Re: What is the most optimal way to delete and create objects in the datastore?
Thanks again! On Feb 9, 3:46 pm, Ikai L (Google) ika...@google.com wrote: For the time being, not without using task queues. We're looking at providing a map/reduce interface, which would likely fit your use case. It's on our roadmap: http://code.google.com/appengine/docs/roadmap.html On Tue, Feb 9, 2010 at 3:43 PM, RSN romeo.sanc...@gmail.com wrote: Ikai, First, I really would like to thank you for your response. I appreciate the details and links you gave me on improving datastore performance. I work on research, and somehow I need to able to update and/or delete significant amounts of data. This is part of a setup cost our application has to undergo in order to function properly. Our users really do not expect to see an immediate response from the application, but we also would like to reduce the amount of delay when processing data. I think your links about using cache, batch processing, and AJAX operations could help us to alleviate the setup cost of our application. Those may be the alternative mechanisms that we need in our data intensive operations. Are you aware of the possibility of running computer simulations in App Engine? Is it possible? Is there a way to keep running a process longer than the timeout deadlines? Thanks for your help. On Feb 9, 3:20 pm, Ikai L (Google) ika...@google.com wrote: We're always looking at ways to improve datastore performance, but we really try to push developers towards optimizing the performance from the User's perspective. That is - if you have to delete or create 150 persistent, indexed objects, you may want to rethink what problems you are trying to solve. Users have come to expect a certain level of quality of service when it comes to certain types of page serves, and you can fake this out by using Memcache and task queues for writes. True, the amount of computation still does not go down, but there's a net gain here from an improved experience and increased user retention. I'm not surprised that you're seeing the numbers you're seeing based on the data you've provided. To really scale up, think about how to make operations fast. There are a few tips that go a long way: - make as much as you can asynchronous. For some operations this may not make sense - cache heavily. Use a write-through cache when saving and task queues for big saves - write to as few indexes and entities as possible if you need to do anything synchronously This is one of my favorite articles about this subject: http://highscalability.com/blog/2010/1/22/how-buddypoke-scales-on-fac... http://highscalability.com/blog/2010/1/22/how-buddypoke-scales-on-fac.. .BuddyPoke realized early on they weren't working with a relational database and made full use of the fact that App Engine's datastore is build on a distributed key-value store with custom indexing. On Mon, Feb 8, 2010 at 11:37 AM, RSN romeo.sanc...@gmail.com wrote: Hi, I am kind of new to GAE, and I was wondering if someone has statistics or data that shows what are the most optimal (efficient) ways for deleting and creating objects in the Datastore. I did some small experiments in order to identify a more efficient mechanism to delete and create objects in the datastore. In these tests, I have a single persistent object that contains 8 persistent fields. In the first test, I have a loop of 150 instances, and at each iteration I create the persistent object, and I call the makePersistent function to add the single instance to the datastore. This should take much longer, and it does. It takes on average 16-17 seconds. In the second test, the loop only creates the 150 objects, and then outside the loop, I call the makePersistentAll function, passing all my collection of objects. As it is mentioned in the documentation, this is supposed to be faster, and it is. It takes on average 1-2 seconds. I have experimented only with one way for deleting objects. Basically, I make a query to retrieve ONLY the keys of my objects. Query query = pm.newQuery(select objectKey from + objectClass.getName()); keys = (ListKey) query.execute(); Then, once all keys have been retrieved, I call the following service method: DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); ds.delete(keys); To delete the objects. It takes on average 2-4 seconds to delete 150 instances. I was just wondering if I am missing something, and if there is a more efficient way for deleting (or creating) objects in the datastore. I see also that there is a higher variance in deleting objects than in creating them. For example, the fastest run in my test took 1.6 seconds to delete the 150 instances, while the slowest run took almost 8 seconds. I do not see this variability
Re: [appengine-java] Re: getNextID
JDO Sequences work, we just haven't publicized them. The DataNucleus docs should tell you everything you need to know: http://www.datanucleus.org/products/accessplatform/jdo/sequences.html IdGeneratorStrategy.INCREMENT is not yet implemented. What are you looking to use it for? Max On Mon, Feb 8, 2010 at 3:20 AM, Vincent TELLIER tellier.vinc...@gmail.comwrote: I tried the incrementation, but I got an error saying that it was not implemented in the appengine datastore. TELLIER Vincent + Email : cont...@tellier-vincent.eu + Contact messenger (msn) : abs...@esugenus.fr 2010/2/8 aswath satrasala aswath.satras...@gmail.com See if the following annotation help you. @Persistent(valueStrategy = IdGeneratorStrategy.INCREMENT) -Aswath On Mon, Feb 8, 2010 at 1:18 AM, datanucleus andy_jeffer...@yahoo.comwrote: What getNextID feature on JDO ? i.e please make reference to the JDO API and which particular API Method you're referring to -- 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.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.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] Re: Spring 3.0 + Tiles 2.1.4 + GAE
Hi, try using tiles-2.1.2 Best regards, Vladislav On Feb 8, 12:52 pm, Arun Shanker Prasad arunshankerpra...@gmail.com wrote: Hi All, Any suggestions/thoughts/ideas? Stuck at this now.. Thanks, Arun Shanker Prasad. On Feb 4, 4:23 pm, Arun Shanker Prasad arunshankerpra...@gmail.com wrote: Hi All, I was trying to create a sample spring application with Spring 3.0 (RELEASE) Tiles 2.1.4, but I am getting the following error when I start up the dev server. Has anyone else come across this? Any work around? I had read in the forum about modifying some classes got get the Spring form tag to work, but that was for 2.5, anyone else tried Spring 3.0? What more problems can I get? I am at the initial phase of planning for my project and just thought to give Spring 3.0 a try since I don't want to learn 2.5 if 3.0 is already there ;) WARNING: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tilesConfigurer' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;: java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ ServletContext;)Ljavax/servlet/jsp/JspApplicationContext; at org.apache.tiles.jsp.evaluator.el.JspExpressionFactoryFactory.getExpression Factory(JspExpressionFactoryFactory.java: 62) at org.apache.tiles.evaluator.el.ELAttributeEvaluator.init(ELAttributeEvaluato r.java: 111) at org.apache.tiles.factory.TilesContainerFactory.storeContainerDependencies(T ilesContainerFactory.java: 447) at org.apache.tiles.factory.TilesContainerFactory.initializeContainer(TilesCon tainerFactory.java: 368) at org.apache.tiles.factory.TilesContainerFactory.createTilesContainer(TilesCo ntainerFactory.java: 287) at org.apache.tiles.factory.TilesContainerFactory.createContainer(TilesContain erFactory.java: 231) at org.apache.tiles.startup.BasicTilesInitializer.createContainer(BasicTilesIn itializer.java: 117) at org.apache.tiles.startup.BasicTilesInitializer.initialize(BasicTilesInitial izer.java: 53) at org.springframework.web.servlet.view.tiles2.TilesConfigurer.afterProperties Set(TilesConfigurer.java: 203) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactor y $5.run(AbstractAutowireCapableBeanFactory.java:1451) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactor y.invokeInitMethods(AbstractAutowireCapableBeanFactory.java: 1449) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactor y.initializeBean(AbstractAutowireCapableBeanFactory.java: 1398) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactor y.doCreateBean(AbstractAutowireCapableBeanFactory.java: 512) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactor y.createBean(AbstractAutowireCapableBeanFactory.java: 450) at org.springframework.beans.factory.support.AbstractBeanFactory $1.getObject(AbstractBeanFactory.java:290) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getS ingleton(DefaultSingletonBeanRegistry.java: 222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Abs tractBeanFactory.java: 287) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abstr actBeanFactory.java: 189) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preIns tantiateSingletons(DefaultListableBeanFactory.java: 557) at org.springframework.context.support.AbstractApplicationContext.finishBeanFa ctoryInitialization(AbstractApplicationContext.java: 842) at org.springframework.context.support.AbstractApplicationContext.refresh(Abst ractApplicationContext.java: 416) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContex t(FrameworkServlet.java: 443) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContex t(FrameworkServlet.java: 459) at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext( FrameworkServlet.java: 340) at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkS ervlet.java: 307) at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java: 127) at
Re: [appengine-java] Re: UserService.createLoginURL() to a chrome extension
I actually ended up asking one of the Chrome guys for the answer to this. This is what he tells me: Ah, to me it sounds like GAE's createLoginURL function doesn't recognize chrome-extension:// as a protocol. It's appending the extension url like a relative path. You can tell him to redirect to something like success.html on his GAE app, where he can set headers to redirect back to the chrome-extension URL, although I think there may be a security precaution in Chrome to prevent doing that. If that's the case, the developer can inject a content script into success.html that will notify his extension's background page and open the appropriate URL from within the extension itself. I'm sorry if this doesn't make sense, I'm not an expert on Chrome extension development. Have you tried their groups? On Tue, Feb 9, 2010 at 5:48 PM, Shai levys...@gmail.com wrote: I would still appreciate some pointers on this issue. Is the redirect limited to http://; otherwise the API thinks I'm trying to send to file in my application ? any suggestion how to overcome this ? Is there a way to manually create the URL ? Thanks On Feb 4, 5:10 pm, Shai levys...@gmail.com wrote: Hi, If I try doing a redirect to a normal http site it works fine, for example UserService.createLoginURL(http://www.somewhere.com/index.html;) ; This will let me login to my Google app account and then redirect me towww.somewhere.com... But if I try to redirect to html in mychromeextension: UserService.createLoginURL(chrome-extension://[extensionid]/ myhtml.html) ; It redirects me to:http://[myapp]. appspot.com/chrome-extension://[myextensionid]]/ myhtml.html Can someone suggest a simple solution ? Mychromeplug-in uses Google app engine for authentication and I when the user is not logged in I would like to invoke a log-in page and give control back to myextension -- 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. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- 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] Re: getNextID
Hello Max, I am planning to use IdGeneratorStrategy.INCREMENT feature to assign sequential ids for entities I am creating. for example, Employee. -Aswath On Wed, Feb 10, 2010 at 5:49 AM, Max Ross (Google) maxr+appeng...@google.com maxr%2bappeng...@google.com wrote: JDO Sequences work, we just haven't publicized them. The DataNucleus docs should tell you everything you need to know: http://www.datanucleus.org/products/accessplatform/jdo/sequences.html IdGeneratorStrategy.INCREMENT is not yet implemented. What are you looking to use it for? Max On Mon, Feb 8, 2010 at 3:20 AM, Vincent TELLIER tellier.vinc...@gmail.com wrote: I tried the incrementation, but I got an error saying that it was not implemented in the appengine datastore. TELLIER Vincent + Email : cont...@tellier-vincent.eu + Contact messenger (msn) : abs...@esugenus.fr 2010/2/8 aswath satrasala aswath.satras...@gmail.com See if the following annotation help you. @Persistent(valueStrategy = IdGeneratorStrategy.INCREMENT) -Aswath On Mon, Feb 8, 2010 at 1:18 AM, datanucleus andy_jeffer...@yahoo.comwrote: What getNextID feature on JDO ? i.e please make reference to the JDO API and which particular API Method you're referring to -- 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.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.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.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] Least CPU Intensive way to query?
Hi guys, I was wondering if anyone has found a less CPU intensive way to query. I basically have a bunch of small objects in the database I want out. I tried a few ways to get them out, including an extent and a query. I ended up settling on this: Query query = pm.newQuery(Post.class); query.setOrdering(postedDate desc); query.setRange(start, end); ListPost posts = (ListPost) query.execute(); Doing a range of 0 to 1000.. figuring the 1000 newest items is good enough. I find that this tends to be pretty bad on my quota CPU.. like maybe 8 seconds of CPU time per query, if there are 1000 posts. Is this just how it is? Or do I need to add an index to postedDate maybe? I plan to play with it more tomorow, but if anyone has insight on getting stuff out of the database fast (from both a time and CPU quota standpoint), I would appreciate it. I have never seen a datbase take .1 seconds for such a stupid silly query, I have to be doing something wrong. 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: Least CPU Intensive way to query?
I am also getting and closing a new PersistenceManager around the query, if that matters On Feb 9, 11:08 pm, Brian bwa...@gmail.com wrote: Hi guys, I was wondering if anyone has found a less CPU intensive way to query. I basically have a bunch of small objects in the database I want out. I tried a few ways to get them out, including an extent and a query. I ended up settling on this: Query query = pm.newQuery(Post.class); query.setOrdering(postedDate desc); query.setRange(start, end); ListPost posts = (ListPost) query.execute(); Doing a range of 0 to 1000.. figuring the 1000 newest items is good enough. I find that this tends to be pretty bad on my quota CPU.. like maybe 8 seconds of CPU time per query, if there are 1000 posts. Is this just how it is? Or do I need to add an index to postedDate maybe? I plan to play with it more tomorow, but if anyone has insight on getting stuff out of the database fast (from both a time and CPU quota standpoint), I would appreciate it. I have never seen a datbase take .1 seconds for such a stupid silly query, I have to be doing something wrong. 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.
Re: [appengine-java] Re: getNextID
Hi Aswath, Unfortunately there is no way to guarantee the assignment of sequential ids using JDO on App Engine, or even using the low-level datastore api. This is because ids are allocated in batches across many datastore backends, and one request to get the next id may hit one backend while another may hit a different backend. Is sequential ids a hard requirement? Max On Tue, Feb 9, 2010 at 8:27 PM, aswath satrasala aswath.satras...@gmail.com wrote: Hello Max, I am planning to use IdGeneratorStrategy.INCREMENT feature to assign sequential ids for entities I am creating. for example, Employee. -Aswath On Wed, Feb 10, 2010 at 5:49 AM, Max Ross (Google) maxr+appeng...@google.com maxr%2bappeng...@google.com wrote: JDO Sequences work, we just haven't publicized them. The DataNucleus docs should tell you everything you need to know: http://www.datanucleus.org/products/accessplatform/jdo/sequences.html IdGeneratorStrategy.INCREMENT is not yet implemented. What are you looking to use it for? Max On Mon, Feb 8, 2010 at 3:20 AM, Vincent TELLIER tellier.vinc...@gmail.com wrote: I tried the incrementation, but I got an error saying that it was not implemented in the appengine datastore. TELLIER Vincent + Email : cont...@tellier-vincent.eu + Contact messenger (msn) : abs...@esugenus.fr 2010/2/8 aswath satrasala aswath.satras...@gmail.com See if the following annotation help you. @Persistent(valueStrategy = IdGeneratorStrategy.INCREMENT) -Aswath On Mon, Feb 8, 2010 at 1:18 AM, datanucleus andy_jeffer...@yahoo.comwrote: What getNextID feature on JDO ? i.e please make reference to the JDO API and which particular API Method you're referring to -- 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.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.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.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.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] How to clear logs?
Thanks for your help ^ ^ My GAE Application has too mush logs! But I don't know how to clear the logs! -- 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] Error; Transaction is not active.
First it 's work ok! but after tx.commit() the transaction is complete,so you must call tx.begin() to start a transaction before tx.commit()! Or invoke the tx.commit out of the while block! I'm sorray for my English! 2010/2/10 Acerezo acerezoguil...@gmail.com Hello all, I can´t delete records of a table I'm using this code: PersistenceManager pm = PersistenceManagerHelper.getPersistenceManager(); Transaction tx = pm.currentTransaction(); tx.begin(); Extent ex = pm.getExtent(Robot.class, true); Iterator iter = ex.iterator(); while (iter.hasNext()) { Robot obj = (Robot)iter.next(); pm.deletePersistent(obj); tx.commit(); } And always delete only two records after I get this message in the log: Transaction is not active. You either need to define a transaction around this, or run your PersistenceManagerFactory with 'NontransactionalRead' and 'NontransactionalWrite' set to 'true' Anyone can help me, please? 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.
Re: [appengine-java] How to clear logs?
I've the same problem that you and looking in the documentation of google, I read that the logs can't be deleted. 2010/2/10 时空之蕊 skzr@gmail.com: Thanks for your help ^ ^ My GAE Application has too mush logs! But I don't know how to clear the logs! -- 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.
Re: [appengine-java] Error; Transaction is not active.
Yes! 2010/2/10 Andrés Cerezo acerezoguil...@gmail.com I don´t understand very well I think you are telling me: Transaction tx = pm.currentTransaction(); // tx.begin(); old Extent ex = pm.getExtent(Robot.class, true); Iterator iter = ex.iterator(); while (iter.hasNext()) { tx.begin(); // new Robot obj = (Robot)iter.next(); pm.deletePersistent(obj); tx.commit(); } isn´t? 2010/2/10 杨浩 skzr@gmail.com: First it 's work ok! but after tx.commit() the transaction is complete,so you must call tx.begin() to start a transaction before tx.commit()! Or invoke the tx.commit out of the while block! I'm sorray for my English! 2010/2/10 Acerezo acerezoguil...@gmail.com Hello all, I can´t delete records of a table I'm using this code: PersistenceManager pm = PersistenceManagerHelper.getPersistenceManager(); Transaction tx = pm.currentTransaction(); tx.begin(); Extent ex = pm.getExtent(Robot.class, true); Iterator iter = ex.iterator(); while (iter.hasNext()) { Robot obj = (Robot)iter.next(); pm.deletePersistent(obj); tx.commit(); } And always delete only two records after I get this message in the log: Transaction is not active. You either need to define a transaction around this, or run your PersistenceManagerFactory with 'NontransactionalRead' and 'NontransactionalWrite' set to 'true' Anyone can help me, please? 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.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.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] How to clear logs?
Now,there is not found the document about the logs! Thanks Andrés Cerezo! My solustion: deploy another version as the default, and del the old version! so the logs may be clear all! 2010/2/10 Andrés Cerezo acerezoguil...@gmail.com I've the same problem that you and looking in the documentation of google, I read that the logs can't be deleted. -- 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.
[google-appengine] 500 status on apps, api changes?
hello we encounter failures on some apps since about 10 hours. we can find no log entry for those errors. are there some api changes? we know of at least one change on how db.Model gets constructed, they now get the key keyword argument, which is new and broke another app of us, which we were able to fix. but for this app it must be another problem, are there any other changes on the internals? we have 2 apps with the same symtpoms. curl -i http://marktplatz.a-z.ch HTTP/1.1 500 Internal Server Error Date: Tue, 09 Feb 2010 08:26:19 GMT Content-Type: text/html; charset=UTF-8 Server: Google Frontend Content-Length: 466 X-XSS-Protection: 0 htmlhead meta http-equiv=content-type content=text/html;charset=utf-8 title500 Server Error/title /head body text=#00 bgcolor=#ff h1Error: Server Error/h1 h2The server encountered an error and could not complete your request.pIf the problem persists, please A HREF=http:// code.google.com/appengine/community.htmlreport/A your problem and mention this error message and the query that caused it./h2 h2/h2 /body/html thx in advance, bernd -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: 500 status on apps, api changes?
seems that i have found the problem, the signature of db.get has changed, but only on appengine, we have put a wrapper around this and this does not work anymore now 02-09 12:35AM 40.319 UNHANDLED_EXCEPTION: Traceback (most recent call last): File /base/data/home/apps/mk-a-z/3.339622665704014614/packages/ django.egg/django/core/handlers/base.py, line 86, in get_response response = callback(request, *callback_args, **callback_kwargs) File /base/data/home/apps/mk-a-z/3.339622665704014614/packages/ django.egg/django/views/decorators/cache.py, line 30, in _cache_controlled response = viewfunc(request, *args, **kw) File /base/data/home/apps/mk-a-z/3.339622665704014614/mkapp/ decorators.py, line 58, in wrapper data = fxn(*args, **kwargs) File /base/data/home/apps/mk-a-z/3.339622665704014614/mkapp/df/ views.py, line 642, in business_view business = Business.get_by_ident(id) File /base/data/home/apps/mk-a-z/3.339622665704014614/mkapp/ business.py, line 149, in get_by_ident business = Business.get_by_key_name(key) File /base/python_lib/versions/1/google/appengine/ext/db/ __init__.py, line 991, in get_by_key_name return get(keys[0], rpc=rpc) TypeError: get_cached() got an unexpected keyword argument 'rpc' -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: 500 status on apps, api changes?
ok, we now fixed the compatibility issues on our apps, but the development sdk still does not match the api on appengine. it would be nice to get information about such internal changes up- front the next time. it is always hard to explain our customers why the site was offline for some technical reason we cannot forsee. thx, bernd -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Re: Stored data voiume is totally different on Datastore Statistics and Dashboard
No, I don't store any info in sessions, except logged in user id via Google Users API. On Mon, Feb 8, 2010 at 8:48 PM, Ikai L (Google) ika...@google.com wrote: Are you storing information in sessions? Session information can also take up space. On Mon, Feb 8, 2010 at 5:32 AM, Pavel Kaplin pavel.kap...@gmail.comwrote: Here's the detailed description of mentioned indexes: 1) address (string, 100 bytes), tradePoint(String, 100 bytes), user (Key, generated by GAE), timestamp 2) tradePoint, user, timestamp 3) user, timestamp Entities count is about 15k. I don't understand how it might happened. On Feb 8, 3:25 pm, Nick Johnson (Google) nick.john...@google.com wrote: Hi Pavel, That depends on the nature of your indexes, and the entities being indexed. It's certainly possible for indexes to reach this magnitude - particularly if you're indexing list properties. -Nick Johnson On Mon, Feb 8, 2010 at 1:12 PM, Pavel Kaplin pavel.kap...@gmail.com wrote: It's hard to believe that 3 indexes (for 2, 3 and 4 fields) could eat 9x more space than data itself. On Feb 8, 2:45 pm, Nick Johnson (Google) nick.john...@google.com wrote: Hi Pavel, The datastore stats include only the raw size of the entities. The total space consumed is the space consumed by the entities, plus the space consumed by all your indexes. -Nick Johnson On Mon, Feb 8, 2010 at 12:35 PM, Pavel Kaplin pavel.kap...@gmail.com wrote: Hi there! My datastore stats says me Size of all entities = 51 MBytes, but dashboard shows 0.54 Gb as Total Stored Data. As you can see, these values differ from each other for more than ten times. Why? Application id is bayadera-tracker -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appengine@googlegroups.com . To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Павел Каплин -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Re: Stored data voiume is totally different on Datastore Statistics and Dashboard
I like this suggestion too. Moreover, I'd prefer detailed description of the number called Used Space on Dashboard/Quota Details pages. E.g. indexes = 250 Mb , Entities = 500 Mb, sessions = 50 Mb and so on, plus detailed info about indexes and sessions. What do you think? On Mon, Feb 8, 2010 at 9:57 PM, Robert Kluin robert.kl...@gmail.com wrote: I like Philip's suggestion a lot. It will help us all identify space intensive indexes, and _hopefully_ reduce the number of posts about this. I submitted a feature request for this issue: http://code.google.com/p/googleappengine/issues/detail?id=2740 Robert On Mon, Feb 8, 2010 at 2:27 PM, WeatherPhilip philip-goo...@gladstonefamily.net wrote: This issue comes up about once per week. Google -- you need to address this. The simplest way of addressing it would be to put the size of *every* index on the statistics page, and show that the total corresponds (roughly) to the quota number. This would enable people to see which index (or indexes) was consuming a lot of space, and take steps to optimize -- maybe by not indexing that field. Philip On Feb 8, 1:48 pm, Ikai L (Google) ika...@google.com wrote: Are you storing information in sessions? Session information can also take up space. On Mon, Feb 8, 2010 at 5:32 AM, Pavel Kaplin pavel.kap...@gmail.com wrote: Here's the detailed description of mentioned indexes: 1) address (string, 100 bytes), tradePoint(String, 100 bytes), user (Key, generated by GAE), timestamp 2) tradePoint, user, timestamp 3) user, timestamp Entities count is about 15k. I don't understand how it might happened. On Feb 8, 3:25 pm, Nick Johnson (Google) nick.john...@google.com wrote: Hi Pavel, That depends on the nature of your indexes, and the entities being indexed. It's certainly possible for indexes to reach this magnitude - particularly if you're indexing list properties. -Nick Johnson On Mon, Feb 8, 2010 at 1:12 PM, Pavel Kaplin pavel.kap...@gmail.com wrote: It's hard to believe that 3 indexes (for 2, 3 and 4 fields) could eat 9x more space than data itself. On Feb 8, 2:45 pm, Nick Johnson (Google) nick.john...@google.com wrote: Hi Pavel, The datastore stats include only the raw size of the entities. The total space consumed is the space consumed by the entities, plus the space consumed by all your indexes. -Nick Johnson On Mon, Feb 8, 2010 at 12:35 PM, Pavel Kaplin pavel.kap...@gmail.com wrote: Hi there! My datastore stats says me Size of all entities = 51 MBytes, but dashboard shows 0.54 Gb as Total Stored Data. As you can see, these values differ from each other for more than ten times. Why? Application id is bayadera-tracker -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appengine@googlegroups.com . To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appengine@googlegroups.com . To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Ikai Lan Developer Programs Engineer, Google
Re: [google-appengine] Re: Can't access Datastore Viewer
YouModel.all().filter('email porperty =', None).fetch(100) You can update or delete them. 2010/2/9 Shai levys...@gmail.com: HI, Yes, I am using Email fields and URL field's. I am not sure if there are currently null values there but my code doesn't validate that option so it's a possibility. Either way, I can change the model to strings instead of URL/Email pretty quick but how can I remove the data already there ? The project is still in testing phase so I can remove all data, is there a quick reset option ? (I'm using the Java + eclipse plug in) P.S. Can't email/url fields be null ? is it a problem ? is this documented and I missed it ? On Feb 9, 12:34 am, Ikai L (Google) ika...@google.com wrote: Datastore viewer issues are likely related to type validation issues. Are you using specialized types such as PhoneNumber, Email Address or URL fields in your model? Are these always being set, or are null or invalid values being set? On Sat, Feb 6, 2010 at 6:12 PM, Shai levys...@gmail.com wrote: I hardly have any records, its a new application I tried other browsers and other computers over a few day's Maybe something in my data is causing the problem ? I have no clue how to analyze this without a data viewer. my application run's smoothly On Feb 7, 4:07 am, Eli Jones eli.jo...@gmail.com wrote: I had a few problems with the Datastore Viewer this evening.. but I assumed it was because I was deleting thousands of entities. Try the usual tricks.. log out of your google accounts.. clear cache and cookies.. and try relogging in to your Dashboard. On Sat, Feb 6, 2010 at 8:58 PM, Shai levys...@gmail.com wrote: Any one ? It really is blocking me Someone know's if I can/should/how contact google about this ? On Feb 4, 7:49 pm, Shai levys...@gmail.com wrote: HI, Every time I click on Datastore Viewer in my application page I get a Server Error (500) , A server error has occurred. app id is - SwimmingSession Can anyone advice ? (did't find any related problem in the logs) -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appengine@googlegroups.com . To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Ikai Lan Developer Programs Engineer, Google App Enginehttp://googleappengine.blogspot.com|http://twitter.com/app_engine -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Re: 1.3.1 SDK Prerelease - help us verify
2010/2/9 Stephen sdea...@gmail.com I'm asking if it's wise to store it as a query parameter embedded in a web page. You're right that it's unwise. Depending on how you construct your query, a user could potentially modify the cursor they send to you to return results from any query your datastore is capable of performing, which could result in you revealing information to the user that they shouldn't know. You should either store the cursor on the server-side, or encrypt it before sending it to the client. I was going to mention something about this in my post, but it slipped my mind. -Nick Johnson On Feb 9, 12:26 am, Ikai L (Google) ika...@google.com wrote: A cursor serializes to a Base64 encoded String, so you can store it anywhere you want to store strings: Memcached, Datastore, etc. You can even pass it as an URL parameter to task queues. 2010/2/8 Stephen sdea...@gmail.com Ah right, Nick's blog does say start_key and not offset. My bad. Maybe there will be warnings in the upcoming documentation, but my first instinct was to embed the serialised cursor in the HTML as the 'next' link. But that doesn't look like a good idea as Nick's decoded query shows what's embedded: PrimaryScan { start_key: shell\000TestModel\000foo\000\232bar\000\200 start_inclusive: true } keys_only: false First, you may or may not want to leak this info. Second, could this be altered on the client to change the query in any way that's undesirable? Once you have a cursor, where do you store it so you can use it again? On Feb 8, 10:17 pm, Ikai L (Google) ika...@google.com wrote: I got beaten to this answer. No, there is no traversal to get to the offset. BigTable has an underlying mechanism for range queries on keys. Indexes are essentially a key comprised of a concatenation of application ID, entity type, column, value. When a filter operation is performed, the datastore looks for a range matching this criteria, returning the set of keys. A cursor also adds the datastore key of the entity so it is possible to serialize where to begin the query. This is actually a bit awkward to explain without visuals. You can watch Ryan Barrett's talk here: http://www.youtube.com/watch?v=tx5gdoNpcZM Hopefully, we'll be able to post an article at some point in the future explaining how cursors work. 2010/2/8 Alkis Evlogimenos ('Αλκης Ευλογημένος) evlogime...@gmail.com There is no offset. The protocol buffer stores a start_key and a boolean denoting if this start key is inclusive or not. The performance of continuing the fetch from a cursor should be the same as the performance of the first entities you got from a query. On Mon, Feb 8, 2010 at 4:33 PM, Stephen sdea...@gmail.com wrote: On Feb 8, 7:06 pm, Ikai L (Google) ika...@google.com wrote: The official docs are pending, but here's Nick Johnson to the rescue: http://blog.notdot.net/2010/02/New-features-in-1-3-1-prerelease-Cursors What are the performance characteristics of cursors? The serialised cursor shows that it stores an offset. Does that mean that if the offset is one million, one million rows will have to be skipped before the next 10 are returned? This will be faster than doing it in your app, but not as quick as the existing bookmark techniques which use the primary key index. Or is the server-side stateful, like a typical SQL implementation of cursors? In which case, are there any limits to the number of active cursors? Or what if a cursor is resumed some time in the future; will it work at all, or work slower? -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com google-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%252bunsubscr...@googlegroups.com google-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%252bunsubscr...@googlegroups.com google-appengine%252bunsubscr...@googlegroups.comgoogle-appengine%25252bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Alkis -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appengine@googlegroups.com . To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com
[google-appengine] Unable to appcfg.py update my app
Application: myapp; version: 1. Server: appengine.google.com. Scanning files on local disk. Scanned 500 files. Scanned 1000 files. Scanned 1500 files. Scanned 2000 files. Initiating update. Error 500: --- begin server output --- Server Error (500) A server error has occurred. --- end server output --- Best Regards Tom Wu -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] App Engine URI Quota
Hi Tim, This text is a holdover from when we had a high CPU quota. You can safely ignore it as anything other than a warning that you should consider optimising your handler. -Nick Johnson On Mon, Feb 8, 2010 at 5:45 AM, Timwillhack timwillh...@gmail.com wrote: I've been writing a python backend on app engine for use with a facebook game. One of my pages is currently hitting 2459 CPU in the admin console per request (avg). Its a register page and does a lot of databasing different classes. I've noticed an exclamation next to it that says 'This URI uses a high amount of CPU and may soon exceed its quota' keyword here being 'its' as in an individual pages quota. I've searched on this forum and found an answer that it isn't specific to a particular URI anymore but I wanted to verify this as if it is I can see running into a lot of problems shortly after release. I apologize for re-asking but I think being 100% sure would make me feel a lot better about a major release using app engine,python and facebook together in a winter wonderland. -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Re: 1.3.1 SDK Prerelease - help us verify
Will we be able to construct our own cursors much the same way that we are able to construct our own Datastore keys (Key.from_path())? Also along the same lines, will we be able to deconstruct a cursor to get its components (offset, start_inclusive etc.), as we can now do with keys ( key.name(), key.id(), key.kind() etc.)? 2010/2/9 Nick Johnson (Google) nick.john...@google.com 2010/2/9 Stephen sdea...@gmail.com I'm asking if it's wise to store it as a query parameter embedded in a web page. You're right that it's unwise. Depending on how you construct your query, a user could potentially modify the cursor they send to you to return results from any query your datastore is capable of performing, which could result in you revealing information to the user that they shouldn't know. You should either store the cursor on the server-side, or encrypt it before sending it to the client. I was going to mention something about this in my post, but it slipped my mind. -Nick Johnson On Feb 9, 12:26 am, Ikai L (Google) ika...@google.com wrote: A cursor serializes to a Base64 encoded String, so you can store it anywhere you want to store strings: Memcached, Datastore, etc. You can even pass it as an URL parameter to task queues. 2010/2/8 Stephen sdea...@gmail.com Ah right, Nick's blog does say start_key and not offset. My bad. Maybe there will be warnings in the upcoming documentation, but my first instinct was to embed the serialised cursor in the HTML as the 'next' link. But that doesn't look like a good idea as Nick's decoded query shows what's embedded: PrimaryScan { start_key: shell\000TestModel\000foo\000\232bar\000\200 start_inclusive: true } keys_only: false First, you may or may not want to leak this info. Second, could this be altered on the client to change the query in any way that's undesirable? Once you have a cursor, where do you store it so you can use it again? On Feb 8, 10:17 pm, Ikai L (Google) ika...@google.com wrote: I got beaten to this answer. No, there is no traversal to get to the offset. BigTable has an underlying mechanism for range queries on keys. Indexes are essentially a key comprised of a concatenation of application ID, entity type, column, value. When a filter operation is performed, the datastore looks for a range matching this criteria, returning the set of keys. A cursor also adds the datastore key of the entity so it is possible to serialize where to begin the query. This is actually a bit awkward to explain without visuals. You can watch Ryan Barrett's talk here: http://www.youtube.com/watch?v=tx5gdoNpcZM Hopefully, we'll be able to post an article at some point in the future explaining how cursors work. 2010/2/8 Alkis Evlogimenos ('Αλκης Ευλογημένος) evlogime...@gmail.com There is no offset. The protocol buffer stores a start_key and a boolean denoting if this start key is inclusive or not. The performance of continuing the fetch from a cursor should be the same as the performance of the first entities you got from a query. On Mon, Feb 8, 2010 at 4:33 PM, Stephen sdea...@gmail.com wrote: On Feb 8, 7:06 pm, Ikai L (Google) ika...@google.com wrote: The official docs are pending, but here's Nick Johnson to the rescue: http://blog.notdot.net/2010/02/New-features-in-1-3-1-prerelease-Cursors What are the performance characteristics of cursors? The serialised cursor shows that it stores an offset. Does that mean that if the offset is one million, one million rows will have to be skipped before the next 10 are returned? This will be faster than doing it in your app, but not as quick as the existing bookmark techniques which use the primary key index. Or is the server-side stateful, like a typical SQL implementation of cursors? In which case, are there any limits to the number of active cursors? Or what if a cursor is resumed some time in the future; will it work at all, or work slower? -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com google-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%252bunsubscr...@googlegroups.com google-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%252bunsubscr...@googlegroups.com google-appengine%252bunsubscr...@googlegroups.comgoogle-appengine%25252bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Alkis -- You received this
Re: [google-appengine] Re: 1.3.1 SDK Prerelease - help us verify
Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com Will we be able to construct our own cursors much the same way that we are able to construct our own Datastore keys (Key.from_path())? No, not practically speaking. Also along the same lines, will we be able to deconstruct a cursor to get its components (offset, start_inclusive etc.), as we can now do with keys ( key.name(), key.id(), key.kind() etc.)? While you could do this, there's no guarantees that it'll work (or continue to work), as you'd be digging into internal implementation details. Why do you want to do this? -Nick Johnson 2010/2/9 Nick Johnson (Google) nick.john...@google.com 2010/2/9 Stephen sdea...@gmail.com I'm asking if it's wise to store it as a query parameter embedded in a web page. You're right that it's unwise. Depending on how you construct your query, a user could potentially modify the cursor they send to you to return results from any query your datastore is capable of performing, which could result in you revealing information to the user that they shouldn't know. You should either store the cursor on the server-side, or encrypt it before sending it to the client. I was going to mention something about this in my post, but it slipped my mind. -Nick Johnson On Feb 9, 12:26 am, Ikai L (Google) ika...@google.com wrote: A cursor serializes to a Base64 encoded String, so you can store it anywhere you want to store strings: Memcached, Datastore, etc. You can even pass it as an URL parameter to task queues. 2010/2/8 Stephen sdea...@gmail.com Ah right, Nick's blog does say start_key and not offset. My bad. Maybe there will be warnings in the upcoming documentation, but my first instinct was to embed the serialised cursor in the HTML as the 'next' link. But that doesn't look like a good idea as Nick's decoded query shows what's embedded: PrimaryScan { start_key: shell\000TestModel\000foo\000\232bar\000\200 start_inclusive: true } keys_only: false First, you may or may not want to leak this info. Second, could this be altered on the client to change the query in any way that's undesirable? Once you have a cursor, where do you store it so you can use it again? On Feb 8, 10:17 pm, Ikai L (Google) ika...@google.com wrote: I got beaten to this answer. No, there is no traversal to get to the offset. BigTable has an underlying mechanism for range queries on keys. Indexes are essentially a key comprised of a concatenation of application ID, entity type, column, value. When a filter operation is performed, the datastore looks for a range matching this criteria, returning the set of keys. A cursor also adds the datastore key of the entity so it is possible to serialize where to begin the query. This is actually a bit awkward to explain without visuals. You can watch Ryan Barrett's talk here: http://www.youtube.com/watch?v=tx5gdoNpcZM Hopefully, we'll be able to post an article at some point in the future explaining how cursors work. 2010/2/8 Alkis Evlogimenos ('Αλκης Ευλογημένος) evlogime...@gmail.com There is no offset. The protocol buffer stores a start_key and a boolean denoting if this start key is inclusive or not. The performance of continuing the fetch from a cursor should be the same as the performance of the first entities you got from a query. On Mon, Feb 8, 2010 at 4:33 PM, Stephen sdea...@gmail.com wrote: On Feb 8, 7:06 pm, Ikai L (Google) ika...@google.com wrote: The official docs are pending, but here's Nick Johnson to the rescue: http://blog.notdot.net/2010/02/New-features-in-1-3-1-prerelease-Cursors What are the performance characteristics of cursors? The serialised cursor shows that it stores an offset. Does that mean that if the offset is one million, one million rows will have to be skipped before the next 10 are returned? This will be faster than doing it in your app, but not as quick as the existing bookmark techniques which use the primary key index. Or is the server-side stateful, like a typical SQL implementation of cursors? In which case, are there any limits to the number of active cursors? Or what if a cursor is resumed some time in the future; will it work at all, or work slower? -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com google-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%252bunsubscr...@googlegroups.com
[google-appengine] app engine, shared IP and twitter api
Hi; I have just deployed an application to app engine which use twitter search api. But there is a problem. Twitter blocks some of my requests saying You have been rate limited. Enhance your calm. Of course I have asked about this to twitter men, waiting for their reply. But I want to ask you, whether following scenerio is possible: May app engine give the same IP to different applications? If so another application which we share the same IP, may be spamming twitter api; and because of this spammer application I am blocked too. Is this possible? Have you seen similar problem, and is there a solution? Note: It is not possible to exceed the rate limits of twitter, because there is no traffic in my site. Thanks in advance. -- Enes Akar http://www.linkedin.com/pub/enes-akar/7/835/3aa -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Re: 1.3.1 SDK Prerelease - help us verify
I'd want to do this so that I could include parts of the cursor (such as the offset) into a URL without including other parts (eg. the model kind and filters). I could then reconstruct the cursor on the server side based on what was passed into the URL. For example, if I was searching for blog comments that contained the word the (with the default order being the creation time, descending), the URL might look like this: myblog.com/comments/?q=the With model: class Comment(db.Model): created_at = db.DateTimeProperty(auto_now_add=True) words = db.StringListProperty() # A list of all the words in a comment (forget about exploding indexes for now) ... The query object for this URL might look something like: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') To get to the 1001st comment, it'd be good if the URL looked something like this: myblog.com/comments/?q=theskip=1000 instead of: myblog.com/comments/?q=thecursor=[something ugly] so that when the request comes in, I can do this: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') cursor_template = q.cursor_template() cursor = db.Cursor.from_template(cursor_template,offset=int(self.request.get('skip'))) (or something along these lines) Does that make sense? On 10 February 2010 01:03, Nick Johnson (Google) nick.john...@google.comwrote: Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com Will we be able to construct our own cursors much the same way that we are able to construct our own Datastore keys (Key.from_path())? No, not practically speaking. Also along the same lines, will we be able to deconstruct a cursor to get its components (offset, start_inclusive etc.), as we can now do with keys (key.name(), key.id(), key.kind() etc.)? While you could do this, there's no guarantees that it'll work (or continue to work), as you'd be digging into internal implementation details. Why do you want to do this? -Nick Johnson 2010/2/9 Nick Johnson (Google) nick.john...@google.com 2010/2/9 Stephen sdea...@gmail.com I'm asking if it's wise to store it as a query parameter embedded in a web page. You're right that it's unwise. Depending on how you construct your query, a user could potentially modify the cursor they send to you to return results from any query your datastore is capable of performing, which could result in you revealing information to the user that they shouldn't know. You should either store the cursor on the server-side, or encrypt it before sending it to the client. I was going to mention something about this in my post, but it slipped my mind. -Nick Johnson On Feb 9, 12:26 am, Ikai L (Google) ika...@google.com wrote: A cursor serializes to a Base64 encoded String, so you can store it anywhere you want to store strings: Memcached, Datastore, etc. You can even pass it as an URL parameter to task queues. 2010/2/8 Stephen sdea...@gmail.com Ah right, Nick's blog does say start_key and not offset. My bad. Maybe there will be warnings in the upcoming documentation, but my first instinct was to embed the serialised cursor in the HTML as the 'next' link. But that doesn't look like a good idea as Nick's decoded query shows what's embedded: PrimaryScan { start_key: shell\000TestModel\000foo\000\232bar\000\200 start_inclusive: true } keys_only: false First, you may or may not want to leak this info. Second, could this be altered on the client to change the query in any way that's undesirable? Once you have a cursor, where do you store it so you can use it again? On Feb 8, 10:17 pm, Ikai L (Google) ika...@google.com wrote: I got beaten to this answer. No, there is no traversal to get to the offset. BigTable has an underlying mechanism for range queries on keys. Indexes are essentially a key comprised of a concatenation of application ID, entity type, column, value. When a filter operation is performed, the datastore looks for a range matching this criteria, returning the set of keys. A cursor also adds the datastore key of the entity so it is possible to serialize where to begin the query. This is actually a bit awkward to explain without visuals. You can watch Ryan Barrett's talk here: http://www.youtube.com/watch?v=tx5gdoNpcZM Hopefully, we'll be able to post an article at some point in the future explaining how cursors work. 2010/2/8 Alkis Evlogimenos ('Αλκης Ευλογημένος) evlogime...@gmail.com There is no offset. The protocol buffer stores a start_key and a boolean denoting if this start key is inclusive or not. The performance of continuing the fetch from a cursor should be the same as the performance of the first entities you got from a query. On Mon, Feb 8, 2010 at 4:33 PM, Stephen sdea...@gmail.com wrote: On
[google-appengine] Re: comment récupérer des image à partir de la data store
merci bien pour le lien, il y a quelque chose d'autre que je veut m'informer sur, j'utilise pour tester(en local) le code qui manipule des image la bibliothèque PIL(Python Imaging Library). maintenant si je fini et je veut uploader mon code pour qu'il soit utiliser sur le net, comment je vais faire? est ce que je doit installer cette bibliothèque sur le serveur ou est héberger mon application web ? -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] app engine, shared IP and twitter api
Hi, App Engine uses a shared pool of IPs for outgoing urlfetch requests. Unfortunately, as you observe, some services such as Twitter enforce per-ip ratelimiting. In the case of Twitter, most of their APIs that support anonymous access also support authenticated access. You can submit authenticated requests instead, which are limited by your account, rather than by your IP. -Nick Johnson On Tue, Feb 9, 2010 at 2:33 PM, enes akar enesa...@gmail.com wrote: Hi; I have just deployed an application to app engine which use twitter search api. But there is a problem. Twitter blocks some of my requests saying You have been rate limited. Enhance your calm. Of course I have asked about this to twitter men, waiting for their reply. But I want to ask you, whether following scenerio is possible: May app engine give the same IP to different applications? If so another application which we share the same IP, may be spamming twitter api; and because of this spammer application I am blocked too. Is this possible? Have you seen similar problem, and is there a solution? Note: It is not possible to exceed the rate limits of twitter, because there is no traffic in my site. Thanks in advance. -- Enes Akar http://www.linkedin.com/pub/enes-akar/7/835/3aa -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Re: 1.3.1 SDK Prerelease - help us verify
Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com I'd want to do this so that I could include parts of the cursor (such as the offset) into a URL without including other parts (eg. the model kind and filters). I could then reconstruct the cursor on the server side based on what was passed into the URL. The offset argument you're talking about is specific to the dev_appserver's implementation of cursors. In production, offsets are not used, so this won't work. -Nick Johnson For example, if I was searching for blog comments that contained the word the (with the default order being the creation time, descending), the URL might look like this: myblog.com/comments/?q=the With model: class Comment(db.Model): created_at = db.DateTimeProperty(auto_now_add=True) words = db.StringListProperty() # A list of all the words in a comment (forget about exploding indexes for now) ... The query object for this URL might look something like: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') To get to the 1001st comment, it'd be good if the URL looked something like this: myblog.com/comments/?q=theskip=1000 instead of: myblog.com/comments/?q=thecursor=[something ugly] so that when the request comes in, I can do this: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') cursor_template = q.cursor_template() cursor = db.Cursor.from_template(cursor_template,offset=int(self.request.get('skip'))) (or something along these lines) Does that make sense? On 10 February 2010 01:03, Nick Johnson (Google) nick.john...@google.comwrote: Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com Will we be able to construct our own cursors much the same way that we are able to construct our own Datastore keys (Key.from_path())? No, not practically speaking. Also along the same lines, will we be able to deconstruct a cursor to get its components (offset, start_inclusive etc.), as we can now do with keys (key.name(), key.id(), key.kind() etc.)? While you could do this, there's no guarantees that it'll work (or continue to work), as you'd be digging into internal implementation details. Why do you want to do this? -Nick Johnson 2010/2/9 Nick Johnson (Google) nick.john...@google.com 2010/2/9 Stephen sdea...@gmail.com I'm asking if it's wise to store it as a query parameter embedded in a web page. You're right that it's unwise. Depending on how you construct your query, a user could potentially modify the cursor they send to you to return results from any query your datastore is capable of performing, which could result in you revealing information to the user that they shouldn't know. You should either store the cursor on the server-side, or encrypt it before sending it to the client. I was going to mention something about this in my post, but it slipped my mind. -Nick Johnson On Feb 9, 12:26 am, Ikai L (Google) ika...@google.com wrote: A cursor serializes to a Base64 encoded String, so you can store it anywhere you want to store strings: Memcached, Datastore, etc. You can even pass it as an URL parameter to task queues. 2010/2/8 Stephen sdea...@gmail.com Ah right, Nick's blog does say start_key and not offset. My bad. Maybe there will be warnings in the upcoming documentation, but my first instinct was to embed the serialised cursor in the HTML as the 'next' link. But that doesn't look like a good idea as Nick's decoded query shows what's embedded: PrimaryScan { start_key: shell\000TestModel\000foo\000\232bar\000\200 start_inclusive: true } keys_only: false First, you may or may not want to leak this info. Second, could this be altered on the client to change the query in any way that's undesirable? Once you have a cursor, where do you store it so you can use it again? On Feb 8, 10:17 pm, Ikai L (Google) ika...@google.com wrote: I got beaten to this answer. No, there is no traversal to get to the offset. BigTable has an underlying mechanism for range queries on keys. Indexes are essentially a key comprised of a concatenation of application ID, entity type, column, value. When a filter operation is performed, the datastore looks for a range matching this criteria, returning the set of keys. A cursor also adds the datastore key of the entity so it is possible to serialize where to begin the query. This is actually a bit awkward to explain without visuals. You can watch Ryan Barrett's talk here: http://www.youtube.com/watch?v=tx5gdoNpcZM Hopefully, we'll be able to post an article at some point in the future explaining how cursors work. 2010/2/8 Alkis Evlogimenos ('Αλκης Ευλογημένος) evlogime...@gmail.com There is no offset. The protocol buffer stores a start_key and a boolean
Re: [google-appengine] app engine, shared IP and twitter api
Thanks Nick I will try to find authenticated version of search api. By the way I am really thankful about the immediate responses of this group. On Tue, Feb 9, 2010 at 4:50 PM, Nick Johnson (Google) nick.john...@google.com wrote: Hi, App Engine uses a shared pool of IPs for outgoing urlfetch requests. Unfortunately, as you observe, some services such as Twitter enforce per-ip ratelimiting. In the case of Twitter, most of their APIs that support anonymous access also support authenticated access. You can submit authenticated requests instead, which are limited by your account, rather than by your IP. -Nick Johnson On Tue, Feb 9, 2010 at 2:33 PM, enes akar enesa...@gmail.com wrote: Hi; I have just deployed an application to app engine which use twitter search api. But there is a problem. Twitter blocks some of my requests saying You have been rate limited. Enhance your calm. Of course I have asked about this to twitter men, waiting for their reply. But I want to ask you, whether following scenerio is possible: May app engine give the same IP to different applications? If so another application which we share the same IP, may be spamming twitter api; and because of this spammer application I am blocked too. Is this possible? Have you seen similar problem, and is there a solution? Note: It is not possible to exceed the rate limits of twitter, because there is no traffic in my site. Thanks in advance. -- Enes Akar http://www.linkedin.com/pub/enes-akar/7/835/3aa -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Enes Akar http://www.linkedin.com/pub/enes-akar/7/835/3aa -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Re: 1.3.1 SDK Prerelease - help us verify
Does the production cursor string contain information about the app id, kind, any filter()s or order()s, and (more importantly) some sort of numerical value that indicates how many records the next query should skip? If so, and if we could extract this information (and then use it again to the reconstruct the cursor), that would make for much cleaner, safer and intuitive URLs than including the entire cursor string (or some sort of encrypted/encoded cursor string replacement). 2010/2/10 Nick Johnson (Google) nick.john...@google.com Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com I'd want to do this so that I could include parts of the cursor (such as the offset) into a URL without including other parts (eg. the model kind and filters). I could then reconstruct the cursor on the server side based on what was passed into the URL. The offset argument you're talking about is specific to the dev_appserver's implementation of cursors. In production, offsets are not used, so this won't work. -Nick Johnson For example, if I was searching for blog comments that contained the word the (with the default order being the creation time, descending), the URL might look like this: myblog.com/comments/?q=the With model: class Comment(db.Model): created_at = db.DateTimeProperty(auto_now_add=True) words = db.StringListProperty() # A list of all the words in a comment (forget about exploding indexes for now) ... The query object for this URL might look something like: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') To get to the 1001st comment, it'd be good if the URL looked something like this: myblog.com/comments/?q=theskip=1000 instead of: myblog.com/comments/?q=thecursor=[something ugly] so that when the request comes in, I can do this: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') cursor_template = q.cursor_template() cursor = db.Cursor.from_template(cursor_template,offset=int(self.request.get('skip'))) (or something along these lines) Does that make sense? On 10 February 2010 01:03, Nick Johnson (Google) nick.john...@google.com wrote: Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com Will we be able to construct our own cursors much the same way that we are able to construct our own Datastore keys (Key.from_path())? No, not practically speaking. Also along the same lines, will we be able to deconstruct a cursor to get its components (offset, start_inclusive etc.), as we can now do with keys (key.name(), key.id(), key.kind() etc.)? While you could do this, there's no guarantees that it'll work (or continue to work), as you'd be digging into internal implementation details. Why do you want to do this? -Nick Johnson 2010/2/9 Nick Johnson (Google) nick.john...@google.com 2010/2/9 Stephen sdea...@gmail.com I'm asking if it's wise to store it as a query parameter embedded in a web page. You're right that it's unwise. Depending on how you construct your query, a user could potentially modify the cursor they send to you to return results from any query your datastore is capable of performing, which could result in you revealing information to the user that they shouldn't know. You should either store the cursor on the server-side, or encrypt it before sending it to the client. I was going to mention something about this in my post, but it slipped my mind. -Nick Johnson On Feb 9, 12:26 am, Ikai L (Google) ika...@google.com wrote: A cursor serializes to a Base64 encoded String, so you can store it anywhere you want to store strings: Memcached, Datastore, etc. You can even pass it as an URL parameter to task queues. 2010/2/8 Stephen sdea...@gmail.com Ah right, Nick's blog does say start_key and not offset. My bad. Maybe there will be warnings in the upcoming documentation, but my first instinct was to embed the serialised cursor in the HTML as the 'next' link. But that doesn't look like a good idea as Nick's decoded query shows what's embedded: PrimaryScan { start_key: shell\000TestModel\000foo\000\232bar\000\200 start_inclusive: true } keys_only: false First, you may or may not want to leak this info. Second, could this be altered on the client to change the query in any way that's undesirable? Once you have a cursor, where do you store it so you can use it again? On Feb 8, 10:17 pm, Ikai L (Google) ika...@google.com wrote: I got beaten to this answer. No, there is no traversal to get to the offset. BigTable has an underlying mechanism for range queries on keys. Indexes are essentially a key comprised of a concatenation of application ID, entity type, column, value. When a filter operation is performed, the datastore looks for a range matching this criteria, returning the set of
Re: [google-appengine] Re: 1.3.1 SDK Prerelease - help us verify
If the cursor had to skip entries by using an offset, its performance would depend on the size of the offset. This is what the current Query.fetch() api is doing when you give it an offset. A cursor is a pointer to the entry from which the next query will start. It has no notion of offset. On Tue, Feb 9, 2010 at 4:07 PM, Nickolas Daskalou n...@daskalou.com wrote: Does the production cursor string contain information about the app id, kind, any filter()s or order()s, and (more importantly) some sort of numerical value that indicates how many records the next query should skip? If so, and if we could extract this information (and then use it again to the reconstruct the cursor), that would make for much cleaner, safer and intuitive URLs than including the entire cursor string (or some sort of encrypted/encoded cursor string replacement). 2010/2/10 Nick Johnson (Google) nick.john...@google.com Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com I'd want to do this so that I could include parts of the cursor (such as the offset) into a URL without including other parts (eg. the model kind and filters). I could then reconstruct the cursor on the server side based on what was passed into the URL. The offset argument you're talking about is specific to the dev_appserver's implementation of cursors. In production, offsets are not used, so this won't work. -Nick Johnson For example, if I was searching for blog comments that contained the word the (with the default order being the creation time, descending), the URL might look like this: myblog.com/comments/?q=the With model: class Comment(db.Model): created_at = db.DateTimeProperty(auto_now_add=True) words = db.StringListProperty() # A list of all the words in a comment (forget about exploding indexes for now) ... The query object for this URL might look something like: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') To get to the 1001st comment, it'd be good if the URL looked something like this: myblog.com/comments/?q=theskip=1000 instead of: myblog.com/comments/?q=thecursor=[something ugly] so that when the request comes in, I can do this: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') cursor_template = q.cursor_template() cursor = db.Cursor.from_template(cursor_template,offset=int(self.request.get('skip'))) (or something along these lines) Does that make sense? On 10 February 2010 01:03, Nick Johnson (Google) nick.john...@google.com wrote: Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com Will we be able to construct our own cursors much the same way that we are able to construct our own Datastore keys (Key.from_path())? No, not practically speaking. Also along the same lines, will we be able to deconstruct a cursor to get its components (offset, start_inclusive etc.), as we can now do with keys (key.name(), key.id(), key.kind() etc.)? While you could do this, there's no guarantees that it'll work (or continue to work), as you'd be digging into internal implementation details. Why do you want to do this? -Nick Johnson 2010/2/9 Nick Johnson (Google) nick.john...@google.com 2010/2/9 Stephen sdea...@gmail.com I'm asking if it's wise to store it as a query parameter embedded in a web page. You're right that it's unwise. Depending on how you construct your query, a user could potentially modify the cursor they send to you to return results from any query your datastore is capable of performing, which could result in you revealing information to the user that they shouldn't know. You should either store the cursor on the server-side, or encrypt it before sending it to the client. I was going to mention something about this in my post, but it slipped my mind. -Nick Johnson On Feb 9, 12:26 am, Ikai L (Google) ika...@google.com wrote: A cursor serializes to a Base64 encoded String, so you can store it anywhere you want to store strings: Memcached, Datastore, etc. You can even pass it as an URL parameter to task queues. 2010/2/8 Stephen sdea...@gmail.com Ah right, Nick's blog does say start_key and not offset. My bad. Maybe there will be warnings in the upcoming documentation, but my first instinct was to embed the serialised cursor in the HTML as the 'next' link. But that doesn't look like a good idea as Nick's decoded query shows what's embedded: PrimaryScan { start_key: shell\000TestModel\000foo\000\232bar\000\200 start_inclusive: true } keys_only: false First, you may or may not want to leak this info. Second, could this be altered on the client to change the query in any way that's undesirable? Once you have a cursor, where do you store it so you can use it again? On Feb 8, 10:17 pm, Ikai L (Google) ika...@google.com wrote: I got beaten
Re: [google-appengine] getting back images from data store
Have you seen the Dynamically serving images part on that page? http://code.google.com/intl/fr/appengine/docs/python/images/usingimages.html On Mon, Feb 8, 2010 at 1:56 AM, kais louetri yott...@gmail.com wrote: HI i am using the exemple of the guestbook (http://code.google.com/intl/ fr/appengine/docs/python/images/usingimages.html), and i would like to get back images that i stored in it to use them in other pages, can any one give me a help with that ? thank you -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Stay hungry,Stay foolish. -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Re: 1.3.1 SDK Prerelease - help us verify
Still, a slightly modified version of the original request does not seem unreasonable. He would have to formulate his URLs something like this: myblog.com/comments/?q=thefirst=1234 or maybe: myblog.com/comments/?q=theafter=1234 I could see this being really useful, since encrypting (or worse, storing on the server) the cursor is pretty painful. Furthermore, it seems highly probable that as things are, many people will obliviously write public webapps that take a raw cursor as a parameter. This could be the new SQL injection attack. Jeff 2010/2/9 Alkis Evlogimenos ('Αλκης Ευλογημένος) evlogime...@gmail.com: If the cursor had to skip entries by using an offset, its performance would depend on the size of the offset. This is what the current Query.fetch() api is doing when you give it an offset. A cursor is a pointer to the entry from which the next query will start. It has no notion of offset. On Tue, Feb 9, 2010 at 4:07 PM, Nickolas Daskalou n...@daskalou.com wrote: Does the production cursor string contain information about the app id, kind, any filter()s or order()s, and (more importantly) some sort of numerical value that indicates how many records the next query should skip? If so, and if we could extract this information (and then use it again to the reconstruct the cursor), that would make for much cleaner, safer and intuitive URLs than including the entire cursor string (or some sort of encrypted/encoded cursor string replacement). 2010/2/10 Nick Johnson (Google) nick.john...@google.com Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com I'd want to do this so that I could include parts of the cursor (such as the offset) into a URL without including other parts (eg. the model kind and filters). I could then reconstruct the cursor on the server side based on what was passed into the URL. The offset argument you're talking about is specific to the dev_appserver's implementation of cursors. In production, offsets are not used, so this won't work. -Nick Johnson For example, if I was searching for blog comments that contained the word the (with the default order being the creation time, descending), the URL might look like this: myblog.com/comments/?q=the With model: class Comment(db.Model): created_at = db.DateTimeProperty(auto_now_add=True) words = db.StringListProperty() # A list of all the words in a comment (forget about exploding indexes for now) ... The query object for this URL might look something like: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') To get to the 1001st comment, it'd be good if the URL looked something like this: myblog.com/comments/?q=theskip=1000 instead of: myblog.com/comments/?q=thecursor=[something ugly] so that when the request comes in, I can do this: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') cursor_template = q.cursor_template() cursor = db.Cursor.from_template(cursor_template,offset=int(self.request.get('skip'))) (or something along these lines) Does that make sense? On 10 February 2010 01:03, Nick Johnson (Google) nick.john...@google.com wrote: Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com Will we be able to construct our own cursors much the same way that we are able to construct our own Datastore keys (Key.from_path())? No, not practically speaking. Also along the same lines, will we be able to deconstruct a cursor to get its components (offset, start_inclusive etc.), as we can now do with keys (key.name(), key.id(), key.kind() etc.)? While you could do this, there's no guarantees that it'll work (or continue to work), as you'd be digging into internal implementation details. Why do you want to do this? -Nick Johnson 2010/2/9 Nick Johnson (Google) nick.john...@google.com 2010/2/9 Stephen sdea...@gmail.com I'm asking if it's wise to store it as a query parameter embedded in a web page. You're right that it's unwise. Depending on how you construct your query, a user could potentially modify the cursor they send to you to return results from any query your datastore is capable of performing, which could result in you revealing information to the user that they shouldn't know. You should either store the cursor on the server-side, or encrypt it before sending it to the client. I was going to mention something about this in my post, but it slipped my mind. -Nick Johnson On Feb 9, 12:26 am, Ikai L (Google) ika...@google.com wrote: A cursor serializes to a Base64 encoded String, so you can store it anywhere you want to store strings: Memcached, Datastore, etc. You can even pass it as an URL parameter to task queues. 2010/2/8 Stephen sdea...@gmail.com Ah right, Nick's blog does say start_key and not offset. My bad. Maybe there will be warnings in the upcoming documentation, but my
Re: [google-appengine] Re: 1.3.1 SDK Prerelease - help us verify
In case it wasn't completely clear - 1234 in this example is the object's id, not an offset. Jeff On Tue, Feb 9, 2010 at 9:02 AM, Jeff Schnitzer j...@infohazard.org wrote: Still, a slightly modified version of the original request does not seem unreasonable. He would have to formulate his URLs something like this: myblog.com/comments/?q=thefirst=1234 or maybe: myblog.com/comments/?q=theafter=1234 I could see this being really useful, since encrypting (or worse, storing on the server) the cursor is pretty painful. Furthermore, it seems highly probable that as things are, many people will obliviously write public webapps that take a raw cursor as a parameter. This could be the new SQL injection attack. Jeff 2010/2/9 Alkis Evlogimenos ('Αλκης Ευλογημένος) evlogime...@gmail.com: If the cursor had to skip entries by using an offset, its performance would depend on the size of the offset. This is what the current Query.fetch() api is doing when you give it an offset. A cursor is a pointer to the entry from which the next query will start. It has no notion of offset. On Tue, Feb 9, 2010 at 4:07 PM, Nickolas Daskalou n...@daskalou.com wrote: Does the production cursor string contain information about the app id, kind, any filter()s or order()s, and (more importantly) some sort of numerical value that indicates how many records the next query should skip? If so, and if we could extract this information (and then use it again to the reconstruct the cursor), that would make for much cleaner, safer and intuitive URLs than including the entire cursor string (or some sort of encrypted/encoded cursor string replacement). 2010/2/10 Nick Johnson (Google) nick.john...@google.com Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com I'd want to do this so that I could include parts of the cursor (such as the offset) into a URL without including other parts (eg. the model kind and filters). I could then reconstruct the cursor on the server side based on what was passed into the URL. The offset argument you're talking about is specific to the dev_appserver's implementation of cursors. In production, offsets are not used, so this won't work. -Nick Johnson For example, if I was searching for blog comments that contained the word the (with the default order being the creation time, descending), the URL might look like this: myblog.com/comments/?q=the With model: class Comment(db.Model): created_at = db.DateTimeProperty(auto_now_add=True) words = db.StringListProperty() # A list of all the words in a comment (forget about exploding indexes for now) ... The query object for this URL might look something like: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') To get to the 1001st comment, it'd be good if the URL looked something like this: myblog.com/comments/?q=theskip=1000 instead of: myblog.com/comments/?q=thecursor=[something ugly] so that when the request comes in, I can do this: q = Comment.all().filter('words',self.request.get('q')).order('-created_at') cursor_template = q.cursor_template() cursor = db.Cursor.from_template(cursor_template,offset=int(self.request.get('skip'))) (or something along these lines) Does that make sense? On 10 February 2010 01:03, Nick Johnson (Google) nick.john...@google.com wrote: Hi Nickolas, 2010/2/9 Nickolas Daskalou n...@daskalou.com Will we be able to construct our own cursors much the same way that we are able to construct our own Datastore keys (Key.from_path())? No, not practically speaking. Also along the same lines, will we be able to deconstruct a cursor to get its components (offset, start_inclusive etc.), as we can now do with keys (key.name(), key.id(), key.kind() etc.)? While you could do this, there's no guarantees that it'll work (or continue to work), as you'd be digging into internal implementation details. Why do you want to do this? -Nick Johnson 2010/2/9 Nick Johnson (Google) nick.john...@google.com 2010/2/9 Stephen sdea...@gmail.com I'm asking if it's wise to store it as a query parameter embedded in a web page. You're right that it's unwise. Depending on how you construct your query, a user could potentially modify the cursor they send to you to return results from any query your datastore is capable of performing, which could result in you revealing information to the user that they shouldn't know. You should either store the cursor on the server-side, or encrypt it before sending it to the client. I was going to mention something about this in my post, but it slipped my mind. -Nick Johnson On Feb 9, 12:26 am, Ikai L (Google) ika...@google.com wrote: A cursor serializes to a Base64 encoded String, so you can store it anywhere you want to store strings: Memcached, Datastore, etc. You can even pass it as an URL parameter to task queues.
Re: [google-appengine] 100 seeks/sec equals how many writes/sec?????
marc, the language is a little tricky here. 风笑雪's response is a closer to reality. brett's argument was for pure disk operations at the lowest level, e.g., he was speaking solely of max possible write operations to disk (and not *entity* writes to disk). it's not even possible to write 100 small entities to disk in a sec because of the overhead of journaling, indexing, and verification. i also received some clarification from brett to confirm: [My] point in saying that was to illustrate that *base-case* with a 10ms seek time you could do 100 writes/sec, and that doesn't even include the data transfer time. With data larger than one disk block and operating system overhead the potential write throughput for a single entity is way less. if you wanted to do a real measurement, you could use time.time() in 2 places to measure write throughput for your app and get a rough idea. keep in mind that your app runs on different machines and different disks so an average number is the best rough estimate. hope this helps! -- wesley - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Core Python Programming, Prentice Hall, (c)2007,2001 Python Fundamentals, Prentice Hall, (c)2009 http://corepython.com wesley.j.chun :: wesc+...@google.com developer relations :: google app engine -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: Unable to access Admin Console
greetings! are you still having this issue? if so, can you send us a more accurate URL than https:appengine.google.com/a/YourDomain.com/? also, what is your application ID? we can help you more with this additional information. thanks! -- wesley - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Core Python Programming, Prentice Hall, (c)2007,2001 Python Fundamentals, Prentice Hall, (c)2009 http://corepython.com wesley.j.chun :: wesc+...@google.com developer relations :: google app engine -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] A Which is Better question.
I'm trying to get my head around where to use the datastore for business logic, and where to use python code. So just wanted to ask two which approach is better questions: Scenario 1. For example, let's say you have a list of items, and you need to return both the selected item as well as the list of items. For example - a person has a bunch of cars: [Honda, Ford, Porsche, Yugo, Trabaunt, Dusenberg]. You have stored the Yugo key as the person's 'active_car'. You need to return: car, cars = Yugo, [Honda, Ford, Porsche, Yugo, Trabaunt, Dusenberg] Which approach is better to return the values... Approach A: cars=person.car_set.fetch(1000) car = db.get(stored_car_key) return car, cars Approach B: cars = person.car_set.fetch(1000) car = [i for i in cars if i.key() == stored_car_key] return car, cars In other words - what's cheaper - the list comprehension, or the db.get(). If the person has 1000 cars, does the answer change? Scenario 2. I have a list of 300 people (In my case, there will never be more than 1000) that I need to slice and dice in different ways. a. Need them all, by last name, from California. b. Need people between the ages of 25 and 35 in California. c. Need people over 300 lbs in California. Which approach should I use: Approach A: Create multiple queries: a. people = state.people_set.order('last_name').fetch(1000) b. people = state.people_set.order('age').filter('age ', 35).etc. c. people = state.people_set.order(weight').filter('weight ', 300).etc. Approach B: Memcache the entire list of people, and list_comprehension them into submission. For example: def return_people_by_last_name(): people = get_all_people_from_memcache() sort_list = [(i.last_name, i) for i in people if i.state == state] sort_list.sort() return [i[1] for i in sort_list] def sort_people_by_weight(): similar to above... In approach A, you'll be bearing the cost of additional indexes, as well as bearing the cost that most of your returns will be hits to the database. In approach B, you might be pulling 300 People from memcache in order to return a single 300 pounder. Answers to these two questions might give me a better sense of when to hit the datastore for business logic, and when to process using python code. Thanks! johnP -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: 500 status on apps, api changes?
What was the change, and what was the fix? The stack trace above shows: File /base/data/home/apps/mk-a-z/3.339622665704014614/mkapp/ business.py, line 149, in get_by_ident business = Business.get_by_key_name(key) File /base/python_lib/versions/1/google/appengine/ext/db/ __init__.py, line 991, in get_by_key_name return get(keys[0], rpc=rpc) TypeError: get_cached() got an unexpected keyword argument 'rpc' If db.get changed, you would have to change google/appengine/ext/db/ __init__.py, but I presume that is replaced when you upload anyway. Did Model.get_by_key_name change? Dan On Feb 9, 3:08 am, dobee berndd...@gmail.com wrote: ok, we now fixed the compatibility issues on our apps, but the development sdk still does not match the api on appengine. it would be nice to get information about such internal changes up- front the next time. it is always hard to explain our customers why the site was offline for some technical reason we cannot forsee. thx, bernd -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: 500 status on apps, api changes?
Note: I had this problem as well. I was using the caching strategy outlined in http://henritersteeg.wordpress.com/2009/03/30/generic-db-caching-in-google-app-engine/, which relies on the signature of db.get(). Dan On Feb 9, 3:08 am, dobee berndd...@gmail.com wrote: ok, we now fixed the compatibility issues on our apps, but the development sdk still does not match the api on appengine. it would be nice to get information about such internal changes up- front the next time. it is always hard to explain our customers why the site was offline for some technical reason we cannot forsee. thx, bernd -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] I need a working InboundMail example, pls
Hello, all. If you have a working example of using inbound email, I would be grateful for a peek at it. Oops, I should mention that I need the Python version. Also, if you do have an example and you are nice enough to share it with me, can I pls beg your indulgence and have you show me what you put into the from/to fields in the Development Console when you are testing? Thanks! Thank you one and all for being here for me, Matthew ps. this is my first posting on this group - and as a way of introducing myself I'll just say that I am overjoyed to see Python being used in such a way - it was clear to me when Python 2 arrived that that it (or something like it) was going to be the way to software gets created - long live Python and GAE -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Server error message when signing up to the google app engine
Hi everyone, I'm not sure that my question has'nt been asked before, but i'm gonna whatever all ask you that. When choosing to sign up to the GAE, and after having typed my email adress and my password, I've had this message : ___ Error: Server Error The server encountered an error and could not complete your request. If the problem persists, please report your problem and mention this error message and the query that caused it. ___ Do someone else get this error message ? -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] already covered, but mentioning it again
Inbound email was not working. Downgraded Python to 2.5. Now email works on Ubuntu 10. Here's what I did: In a terminal install Python 2.5 They will coexist on the system. sudo apt-get install python2.5 Edit dev_appserver.py in your google_appengine directory Change the first line in dev_appserver.py… #!/usr/bin/env python ….to… #!/usr/bin/env python2.5 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Creating Index programatically
Is there any way to create/build an Index programatically in GAE? -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Creating Index programatically
No. But if you explain the problem you are trying to solve someone might be able to suggest an alternative solution. Robert On Tue, Feb 9, 2010 at 1:34 PM, Sandeep sandeep.sath...@gmail.com wrote: Is there any way to create/build an Index programatically in GAE? -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: Help us bring Google Development to Saint Louis
Thank you all for your RTs and messages. Because of the strong development community at Google, we have already had a member of Google's outreach team contact us to speak at the STL Innovation Camp. Again thank you, without your desire to help the community this wouldn't have happened. On Jan 30, 9:05 pm, STL Innovation Camp bblancha...@gmail.com wrote: PLEASE READ BEFORE MARKING AS SPAM: The Saint Louis Dev Community, like most, is in desperate need of an employment boost. To help our unemployed brethren, a number of us formed decided to host a boot camp that teaches techies how to build innovative products and run their own company. Since our goal is economic growth and not vendor sales, this camp is entirely vendor neutral. We currently have speakers sponsors from the Java, Microsoft, and IBM communities. Unfortunately, we haven't been able to get Google's attention. Please help us attract Google as a sponsor/speaker so Saint Louis developers can learn about Google App Engine in this exciting camp. Please forward this message or join us in a tweet off to get Googles attention: Twitter Message: RT @STLInnovation: Pls RT and get @google to sponsor STL Innovation camp. #InnovationCamphttp://bit.ly/aZxtrE Please tweet quickly, our camp is on Feb. 26th, so we need to get Google's attention quickly.http://www.stlinnovationcamp.com| @stlinnovation -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Re: Stored data voiume is totally different on Datastore Statistics and Dashboard
I think it is a great ide. Would certainly help us better understand how we are using space. Robert On Tue, Feb 9, 2010 at 4:12 AM, Pavel Kaplin pavel.kap...@gmail.com wrote: I like this suggestion too. Moreover, I'd prefer detailed description of the number called Used Space on Dashboard/Quota Details pages. E.g. indexes = 250 Mb , Entities = 500 Mb, sessions = 50 Mb and so on, plus detailed info about indexes and sessions. What do you think? On Mon, Feb 8, 2010 at 9:57 PM, Robert Kluin robert.kl...@gmail.com wrote: I like Philip's suggestion a lot. It will help us all identify space intensive indexes, and _hopefully_ reduce the number of posts about this. I submitted a feature request for this issue: http://code.google.com/p/googleappengine/issues/detail?id=2740 Robert On Mon, Feb 8, 2010 at 2:27 PM, WeatherPhilip philip-goo...@gladstonefamily.net wrote: This issue comes up about once per week. Google -- you need to address this. The simplest way of addressing it would be to put the size of *every* index on the statistics page, and show that the total corresponds (roughly) to the quota number. This would enable people to see which index (or indexes) was consuming a lot of space, and take steps to optimize -- maybe by not indexing that field. Philip On Feb 8, 1:48 pm, Ikai L (Google) ika...@google.com wrote: Are you storing information in sessions? Session information can also take up space. On Mon, Feb 8, 2010 at 5:32 AM, Pavel Kaplin pavel.kap...@gmail.com wrote: Here's the detailed description of mentioned indexes: 1) address (string, 100 bytes), tradePoint(String, 100 bytes), user (Key, generated by GAE), timestamp 2) tradePoint, user, timestamp 3) user, timestamp Entities count is about 15k. I don't understand how it might happened. On Feb 8, 3:25 pm, Nick Johnson (Google) nick.john...@google.com wrote: Hi Pavel, That depends on the nature of your indexes, and the entities being indexed. It's certainly possible for indexes to reach this magnitude - particularly if you're indexing list properties. -Nick Johnson On Mon, Feb 8, 2010 at 1:12 PM, Pavel Kaplin pavel.kap...@gmail.com wrote: It's hard to believe that 3 indexes (for 2, 3 and 4 fields) could eat 9x more space than data itself. On Feb 8, 2:45 pm, Nick Johnson (Google) nick.john...@google.com wrote: Hi Pavel, The datastore stats include only the raw size of the entities. The total space consumed is the space consumed by the entities, plus the space consumed by all your indexes. -Nick Johnson On Mon, Feb 8, 2010 at 12:35 PM, Pavel Kaplin pavel.kap...@gmail.com wrote: Hi there! My datastore stats says me Size of all entities = 51 MBytes, but dashboard shows 0.54 Gb as Total Stored Data. As you can see, these values differ from each other for more than ten times. Why? Application id is bayadera-tracker -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appengine@googlegroups.com . To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appengine@googlegroups.com . To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more
[google-appengine] Re: cron job and secured application
In terms of https enforcement, it is done through the standard web application descriptor in Java (web.xml). Appengine automatically redirects from http to https when an secured url is accessed through http. Since a cron job url is a relative url and the cron job winds up being called through http, the cron job request gets redirected to https. The app is not the one sending 302, I believe appengine doesn't allow a job to do a redirect and returns the 302 error. That's why I think it would be of value to allow cron job to be configured to use https rather than http. Len On Feb 8, 5:04 am, Nick Johnson (Google) nick.john...@google.com wrote: Hi, I presume from your description you're enforcing https-only in your code? Cronjobs don't actually use HTTP, so they simply fill in the protocol value with a default of 'http'. You need to exempt cron requests in your app from sending 302s. -Nick Johnson On Sat, Feb 6, 2010 at 1:15 AM, lent lentakeu...@gmail.com wrote: Hi, I have an (java) application that's secured so that only https access is allowed. I'm running into a problem with cron jobs in that they are sent using http and when scheduled request hits my app gets redirected to https and and winds up getting too many continues and 302 status. I didn't find anything in the docs about configuring to have the scheduled requests sent via https. Is this in the plans? Any suggestions for how I can get around this problem other than to have the scheduled request urls be allowed to come in through http. Thanks, Len -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] I need a working InboundMail example, pls
Matthew, there's an example of this here in our docs: http://code.google.com/appengine/docs/python/mail/receivingmail.html On Mon, Feb 8, 2010 at 1:13 PM, Matthew kogswellcyc...@gmail.com wrote: Hello, all. If you have a working example of using inbound email, I would be grateful for a peek at it. Oops, I should mention that I need the Python version. Also, if you do have an example and you are nice enough to share it with me, can I pls beg your indulgence and have you show me what you put into the from/to fields in the Development Console when you are testing? Thanks! Thank you one and all for being here for me, Matthew ps. this is my first posting on this group - and as a way of introducing myself I'll just say that I am overjoyed to see Python being used in such a way - it was clear to me when Python 2 arrived that that it (or something like it) was going to be the way to software gets created - long live Python and GAE -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: The import com.google.apphosting.api.ApiProxy cannot be resolved
This error started on my in Eclipse for me, as well, after I downloaded and installed the latest GWT 2.0.1 No resolution yet, and it didn't happen after updating on another workstation, so not sure what the issue is. Here's the error, The type com.google.apphosting.api.ApiProxy$Delegate cannot be resolved. It is indirectly referenced from required .class files and The project was not built since its build path is incomplete. Cannot find the class file for com.google.apphosting.api.ApiProxy$Delegate. Fix the build path then try building this project On Feb 3, 1:13 am, ivanceras ivance...@gmail.com wrote: I also have the same issue, import com.google.appengine.tools.development.ApiProxyLocalImpl; is an error in my eclipse IDE. On Dec 30 2009, 3:32 am, Ikai L (Google) ika...@google.com wrote: ApiProxy should just be part of the standard SDK JAR. Is this being included correctly? On Sun, Dec 27, 2009 at 7:01 PM, bill b...@alerts.com wrote: I followed the instructions here: http://code.google.com/appengine/docs/java/howto/unittesting.html and added appengine-api-stubs.jar and appengine-local-runtime.jar to my classpath. Eclipse was able to resolve these imports fine: import com.google.appengine.api.datastore.dev.LocalDatastoreService; import com.google.appengine.tools.development.ApiProxyLocalImpl; It is not able to resolve this import: import com.google.apphosting.api.ApiProxy; Is there another JAR file I need to add to my classpath? - Bill -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Ikai Lan Developer Programs Engineer, Google App Engine -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Uncatchable severe error Operation commit failed on resource logged
Hi everybody! I am using the java implementation and seeing the following error logged sporadically, both in the development server and live. Note that it does not seem to be a real error, as the commit always goes through and my data looks perfectly fine. Could it be a low-level exception that is not converted back to a JDOException? Is it a real error? org.datanucleus.transaction.Transaction commit: Operation commit failed on resource: org.datanucleus.store.appengine.datastorexaresou...@608d41, error code UNKNOWN and transaction: [DataNucleus Transaction, ID=Xid= I think the root cause of this problem is that I'm reading entities from one entity group, cache them and then I open a transaction on another entity group. In short, I spawn tasks that first read 30 or so entities and copy a subset of their content into memory. Then, I open a transaction and cache this content to a global entity (just a wrapper around a Blob) for later use. My goal is to go over all the entities of a kind (1000s) and cache a subset of their data that I often need. The cache and the other entities are not in the same entity group. If I only perform the transaction, without reading the other entities first the error does not occur. Note that I'm doing this very carefully -- I perform all my data store operations inside of a try/catch for loop to retry if necessary. Thanks for any help! Marc -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: Audio
It would be great to have an audio API like you say, for transcoding, voice recognition, general manip. Currently having to upload 4 formats for the same file. There is this in issues: http://code.google.com/p/googleappengine/issues/detail?id=1947 On Feb 8, 6:40 pm, sampablokuper sampabloku...@googlemail.com wrote: On Feb 6, 8:43 pm, ProfessorMD rkc...@gmail.com wrote: Does Google App Engine have support for the Java Sound API? Come to think of it, does Google App Engine support any audio processing libraries? Can an App Engine app, for instance, transcode an uploaded WAV file to a FLAC or MP3 file? -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: Android app to monitor appengine quotas
Hi, I've updated Engine Watch for Android. New: - Now uses the build-in system Google Accounts on Android 2.0 and up (no more entering passwords) - Add shortcuts to a specific app on the home screen - Display of billing stats Full details on my blog at http://code.neenbedankt.com Hugo On Feb 1, 5:05 pm, Hugo Visser botte...@gmail.com wrote: Hi, I've released a little android app to monitor your app engine quotas. It's called Engine Watch and is available from the android market. See my blog athttp://code.neenbedankt.comfor more details. I hope it's useful to some of you too :) Hugo -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: app engine, shared IP and twitter api
Make sure you set your User Agent string to something unique as well. You'll still get Rate Limited, but it should be a slightly higher limit. To answer your question, yes, you are being rate limited because of other App Engine Twitter search API users. I wouldn't suggest using App Engine and Twitter Search for a production project because of this. Twitter does not have authenticated search API, and only whitelists search users by IP address, and explicitly says in their docs that they can't/won't whitelist App Engine apps: http://apiwiki.twitter.com/Rate-limiting The Search API is only able to whitelist IP addresses, not user accounts. This works in most situations but for cloud platforms like Google App Engine, applications without a static IP addresses cannot receive Search whitelisting. Ryan On Feb 9, 8:05 am, enes akar enesa...@gmail.com wrote: Thanks Nick I will try to find authenticated version of search api. By the way I am really thankful about the immediate responses of this group. On Tue, Feb 9, 2010 at 4:50 PM, Nick Johnson (Google) nick.john...@google.com wrote: Hi, App Engine uses a shared pool of IPs for outgoing urlfetch requests. Unfortunately, as you observe, some services such as Twitter enforce per-ip ratelimiting. In the case of Twitter, most of their APIs that support anonymous access also support authenticated access. You can submit authenticated requests instead, which are limited by your account, rather than by your IP. -Nick Johnson On Tue, Feb 9, 2010 at 2:33 PM, enes akar enesa...@gmail.com wrote: Hi; I have just deployed an application to app engine which use twitter search api. But there is a problem. Twitter blocks some of my requests saying You have been rate limited. Enhance your calm. Of course I have asked about this to twitter men, waiting for their reply. But I want to ask you, whether following scenerio is possible: May app engine give the same IP to different applications? If so another application which we share the same IP, may be spamming twitter api; and because of this spammer application I am blocked too. Is this possible? Have you seen similar problem, and is there a solution? Note: It is not possible to exceed the rate limits of twitter, because there is no traffic in my site. Thanks in advance. -- Enes Akar http://www.linkedin.com/pub/enes-akar/7/835/3aa -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Enes Akarhttp://www.linkedin.com/pub/enes-akar/7/835/3aa -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] DeadlineExceededError / 500 Server Error Occurring everywhere
My site is suddenly acting up today. Every page is throwing a 500 Server Error (The server encountered an error and could not complete your request.) and the logs all cite the DeadlineExceededError. I haven't made any code changes in a month. I noticed it happens immediately after I try to edit content on my site (a couple of writes to the datastore and memcache), but any further activity yields the 500 / deadline exceed error on every page on the site and this problem lasts for around 5 minutes, then suddenly the site works again, then more 500's will occur. The content isn't any different from what I've worked on in the past, and in the past I was able to do what I'm doing now without these problems. Can someone at google see what's up? My app name is newfangledfunnies Thanks, Leon -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Re: app engine, shared IP and twitter api
Thanks Ryan, yes I have an unique User Agent. Also people from twitter answered my question. As I guessed, all app engine applications have the same IP, we are blocked easily. They are offering to migrate my app to another platform. I wanted them to propose app engine's users a special solution. It is very depressing after all app engine specific work. On Tue, Feb 9, 2010 at 10:35 PM, Ryan ryanleeschnei...@gmail.com wrote: Make sure you set your User Agent string to something unique as well. You'll still get Rate Limited, but it should be a slightly higher limit. To answer your question, yes, you are being rate limited because of other App Engine Twitter search API users. I wouldn't suggest using App Engine and Twitter Search for a production project because of this. Twitter does not have authenticated search API, and only whitelists search users by IP address, and explicitly says in their docs that they can't/won't whitelist App Engine apps: http://apiwiki.twitter.com/Rate-limiting The Search API is only able to whitelist IP addresses, not user accounts. This works in most situations but for cloud platforms like Google App Engine, applications without a static IP addresses cannot receive Search whitelisting. Ryan On Feb 9, 8:05 am, enes akar enesa...@gmail.com wrote: Thanks Nick I will try to find authenticated version of search api. By the way I am really thankful about the immediate responses of this group. On Tue, Feb 9, 2010 at 4:50 PM, Nick Johnson (Google) nick.john...@google.com wrote: Hi, App Engine uses a shared pool of IPs for outgoing urlfetch requests. Unfortunately, as you observe, some services such as Twitter enforce per-ip ratelimiting. In the case of Twitter, most of their APIs that support anonymous access also support authenticated access. You can submit authenticated requests instead, which are limited by your account, rather than by your IP. -Nick Johnson On Tue, Feb 9, 2010 at 2:33 PM, enes akar enesa...@gmail.com wrote: Hi; I have just deployed an application to app engine which use twitter search api. But there is a problem. Twitter blocks some of my requests saying You have been rate limited. Enhance your calm. Of course I have asked about this to twitter men, waiting for their reply. But I want to ask you, whether following scenerio is possible: May app engine give the same IP to different applications? If so another application which we share the same IP, may be spamming twitter api; and because of this spammer application I am blocked too. Is this possible? Have you seen similar problem, and is there a solution? Note: It is not possible to exceed the rate limits of twitter, because there is no traffic in my site. Thanks in advance. -- Enes Akar http://www.linkedin.com/pub/enes-akar/7/835/3aa -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appengine@googlegroups.com . To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Enes Akarhttp://www.linkedin.com/pub/enes-akar/7/835/3aa -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Enes Akar http://www.linkedin.com/pub/enes-akar/7/835/3aa -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Creating Index programatically
We have built a relational database on top of Google Bigtable which supports ANSI SQL-92/ANSI SQL-99 JDBC 3.0. Please check www.cloud2db.com. We want to build indexes using SQL DDL commands. Also we support creating multiple servers and databases within Cloud2db instance that's why we can't effectively use approach of using one index definition file per appspot. Also we want to avoid re-deploying complete application for adding new indexes. On Tue, Feb 9, 2010 at 1:40 PM, Robert Kluin robert.kl...@gmail.com wrote: No. But if you explain the problem you are trying to solve someone might be able to suggest an alternative solution. Robert On Tue, Feb 9, 2010 at 1:34 PM, Sandeep sandeep.sath...@gmail.com wrote: Is there any way to create/build an Index programatically in GAE? -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Data design choice: which works better?
Hi, I know this might just me being being crazy, but I'm having a lot of problems following your description. It's, unfortunately, the limitations of my human mind at work. Do you mind describing your question in terms of your problem domain? It'd be easier to wrap my brain around more concrete terms (Person, Group, Order, etc) rather than abstract letters (I suspect that's the reason no one has answered your question, because it's too hard to read). On Thu, Feb 4, 2010 at 3:35 AM, markvgti hsjawa...@gmail.com wrote: Each user U, has 0 or more children data entities corresponding to days D. Each day D has 0 or more children data entities of types X, Y and Z. Is it better to associate items X, Y and Z with an entity of type D by: 1. creating a collection each of X, Y and Z data entities inside entity D (e.g., private ListY childrenOfTypeY;), or by 2. storing X, Y and Z by generating their Key values such that it contains the parent entity D's key (e.g., Key k = new KeyFactory.Builder(D.class.getSimpleName(), BlahBlahBlah).addChild(X.class.getSimpleName(), YadaYadaYada).getKey();). My primary concern is which type of data design will be better resource/time consumption-wise (i.e., which way is lighter). AFAIK, method 1 gives me automatic consistency, method 2 gives me flexibility. In method 1, when I fetch an entity of type D, are all children entities of types X, Y Z fetched in one go, or lazily (w/o programmatic intervention) on an as-required basis? In method 2 fetching the children is of course up to me. Other characteristics of my application: * As far as writing is concerned, it is more likely that individual children of an entity of type D will be written to. * As far as reading from the datastore is concerned, it is more likely that all children of 1 or more entities of type D will need to be fetched to satisfy a single request. * Once an entity of type D is created, it and its children are unlikely to be deleted, though entities of type X, Y and Z (for a given entity D) may be individually modified. * Data consistency is obviously of concern, but since data deletion is infrequent, app-managed consistency shouldn't be too hard. Plus, a cleanup Task can delete orphan X, Y, Z objects (should that happen). If it matters, I am using Java. If the above explanation is too opaque :-) or I have posted to the wrong group, please let me know. Thanks! -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Pervasive datastore timeouts
Adding an index shouldn't cause reads to take longer, though it will add time to the writes. It's more likely that your adding of an index was simply a coincidence. Are you still seeing these datastore issues? On Sat, Feb 6, 2010 at 5:11 AM, Jason Smith j...@proven-corporation.comwrote: We have a cron job which fetches up to 1,000 entities based on a timestamp--no transactions, no writes. It has been working for several weeks. I recently added an index (the timestamp, plus a boolean). Subsequently, the datastore is almost completely unresponsive with these entities. The vast majority of the queries raise a Timeout exception, always after exactly 4 seconds. It seems that I can hardly query these entities at all, using any filter. I was under the impression that off-and-on timeouts are transient. But this has been happening for nearly a day. Also I expected that once an index is serving, no legal query could possibly time out always. I am concerned that I have an index or datastore issue. Does anybody have any insights about this? -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- Ikai Lan Developer Programs Engineer, Google App Engine http://googleappengine.blogspot.com | http://twitter.com/app_engine -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: When is the Timeout bug going to get fixed?
The recipe does cut down the Timeouts dramatically, but there are still a large number which seem to bypass the this fix completely. A sample error log entry is attached: Exception in request: Traceback (most recent call last): File /base/python_lib/versions/third_party/django-0.96/django/core/ handlers/base.py, line 77, in get_response response = callback(request, *callback_args, **callback_kwargs) File /base/data/home/apps/kbdlessons/1-01.339729324125102596/ views.py, line 725, in newlesson productentity = Products.gql(where Name = :1, ProductID).get() File /base/python_lib/versions/1/google/appengine/ext/db/ __init__.py, line 1564, in get results = self.fetch(1, rpc=rpc) File /base/python_lib/versions/1/google/appengine/ext/db/ __init__.py, line 1616, in fetch raw = raw_query.Get(limit, offset, rpc=rpc) File /base/python_lib/versions/1/google/appengine/api/ datastore.py, line 1183, in Get limit=limit, offset=offset, prefetch_count=limit, **kwargs)._Get(limit) File /base/python_lib/versions/1/google/appengine/api/ datastore.py, line 1113, in _Run raise _ToDatastoreError(err) Timeout Any ideas on how to deal with is class of Timeouts? On Jan 28, 9:48 am, phtq pher...@typequick.com.au wrote: Thanks for mentioning this recipe, it worked well in testing and we will try it on the user population tomorrow. On Jan 27, 9:48 am, djidjadji djidja...@gmail.com wrote: There is an article series about the datastore. It explains that the Timeouts are inevitable. It gives the reason for the timeouts. They will always be part of Bigtable and the Datastore of GAE. The only solution is a retry on EVERY read. The get by id/key and the queries. If you do that then very few reads will result in aTimeout. I wait first 3 and then 6 secs between each request. I log eachTimeout. If stillTimeoutafter 3 read tries I raise the exception. The result is very few final read Timeouts. The log shows frequent requests that need a retry, but most of them will succeed with the first. For speed, fetch the Static content object by key_name, and key_name is the file path. 2010/1/26 phtq pher...@typequick.com.au: Our application error log for the 26th showed around 160 failed http requests due to timeouts. That's 160 users being forced to hit the refresh button on their browser to get a normal response. A more typical day has 20 to 60 timeouts. We have been waiting over a year for this bug to get fixed with no progress at all. Its beginning to look like it's unfixable so perhaps Google could provide some workaround. In our case, the issue arises because of the 1,000 file limit. We are forced to hold all our .js, .css, .png. mp3, etc. files in the database and serve them from there. The application is quite large and there are well over 10,000 files. The Python code serving up the files does just one DB fetch and has about 9 lines of code so there is no way it can be magically restructured to make theTimeout go away. However, putting all the files on the app engine as real files would avoid the DB access and make the problem go away. Could Google work towards removing that file limit? -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group athttp://groups.google.com/group/google-appengine?hl=en. -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Keeping original datastore after re-deploying
Hey Guys, I am working on an app that has just had a major overhaul. I want to re-deploy this app but the datastore backend contains information that very important. Is there a way that I can re-deploy the app and hook it up to the original datastore. Also is it possible to extend one of the tables with an extra field without changing the data already contained. Cheers, Jason -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Keeping original datastore after re-deploying
Deploying won't affect your datastore except index. 2010/2/10 jsnschneck jsnschn...@gmail.com: Hey Guys, I am working on an app that has just had a major overhaul. I want to re-deploy this app but the datastore backend contains information that very important. Is there a way that I can re-deploy the app and hook it up to the original datastore. Also is it possible to extend one of the tables with an extra field without changing the data already contained. Cheers, Jason -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en. -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Re: memcache set succeeds but immediate get fails. Pls help
memcache.set() does not set if id already present. Huh? I don't see that in the documentation. Why do you think that it is true? memcache.set is described as Sets a key's value, regardless of previous contents in cache. memcache.add is described as Sets a key's value, if and only if the item is not already in memcache. http://code.google.com/appengine/docs/python/memcache/functions.html On Feb 7, 1:32 pm, observer247 prem...@gmail.com wrote: Thanks Eli ! The cache time was the issue. memcache.set() does not set if id already present. So I am using delete and add. I cannot be sure id is present, memcache could be deleted because of memory pressure from app engine, right ? On Feb 7, 10:18 am, Eli Jones eli.jo...@gmail.com wrote: One minor thing I noticed.. why not use memcache.set() instead of memcache.delete(), memcache.add()? On Sun, Feb 7, 2010 at 6:22 AM, observer247 prem...@gmail.com wrote: This is my code: ret = memcache.add(key=mykey, value=qList, time= 60*60*24*30) logging.critical(Created cache batch %s Passed %s % (mykey, str(ret))) qList = memcache.get(mykey) For some reason, qList is None ! I have logged all values and qList is a non empty list. Check code below where I print a lot of info in the logs. Detailed code here: def MY_QC_MAX(): return 3 def MY_QC_SIZE(): return 200 def createBatchMyModels(): import random for n in range(MY_QC_MAX()): bnum = n + 1 mykey = qkey_batch_+str(bnum) qQ = MyModel.all(keys_only=True).filter('approved', True) if bnum 1: qQ = qQ.filter('__key__ ', last_key) rows = qQ.fetch(MY_QC_SIZE()) tot = len(rows) if tot MY_QC_SIZE(): logging.critical(Not enough MyModels for batch %u, got %u % (bnum, tot)) if tot == 0: return last_key = rows[tot - 1] # create the qList qList = list() logging.critical(Added %u rows into key %s % (tot, mykey)) tmpc = 0 for r in rows: if tmpc == 0: logging.critical(elem %u into key %s % (r.id(), mykey)) tmpc = tmpc + 1 qList.append(r.id()) for elem in qList: logging.info(key %s elem is %u % (mykey, elem)) memcache.delete(mykey) ret = memcache.add(key=mykey, value=qList, time= 60*60*24*30) logging.critical(Created cache batch %s Passed %s % (mykey, str(ret))) qList = memcache.get(mykey) if qList is None: logging.critical(.. getNextMyModel: Did not find key %s % mykey) else: logging.critical(.. LEN : %u % len(qList)) Sample log: . 02-07 03:15AM 05.240 key qkey_batch_1 elem is 13108 C 02-07 03:15AM 05.250 Created cache batch qkey_batch_1 Passed True C 02-07 03:15AM 05.253 .. getNextQuestion: Did not find key qkey_batch_1 C 02-07 03:15AM 05.339 Added 200 rows into key qkey_batch_2 ... Can anyone pls help ! -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib e...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.- Hide quoted text - - Show quoted text - -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] GAE/J recommended best practices.
Thanks Ikai, I found out I had forgot to turn on memory caching for some thigns in my app and the sluggishness went away. I still get the loading request every once in a while, but once it goes fully live (out of beta) that probably wont' be an issue as we're expecting fairly regular traffic. -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] 1.3.1 SDK Prerelease - help us verify
Hello, Not sure whether it was present in 1.3.0 but there is an unpleasant bug in 1.3.1 where blobstore request mangling breaks data encoding [1]. [1] - http://code.google.com/p/googleappengine/issues/detail?id=2749 -- Best Regards Piotr Jaroszyński -- You received this message because you are subscribed to the Google Groups Google App Engine group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.