[appengine-java] Re: Problem with exception on server startup when GAE sdk is in svn
It's a bug triggered by the fact that the .svn directories are read-only. If you make those directories writable the problem *should* go away. Please try that out and let me know. Thanks, Max -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/KFK8hW26r28J. 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.
[appengine-java] Re: Deploying two apps to one datastore memcache
How about deploy as two versions? So that different versions of instance are loaded independently. With regards to admin console, you might be interested at Yaachttp://code.google.com/p/yaac/. So that you don't have to develop some general admin functions in your version again. -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/ztBzTReQSzEJ. 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.
[appengine-java] Yaac 0.4 is out! Insert statement is now supported
Hi, Yaac http://code.google.com/p/yaac/0.4 is just released. This is the first time I post release note there. So for some of you don't know what is *Yaac*, it's a java maven project designed to perform ad hoc admin tasks. You can simply download and deploy Yaac to your own domain as a separated version. Checkout this pagehttp://code.google.com/p/yaac/wiki/DeployGuidelinefor the deployment guideline. ===New functions for v0.4=== EGQL (extended GQL) now supports *insert* statement! - You can create an arbitrary entity kind / property name by executing insert statement: * insert into any_kind values (prop_1 = 'a', prop_2=now(), prop_3=10)* Verify immediately by * select * from any_kind* In this case, Yaac will assign a numeric key to the new entity (generated by appengine) - You can also create entity with a predefined key *insert into any_kind values (__key__=key('any_kind', 'key_1'), prop_1 = 'a', prop_2=now(), prop_3=10)* make sure key('kind_a', 'key_1') doesn't exist in datastore before - Once you have already specified a key to insert, you don't even need into any_kind in above statement, as entity kind already determined by key. *insert values (__key__=key('any_kind', 'key_1'), prop_1 = 'a', prop_2=now(), prop_3=10)* - You can also decide whether to index a specific property by the optional field indexed=true/false, by default all indexable property will be indexed *insert into any_kind values (prop_1 = 'a', prop_2=now(), prop_3=10 (indexed=false))* Note that key will be indexed anyway, and blob / text will never be indexed - You can even insert records based on the result of select query, for instance: *insert into job_archive values (orig_key = __key__, timestamp = now() (indexed=false)) from (select * from job)* Verify your result by: *select count(*) from job_archive* =some features implemented in earlier releases== Extended GQL (EGQL) Aggregation functions, used together with group by clause and having clause (optional): MAX, MIN, SUM, COUNT, AVG Scalar functions: UCASE / LCASE / MID / LEN / ROUND / FORMAT / NOW / TYPE / DATETIME / KEY / USER/ GEOPT, etc. Inter properties comparison in where clause: eg, *where property1 = property2* Powerful Arithmetic Expressions: eg, *where property1 + 5 property2 * (2 + property3)* Powerful boolean expressions: eg, *where condition1 and (condition2 or condition3) and not condition4* Like query: eg, *where ucase(property1) like %abc% (new)* More details about EGQL syntax please refer to this page: http://code.google.com/p/yaac/wiki/EGQLReference Datastore Browser: Download datastore blob / text and blobstore blob directly Better display keys in list property Datastore Editor: Edit any datastore types including blob / text / imhandle / category / email / user / key / blobkey / list, etc Manage entity group hierachy in a more convenient way Create new entity / new property. Datastore Statistics: More detailed breakdown on root / non root statistics Sandbox (http://sandbox.yetanotheradminconsole.appspot.com/) is updated with the latest version. 86K soccer matches are uploaded. Login with your google account and play with it! For example, for all *Arsenal*'s away draw matches against those end with * united *having average full time goals are more than 1, we can use following EGQL to query: * select HOME_TEAM, AWAY_TEAM, count(1), sum(FTHG + FTAG) from MATCH where FTHG = FTAG and AWAY_TEAM = Arsenal and lcase(HOME_TEAM) like %united group by HOME_TEAM, AWAY_TEAM having sum(FTHG + FTAG) / count(1) 1 * Also try this link to try new look of entity viewer (entity with grandparent with almost all datatypes) http://sandbox.yetanotheradminconsole.appspot.com/#editor:ahhzfnlldGFub3RoZXJhZG1pbmNvbnNvbGVydwsSFktJTkRfV0lUSF9BTExfUFJPUEVSVFkYZAwLEhZLSU5EX1dJVEhfQUxMX1BST1BFUlRZIhlzdHJpbmdfa2V5X3dpdGhvdXRfZW50aXR5DAsSFktJTkRfV0lUSF9BTExfUFJPUEVSVFkiCnN0cmluZ19rZXkM Best regards, Max -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/Nv6fvftz6pIJ. 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.
[appengine-java] Re: Creating a new entity kind using the Datastore Viewer
Hi Marcel, You probably will be inserested at this project ( http://code.google.com/p/yaac/). You can upload blobs to blobstore directly or create a new entity / property which don't exist before. It's an complete application (rather than a standalone library) to be deployed as a separated version. Cheers, Max -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/K5OlqadScswJ. 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.
[appengine-java] Re: How to efficiently implement Quotas
We use memcache + datastore counter and it works quite well. Let's say datastore counter will be updated every time count % 1000 == 0. then even the memcache crashed then you lose 1000 uncharged API call at most. -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/czgaitacwn0J. 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.
[appengine-java] Re: Is BlobInfoFactory thread safe?
Hi Marcel, What is your use case? Why do you want to know if it's thread safe? You can't create new thread inside appengine sandbox. Regards, Max -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/Xlmng_eH1ksJ. 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.
[appengine-java] Re: prefetchSize vs chunkSize
+1 I am also curious on the answer. I found following code snippet in class QueryTranslator, it looks to some degree these two are the same and prefetchSize overrides chunkSize? DatastorePb.Query proto = new DatastorePb.Query(); if (fetchOptions.getPrefetchSize() != null) { proto.setCount(fetchOptions.getPrefetchSize()); } else if (fetchOptions.getChunkSize() != null) { proto.setCount(fetchOptions.getChunkSize()); } -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/hDwd9Ig4lXsJ. 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.
[appengine-java] Re: Creating a new entity kind using the Datastore Viewer
no, at the moment you can't and you can't add new property to existing entity -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/w8cNmjLCWZ8J. 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.
[appengine-java] Re: Can I upload an image to Blobstore using the admin console?
no, at the moment you can't -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/s_9aLOndvM4J. 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.
[appengine-java] Re: Creating a new entity kind using the Datastore Viewer
Did you search similar tickets before create one? I believe this has been requested for many times. You link doesn't work :) -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/ODtGwt6q9VgJ. 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.
[appengine-java] Gql4J, gql for appengine java sdk
Hi all, I am actually a bit surprised after realized that no query language is supported on datastore low level API directly. So I spend some time to migrate GQL to Java SDK and just deployed one version to http://code.google.com/p/gql4j/ Here is the usage DatastoreService? http://code.google.com/p/gql4j/w/edit/DatastoreService datastore = DatastoreServiceFactory? http://code.google.com/p/gql4j/w/edit/DatastoreServiceFactory.getDatastoreService(); GqlQuery? http://code.google.com/p/gql4j/w/edit/GqlQuery gql = new GqlQuery? http://code.google.com/p/gql4j/w/edit/GqlQuery(SELECT * WHERE ANCESTOR IS KEY(:1, :2) LIMIT 100 OFFSET 1000, Person, Amy); IterableEntity result = datastore.prepare(gql.query()).asIterable(gql.fetchOptions()); Simply download jar to your project and try it! No maven repo is setup for this one but there is a workaround documented on project homepage. Any feedback is welcome! Cheers, Max -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/h16ZUObl3X0J. 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.
[appengine-java] Re: Gql4J, gql for appengine java sdk
Re-paste usage again, don't know why there are some strange style on first one DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); GqlQuery gql = new GqlQuery(SELECT * WHERE ANCESTOR IS KEY(:1, :2) LIMIT 100 OFFSET 1000, Person, Amy); IterableEntity result = datastore.prepare(gql.query()).asIterable(gql.fetchOptions()); -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/ipqs1kZhykYJ. 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.
[appengine-java] Re: Joins Concept in GQL Using Java
you can't perform join query with GQL -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/RBoQDGQAq8EJ. 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.
[appengine-java] Re: Select query using LIKE
Hi Ravi, If you just want to execute like query for reporting purpose, you may want to look at Yaac project : http://code.google.com/p/yaac/ Sandbox is available for anyone to play with: http://sandbox.yetanotheradminconsole.appspot.com/#query: You can then execute some query like : *select count(*) from job where state like '%READY%'* * * Again, this project is only designed for admins to perform some ad hoc query for reporting purpose. Query executed are not scalable -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/h5oiJxG6WZ0J. 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.
[appengine-java] Re: Templating Frameworks
checkout play framework GAE module it's using Groovy template, which is quite nice and clean -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/2PJ47jQ3gckJ. 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.
Re: [appengine-java] Re: Number of writes per second limitation
5 put() RPCs plus one more for the commit, although you could use a batch put to turn this into 1 put() RPC plus one more for the commit. These are implementation details though. We may at some point just hold on to the entire mutation until commit time (easy if you're not asking us to generate ids for any of your entities, harder if you are since we would then need to maintain a client-side cache of ids to avoid RPCs just for id-generation). -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/qSsxcAlgC9QJ. 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.
[appengine-java] DataNucleus App Engine Plugin v2.0.0-RC1 available for testing
JPA 2, JDO 3, unowned relationships, and tons of bug fixes. https://plus.google.com/102837845875216819095/posts/9U9VFWqhPx7 -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/zwhh5eEfXx8J. 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.
Re: [appengine-java] Re: JDO and XG transactions - Performance
We debated this quite a bit internally. To paraphrase the argument that carried the day: XG transactions are awesome but they are not true global transactions. You're limited to 5 entity groups, you're more likely to see partially applied transactions in global query results, you can get a concurrency exception from a *read*, and there is a performance impact (when you've got more than 1 entity group enlisted). In short, there's some surprising/subtle stuff that we really want developers to understand before they start using this feature. If we didn't require opt-in it would be too easy for our new developers (particularly those coming from the RDBMS world where global transactions are the norm) to miss these important considerations. We want it to be super easy to use the Datastore, but creating a false sense of simplicity can do more harm than good in the long run. Max -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/mq8YLNx0kaoJ. 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.
[appengine-java] Re: XG Transactions with JDO/JPA
Enabling HR locally is described here: http://code.google.com/appengine/docs/java/tools/devserver.html#Using_the_Datastore -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/8YL--iXPbIkJ. 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.
[appengine-java] XG Transactions with JDO/JPA
Hi everyone, Due to a mix-up, the JDO/JPA jars that are included in the 1.5.5 SDK do *not *support XG Transactions. If you want to use XG Transactions with JDO or JPA in 1.5.5 you can download an updated jar from http://code.google.com/p/datanucleus-appengine/downloads/detail?name=datanucleus-appengine-1.0.10.final.jar and follow the installation instructions on that page. Please let me know if you have any problems with it. Sorry for the trouble, Max -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/WXNFlj2PlvwJ. 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.
[appengine-java] Deployment failing consistently!
Been experiencing this for the past 8 hours. The deployment has been consistently failing with the final error: Cloning 1317 application files. on backend null. java.io.IOException: Error posting to URL: https://appengine.google.com/api/appversion/clonefiles?app_id=xxx-max222version=3; 500 Internal Server Error Anyone else seen this? -Max -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/8nxq5PO4m4oJ. 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.
[appengine-java] Re: Self join and group by
you can merge join entities to itself without ordering for group by, you will need to pre-index (partition) your data when writing to datastore, or you can do this in memory -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/hGQPLES0dR4J. 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.
[appengine-java] Make use of appengine versions? Looking for your sugestion
Hi, From my understanding, an application with different enabled versions is exactly the same as multiple applications sharing same billing quota and same datastore. If that's the case, then is it suggested to use it like: 1) deploy python, java or go into different versions so that different SDKs can be used to serve different purpose on same set of data, or 2) split large application into small modules, say crons / crud admins, etc, each part are relatively small so that to have a better cold start performance and less memory usage Some questions: 1) Is there any performance bottleneck for those non-default versions? eg, max instance can't exceed certain no? 2) How transactions are managed across different versions? eg, can I assume version 1 can't commit changes to certain entity group if version 2 has already started one on that entity group? What's your opinion? any drawbacks of doing so? or am I wrong with how app engine manages versions? -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/43HeLnox25YJ. 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.
[appengine-java] Persistence issue
hello, I'm facing a problem about the persistence of some of my objects. i have a class which is persistent capable and i don't think there is any error in it *CODE* import java.util.ArrayList; import java.util.List; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; import com.google.appengine.api.datastore.Key; @PersistenceCapable public class GiniChat { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Key key; @Persistent private String ChatName; @Persistent private ListString users; public GiniChat (String CN) { ChatName = CN; users = new ArrayListString(); } */CODE* * * I am creating new persistent objects using this code: *CODE* * * c_chatName = req.getParameter(chatname); GiniChat GC = new GiniChat(c_chatName); PersistenceManager pm = PMF.get().getPersistenceManager(); try { pm.makePersistent(GC); System.out.println(Success); } finally { pm.close(); } chats.put(c_chatName, GC); */CODE* And I get these objects back in the client side using this code: *CODE* PersistenceManager pm = PMF.get().getPersistenceManager(); String query = select from + GiniChat.class.getName(); ListGiniChat tmpchats = (ListGiniChat) pm.newQuery(query).execute(); */CODE* When i try to add a GiniChat object, it looks like it works but when i reload the client (which is supposed to get these objects back), i don't get anything back from the datastore, except objects that i previously created, using the same class but with different attributes (actually i just added the users' list). All newly created objects seem not to be persistent, or a least not in this class. Is it possible that because i changed the structure of my class, it is now stored somewhere else ? summary: -when i try to add an object, it seems to work -but when i try to get it back from the datastore, it fails -it was ok before -not anymore since i changed the structure of my class Thank you for your help Max PS: sorry for my english -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/Tl0P5tYxk8wJ. 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.
[appengine-java] Re: HashMap within an Embedded Class
This is a known bug and seems still not fixed yet. You will need to manually serialize in you code Also, if you just started coding on GAE, check out Objectify / Twig / Siena etc. These are all very good frameworks. -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/B51GO7gHVksJ. 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.
Re: [appengine-java] How to run quatz(kind) of scheduler service on appengine?
You can have deploy your quatrz scheduler in EC2 and the only job is pinging your corresponding appengine URL according to the schedule. -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/HzvkfqOeTWgJ. 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.
[appengine-java] Re: 1.5.2 SDK Prerelease
Great job! May I know more about *t**he datastore now never requires an exploding index *? Does that mean we don't need to build exploding index or simply can't build exploding index? -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/KyL9f70-VtkJ. 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.
Re: [appengine-java] Re: Fast MVC Framework for GAE?
I use Play framework with GAE module, it works quite nice and performance is ok. Personally I don't have good experience with Spring roo -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/w4EkFRxaWuIJ. 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.
[appengine-java] Re: Fast MVC Framework for GAE?
for warm up issue, there are several options, including always on instance, cron job, etc you may want to take a look at this page http://www.keepyourappwarm.com/ -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/T4CeIrQhruEJ. 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.
[appengine-java] Scalability of inequality filters for multiple fields via Hilbert curve
Hi all, Would like to know if there are any of you guys ever tried to use space filling curve like Hilbert curve to build index for multiple inequality filters. Seems like for any continuous field like long or date, the number of ranges (to be merged) to perform a accurate query is increasing rapidly, which makes this approach not scale. Any thought? or shall I build / model like this samplehttp://code.google.com/appengine/articles/geosearch.html app? Query by partitions of all data and do an in-memory merge? -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/ZPVVLosjKicJ. 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.
[appengine-java] JDO M-N Attributed Relation
Hello everybody, I am doing that JDO tutorial ( http://code.google.com/intl/de-DE/appengine/docs/java/datastore/jdo/relationships.html#Unowned_Relationships) and playing around with the unowned relationships. Dose the M-N Attributed Relations work with GWT such as in the JDO Guides http://www.datanucleus.org/products/accessplatform/guides/jdo/many_many_attributed/index.html? If it work, pleas give me a small example how to implement. Thanks for your help, Max -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/YCuZ14qkjjkJ. 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.
[appengine-java] M-N Attributed Relation
Hallo again, i am doing a the App Engine JDO tutorial and plaining with relations. Is it possible to do m-n attributed relation such as explain in the JDO Guides? If it is possible please give a small example how to use it. Thank you for your Help. Regards, Max App Engine JDO tutorial: http://code.google.com/intl/de-DE/appengine/docs/java/datastore/jdo/ JDO Guides: http://www.datanucleus.org/products/accessplatform/guides/jdo/many_many_attributed/index.html http://www.datanucleus.org/products/accessplatform/guides/jdo/many_many_attributed/index.html%20 -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine-java/-/AqlBK3VTx3UJ. 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.
[appengine-java] Re: Using Serializable object in session
this is more a java question than GAE question check out this http://java.sun.com/developer/technicalArticles/Programming/serialization/ -- 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.
Re: [appengine-java] Re: why the development of java tools fall far behind that of python's?
I would also point out that it is possible for Java apps to migrate from Master/Slave to High Replication: http://code.google.com/appengine/docs/adminconsole/datastoreadmin.html#Copying_Entities_to_Another_Application Having to create an empty Python version of your app is no doubt clunky and not something we're happy about having to recommend, but it doesn't take much effort and it does work. Max On Thu, May 26, 2011 at 9:37 AM, Mitch Rudominer rudomi...@google.comwrote: Tapir, thanks for your feedback. I agree that there have been several cases where features have come out in Python long before Java. (There have been a few in the other direction too, but not as many.) This is something we are trying to improve upon in the future. I'm happy to tell you that one of the items in your list, 1. remove obsolete indexes, is supported in Java and has been since release 1.4.2 earlier this year. This feature is called vacuum indexes. - Mitch On May 25, 9:00 am, Tapir tapir@gmail.com wrote: such as: 1. remove obsolete indexes 2. copy Mater-Slave data to High Replication I think if these tools are already done in python, it would be easy to port them in java within one week, especially for your googlers. But why have you done these yet? You know, these tools are so essential. Many java developers feel hopeless now. -- 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.
[appengine-java] Re: Is possible to create a datastore index programmatically
+1 This will be a quite useful feature to develop a powerful framework -- 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.
Re: [appengine-java] Re: After upgrade to GAE SDK 1.5.0 - Cache is not working
Still waiting for the new jar to appear here http://repo1.maven.org/maven2/com/google/appengine/appengine-jsr107cache/ -- 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.
[appengine-java] Re: Can remote api be used inside a GAE java app.
This is on our radar but it's not yet supported. 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.
[appengine-java] Re: Will movement out of preview status give free access to SQL
We don't have anything to announce related to SQL pricing and quotas, but the access for Java apps will be through JDBC. 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.
[appengine-java] Re: Backends Javadoc Reference not uploaded
I see it here in com.google.appengine.api.backends: http://code.google.com/appengine/docs/java/javadoc/ Where are you looking? 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.
[appengine-java] Re: How can I make the session to be held open as long as the user got its browser opened?
have you tried to use memcache or simply store session into datastore? -- 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.
[appengine-java] Re: cost effective way to store PDF and word docs in datastore / blobstore service
You can just enable billing with a very low daily limit No harm, right? On Dec 25 2010, 4:29 pm, Khor Yong Hao fyh...@gmail.com wrote: It is possible to store one page / two page PDF (smaller than 1 mb) inside normal datastore. By using byte[] in entity datatype. On Sat, Dec 25, 2010 at 12:31 PM, Patrick Twohig patr...@namazustudios.comwrote: Just because billing is enabled that doesn't mean that you are billed for using it. It just uncaps your quotas beyond the free amount. Merry Chrismas! Sent from my G1 phone. On Dec 24, 2010 8:21 AM, dreamer venugopal.vasire...@gmail.com wrote: This is what I found in documentation Note: The Blobstore API is only available for apps with billing enabled. You still get an amount of quota for free, but billing must be enabled to use it. In development phase I don't want to be worried about billing. we can live with 1GB restriction while in development across for storage requirements. Any body from Google help to relax this restriction ? On Dec 24, 7:53 am, dreamer venugopal.vasire...@gmail.com wrote: Hi, I need to store pdf ... -- 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. -- 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: Datastore Backup and Restore (for Java)
You can also dump your datastore to other application as well On Jan 5, 1:37 pm, Didier Durand durand.did...@gmail.com wrote: Hi, There a bulk import / export feature on the roadmap: it will be usable for backups. Seehttp://code.google.com/appengine/docs/roadmap.html If I needed it, I would personally probably develop a backup function moving my data to an infrastructure totally distinct from Google to avoid all possible issues: I would use S3 from Amazon to backup (via async taks) my data on the fly in real time when as store it in GAE. It's a bit of dev but probably the most secure cloud-based backup solution that I can see for now. regards didier On Jan 3, 10:44 pm, Eurig Jones eurigjo...@gmail.com wrote: Hi, What are the options people are using currently for backup / restoration of their app datastores? There seems to be a few issues raised about it, but no concrete alternatives for it (for Java) as far as I can see. Regards, Eurig Joneshttp://www.chesspresso.net -- 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: new bee need suggestion on persistance
I would suggest to play with low level API before you make decision between JDO/JPA/Objectify/twig That will help you better understand bigtable. On Jan 5, 1:29 pm, Didier Durand durand.did...@gmail.com wrote: Hi, I am also a big fan of Objectify: simple to understand, efficient, light-weight, open source. (+ very well documented!). I abandonned JDO / JPA for it. Before starting with jdo / jpa, you should read this thread (posts by Ikai Lan from Google especially): future of JDO / JPA on GAE doesn't look so bright. Readhttp://groups.google.com/group/google-appengine-java/browse_thread/th... good luck regards didier On Jan 4, 8:16 pm, John jwb...@gmail.com wrote: If your app is only for GAE (it will not need to run in a 'standard' Java Web App container) Objectify http://code.google.com/p/objectify-appengine/provides annotation-based persistence with a very thin layer over the GAE datastore. There are certainly limitations with JPA/JDO. My preference is JDO for portable code, as it is more consistent with a non-SQL database. Among the more annoying limitations in JDO is the prohibition of superclass-table inheritance. -- 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: how to upload local_db.bin database file to appengine app
You can take a look at Python bulkuploader On Jan 5, 1:44 pm, Didier Durand durand.did...@gmail.com wrote: Hi, Not knowing all details of you app, the most generic way is to write some code and run and the dev server. Basically: it has to read all your entities from local ds ans post them to a url on your live app via an HTTP post to a servlet that you need to develop and run on your gae instance. Your entities from local ds will be the payload of this http post. I would recommend using the low-level API of DS on both side in order to be able to write as little code as possible: this way you don't need to go back to your application pojos and you can use same code for all entities whatever their structure. Java serialization functions will help to put those entities on the wire in the proper way. Hope it helps [Maybe, if you local ds is small, just retyping everything is simpler..] regards didier On Jan 3, 9:32 pm, Yuber Núñez yrnu...@gmail.com wrote: Hello, I want to upload local_db.bin file stored at /war/WEB-INF/appengine- generated to appengine aplication, i would like what is the procedure to do. 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: How to make reference(a.k.a Foriegn keys) in Bigtable datastore using JDO
If the referenced entity is in the same entity group, use object reference directly. Otherwise create a Key object On Jan 3, 8:49 pm, rajeev jha rajeevjha...@gmail.com wrote: Hello friends, How to create foreign keys using JDO in Bigtable Datastore likewise using python we can achieve using reference Property. Please suggest or pointer to any link to achieve it. Thanks in Advance :) Rajeev Jha. -- 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: JDO - Add a child - Error
have you tried to detach after you persist? On Dec 21 2010, 9:36 am, lisandrodc lisandr...@gmail.com wrote: Hi! I have a problem when add a class Equipo(child) one Torneo(parent). The code: Transaction tx = pm.currentTransaction(); try { tx.begin(); unTorneo.agregarEquipo(unEquipo); //pm.makePersistent(unEquipo); Torneo tor = (Torneo) pm.detachCopy(unTorneo); pm.makePersistent(tor); tx.commit(); System.out.println(persistioTorneoConEquipo); } finally { //pm.close(); if (tx.isActive()) { tx.rollback(); } } } The exception: INTERNAL_SERVER_ERROR Caused by: java.lang.NullPointerException at org.datanucleus.store.appengine.DatastorePersistenceHandler.deleteObject(Da tastorePersistenceHandler.java: 581) at org.datanucleus.store.appengine.DatastoreFKListStoreSpecialization.removeAt (DatastoreFKListStoreSpecialization.java: 145) at org.datanucleus.store.mapped.scostore.FKListStore.removeAt(FKListStore.java : 525) at org.datanucleus.store.mapped.scostore.AbstractListStore.remove(AbstractList Store.java: 318) at org.datanucleus.sco.backed.List.remove(List.java:907) at org.datanucleus.sco.SCOListIterator.remove(SCOListIterator.java: 145) at org.datanucleus.sco.SCOUtils.updateListWithListElements(SCOUtils.java: 828) at org.datanucleus.sco.simple.List.attachCopy(List.java:232) at org.datanucleus.store.fieldmanager.AttachFieldManager.storeObjectField(Atta chFieldManager.java: 205) at org.datanucleus.state.AbstractStateManager.providedObjectField(AbstractStat eManager.java: 1037) at model.Torneo.jdoProvideField(Torneo.java) at model.Torneo.jdoProvideFields(Torneo.java) at org.datanucleus.state.JDOStateManagerImpl.provideFields(JDOStateManagerImpl .java: 2715) at org.datanucleus.state.JDOStateManagerImpl.internalAttachCopy(JDOStateManage rImpl.java: 4055) at org.datanucleus.state.JDOStateManagerImpl.attachCopy(JDOStateManagerImpl.ja va: 3987) at org.datanucleus.ObjectManagerImpl.attachObjectCopy(ObjectManagerImpl.java: 1778) at org.datanucleus.ObjectManagerImpl.persistObjectInternal(ObjectManagerImpl.j ava: 1260) at org.datanucleus.ObjectManagerImpl.persistObject(ObjectManagerImpl.java: 1175) at org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceM anager.java: 669) at org.datanucleus.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceMana ger.java: 694) at controllers.ControladorTorneo.agregarEquipoConTorneo(ControladorTorneo.java : 135) at struts.action.NuevoEquipo.execute(NuevoEquipo.java:38) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) -- 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: Unable to navigate my app in production server, while in development server works fine
Would you mind to post your index.jsp as well? I suspect it's because GAE server is case sensitive, and the thrown exception is not serializable On Jan 4, 10:05 pm, Markel Arizaga markel.ariz...@gmail.com wrote: Hi, I got stuck. I Googled and have been searching in the forums during the last days but I don't find an answer that fixes my problem, so I'm sorry if this has been already commented. I'm developing an app using Java version of GAE and it works fine in local server. I used eclipse plugin and also NetBeans IDE and worked with both but the problem begins when I try to upload the app to GAE. Once uploaded I can only access the welcome file (index.jsp) but any other page is not loaded. The browser gives messages like Error: Forbidden and Error: Not Found. I think something in my web.xml is wrong but I'm not able to figure out what it is. In my web.xml I declare my servlet classes as well the jsp files and I think I'm doing it correctly: servlet servlet-nameNAME/servlet-name servlet-classPACKAGE.CLASS/servlet-class /servlet servlet-mapping servlet-nameNAME/servlet-name url-pattern/PATH/url-pattern /servlet-mapping servlet servlet-nameNAME2/servlet-name jsp-fileFOLDER/NAME2.jsp/jsp-file /servlet servlet-mapping servlet-nameNAME2/servlet-name url-pattern/PATH2/url-pattern /servlet-mapping I have also a welcome file declared exactly like the documentation says and a security constraint as follows: security-constraint web-resource-collection url-pattern/adminZone/*/url-pattern /web-resource-collection auth-constraint role-nameadmin/role-name /auth-constraint /security-constraint I saw the logs in the dashboard and I realised that NotSerializableExceptions were thrown refering to one of my classes but the problems persists after I made it Serializable. I hope someone will have any idea, 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: Basic Text Search Not Working
this query is a startsWith query, ie, 'queryString%' Are you expecting a '%queryString%' match? On Jan 3, 11:45 pm, Andy Haaf ah...@google.com wrote: I followed the instructions at: http://googlecode.blogspot.com/2010/05/google-app-engine-basic-text-s... but search is only working for exact matches in the column, not partial strings. Here is my code: String querystring = request.getParameter(querystring); querystring = ( querystring != null ? querystring.toLowerCase() : ).trim(); PersistenceManager pm = PMF.get().getPersistenceManager(); Query q = pm.newQuery(Item.class); q.setFilter(shortDesc = :1 shortDesc :2); ListItem items = (ListItem) q.execute(querystring, (querystring + \ufffd)); What am I missing? -- 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: How to completely erase the datastore of an app
CRI, Unfortunately, no, I don't have any advice around index management. Max On Dec 31, 2010, at 9:46 AM, cghersi wrote: Hi Max, I've got a similar servlet too... I was guessing if there was a built-in method in GAE API. I would like also to delete and rebuild my indexes, but I cannot find the way... Do you know any strategy to cope with index management? Thank you Bye CRI On Dec 30, 8:18 pm, Max 6738...@gmail.com wrote: Hi CRI, I ran into this as well, however, the Datastore viewer only allows someone to view a certain number of entries at a time. If you're app has thousands of saved entities, it can be time consuming to delete them all. I created a few simple tasks to do this for me. I make these both POSTs and only invoke them manually from my computer using RESTClient. NOTE: I'm using objectify. The first one loops through each class type and calls a servlet to delete each of that type: Class[] clazzes = {Operator.class, DDMessage.class, Event.class, DailyStatus.class, DocumentGroup.class, Document.class, StatusCapture.class}; for (Class clazz : clazzes) { Queue queue = QueueFactory.getQueue(trashcan); queue.add(withUrl(/deletealloftype) .param(kind, clazz.getName()) .method(POST)); } This servlet deletes each item one after another until it hits the deadline, and then it puts itself back in the task queue. try { DAO dao = new DAO(); Class clazz = Class.forName(request.getParameter(kind)); QueryObject query = dao.ofy().query(clazz); QueryResultIteratorObject iterator = query.iterator(); while (iterator.hasNext()) { Object o = iterator.next(); Objectify ofy = dao.fact().beginTransaction(); ofy.delete(o); ofy.getTxn().commit(); } } catch (DeadlineExceededException dee) { Queue queue = QueueFactory.getQueue(trashcan); queue.add(withUrl(/deletealloftype) .param(kind, request.getParameter(kind)) .method(POST)); } Hope this helps, MG On Dec 29, 2010, at 11:00 AM, Didier Durand wrote: Hi, You can very easily empty your datastore using the Datastore viewer of the admin console: you can select and delete all entities from the viewer screen. regards didier On Dec 29, 4:52 pm, cghersi cristiano.ghe...@gmail.com wrote: Hi, I've got an app on GAE with 4 versions, up to now. Until the 4th version I had an entity with an ancestor, so its keys were of the type (EntityID-AncestorID). In the 5th version I changed my design and now this entity hasn't got ancestor any more. Its keys are now simple long values. On my development server all is OK, given that my local datastore has been correctly updated. But with the online app I'm not able to remove the unused indexes and to create entities with the new long key. How may I completely erase my datastore online in order to rebuild it from scratch? Thank you very much!!! Bye CRI -- 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. -- 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: How to completely erase the datastore of an app
Hi CRI, I ran into this as well, however, the Datastore viewer only allows someone to view a certain number of entries at a time. If you're app has thousands of saved entities, it can be time consuming to delete them all. I created a few simple tasks to do this for me. I make these both POSTs and only invoke them manually from my computer using RESTClient. NOTE: I'm using objectify. The first one loops through each class type and calls a servlet to delete each of that type: Class[] clazzes = {Operator.class, DDMessage.class, Event.class, DailyStatus.class, DocumentGroup.class, Document.class, StatusCapture.class}; for (Class clazz : clazzes) { Queue queue = QueueFactory.getQueue(trashcan); queue.add(withUrl(/deletealloftype) .param(kind, clazz.getName()) .method(POST)); } This servlet deletes each item one after another until it hits the deadline, and then it puts itself back in the task queue. try { DAO dao = new DAO(); Class clazz = Class.forName(request.getParameter(kind)); QueryObject query = dao.ofy().query(clazz); QueryResultIteratorObject iterator = query.iterator(); while (iterator.hasNext()) { Object o = iterator.next(); Objectify ofy = dao.fact().beginTransaction(); ofy.delete(o); ofy.getTxn().commit(); } } catch (DeadlineExceededException dee) { Queue queue = QueueFactory.getQueue(trashcan); queue.add(withUrl(/deletealloftype) .param(kind, request.getParameter(kind)) .method(POST)); } Hope this helps, MG On Dec 29, 2010, at 11:00 AM, Didier Durand wrote: Hi, You can very easily empty your datastore using the Datastore viewer of the admin console: you can select and delete all entities from the viewer screen. regards didier On Dec 29, 4:52 pm, cghersi cristiano.ghe...@gmail.com wrote: Hi, I've got an app on GAE with 4 versions, up to now. Until the 4th version I had an entity with an ancestor, so its keys were of the type (EntityID-AncestorID). In the 5th version I changed my design and now this entity hasn't got ancestor any more. Its keys are now simple long values. On my development server all is OK, given that my local datastore has been correctly updated. But with the online app I'm not able to remove the unused indexes and to create entities with the new long key. How may I completely erase my datastore online in order to rebuild it from scratch? Thank you very much!!! Bye CRI -- 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] Re: DataStore embeds equals signs (=) into saved file
Hi, I explored the below thread, but I'm still not sure how to fix the problem. Is it that the file is encoded as one format originally and then GAE tries to encode it differently? thanks MG On Dec 5, 2010, at 1:56 AM, Didier Durand wrote: Hi, somebody already had a problem similar to yours and found the issue and its solution: http://groups.google.com/group/google-appengine-python/browse_thread/thread/0ac4ab5266fb3781 Hope it helps didier On Dec 4, 9:04 pm, Max 6738...@gmail.com wrote: Hi, My GAE application strips attachments from inbound emails and saves them as byte[]. Objectify translates the byte[] to a com.google.appengine.api.datastore.Blob (does not utilize BlobStore). For some files, it embeds equal signs in places where the original document doesn't have any equal signs. I've found that MS documents and HTML are rather tolerant of this behavior, but PDFs tend to get corrupt when this happens. Does anyone know why these equal signs are added in seemingly random places? Any other advice to get around this? Below is an example of the contents of a PDF from the more command. You can see the equal signs from the second representation of the file. Original file (Good): 1 0 obj /CreationDate (D:20101203120005) /Producer (SCS2PDF v1.0 (\251 BeppeCosta, 2005)) /Title (PRINT1) endobj 2 0 obj /Type /Catalog /Pages 3 0 R endobj File Snippet After Saving to DataStore (Bad): 1 0 obj /CreationDate = (D:20101203120005) /Producer (SCS2PDF v1.0 (\251 BeppeCosta, = 2005)) /Title (PRINT1) endobj 2 0 obj /Type = /Catalog /Pages 3 0 R endobj Any thoughts? thanks! MG -- 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] Multiple Async get vs one Sync batch get?
Interesting results! I've run similar tests with writes (put and delete) and my results indicate that in most situations, multiple async writes will perform better than one batch sync call. I can't think of any reason this wouldn't be the case for reads as well. Are your entities all in different entity groups? Thanks, Max On Fri, Dec 17, 2010 at 4:11 PM, Ikai Lan (Google) ikai.l+gro...@google.comikai.l%2bgro...@google.com wrote: Very cool. Thanks for posting! What kind of processing are you doing after you retrieve the entities? I'm surprised it made a difference. -- Ikai Lan Developer Programs Engineer, Google App Engine Blogger: http://googleappengine.blogspot.com Reddit: http://www.reddit.com/r/appengine Twitter: http://twitter.com/app_engine On Fri, Dec 17, 2010 at 2:48 PM, Gal Dolber gal.dol...@gmail.com wrote: Even better :) [image: Screen shot 2010-12-17 at 7.48.44 PM.png] On Fri, Dec 17, 2010 at 7:31 PM, Gal Dolber gal.dol...@gmail.com wrote: Here are my results if anyone interested. The idea was splitting a batch into multiple async gets so I could start processing each results while the others were being fetched. With the batch get I need to wait until I get all the results to do the next operations. At the end (on my situation) batching won. * * *Multiple async gets* [image: MultipleAsyncs.png] *Batching* [image: Batch.png] On Thu, Dec 16, 2010 at 4:48 PM, Gal Dolber gal.dol...@gmail.comwrote: Yes, I am talking about datastore api. I made some isolated tests and the batch always wins (no by so much). But in my app, when I break the batch into multiple async gets, I can start processing each async get result (and doing another api calls) before... and it seems to be perform better. I'll keep doing tests and post if find anything interesting. Thanks! On Thu, Dec 16, 2010 at 2:42 PM, Ikai Lan (Google) ikai.l+gro...@google.com ikai.l%2bgro...@google.com wrote: You're talking about the datastore API? Underneath the hood, synchronous gets just make asynchronous calls and block on Future.get() anyway. Making a single synchronous batch get would translate to a single asynchronous RPC with multiple keys vs. multiple asynchronous get RPCs. I suspect the single batch call will perform better from a CPU cost/quota perspective, but I'd defer to AppStats benchmarks as the authoritative answer. -- Ikai Lan Developer Programs Engineer, Google App Engine Blogger: http://googleappengine.blogspot.com Reddit: http://www.reddit.com/r/appengine Twitter: http://twitter.com/app_engine On Wed, Dec 15, 2010 at 3:38 AM, Gal Dolber gal.dol...@gmail.comwrote: Should I expect the similar performance? or the batch will always be better? -- 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. -- Guit: Elegant, beautiful, modular and *production ready* gwt applications. http://code.google.com/p/guit/ -- Guit: Elegant, beautiful, modular and *production ready* gwt applications. http://code.google.com/p/guit/ -- Guit: Elegant, beautiful, modular and *production ready* gwt applications. http://code.google.com/p/guit/ -- 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
Re: [appengine-java] Re: Issue processing the Receive Mail Handle multiple times
Hi, OK, that makes sense. How could I make a GAE mail handler idempotent? Is there any unique identifier associated with an inbound email that I can reference, or will I truly need to build the .equals logic to analyze the email elements (including attachments) to know if it is a duplicate? thanks MG On Dec 12, 2010, at 11:34 PM, Didier Durand wrote: Hi, Yes, your code gets (probably) executed more than once because it is scheduled as a task in a task queue defined in the architecture of GAE. As such your code as to be idempotent (the word you were looking for) because it can be executed multiple times: Google highly recommend to guarantee to work on a true idempotence of the code in such cases. regards didier On Dec 12, 10:22 pm, Max 6738...@gmail.com wrote: Hi, My application receives emails and performs duties based on the content of the email. I'm sometimes having an issue ( 5%) where a single email that goes in to the application causes the handler to execute twice. Is this an issue with GAE that would be intended to be fixed? Or is the nature of the environment one that requires writing code that can be executed multiple times without negative consequences (can't remember the word for this)? If I need to write code to support running multiple times over the same inbound email, are there any suggestions on how to manage this? I'm assuming I'd need to come up with an .equals method that makes sure it isn't a repeat of a prior message. Any advice? thanks! MG -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en. -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.
[appengine-java] DataStore embeds equals signs (=) into saved file
Hi, My GAE application strips attachments from inbound emails and saves them as byte[]. Objectify translates the byte[] to a com.google.appengine.api.datastore.Blob (does not utilize BlobStore). For some files, it embeds equal signs in places where the original document doesn't have any equal signs. I've found that MS documents and HTML are rather tolerant of this behavior, but PDFs tend to get corrupt when this happens. Does anyone know why these equal signs are added in seemingly random places? Any other advice to get around this? Below is an example of the contents of a PDF from the more command. You can see the equal signs from the second representation of the file. Original file (Good): 1 0 obj /CreationDate (D:20101203120005) /Producer (SCS2PDF v1.0 (\251 BeppeCosta, 2005)) /Title (PRINT1) endobj 2 0 obj /Type /Catalog /Pages 3 0 R endobj File Snippet After Saving to DataStore (Bad): 1 0 obj /CreationDate = (D:20101203120005) /Producer (SCS2PDF v1.0 (\251 BeppeCosta, = 2005)) /Title (PRINT1) endobj 2 0 obj /Type = /Catalog /Pages 3 0 R endobj Any thoughts? thanks! MG -- 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: datanucleus-appengine
There's a big difference between something that is deprecated and something that isn't getting any new features. JDO/JPA is most certainly not deprecated. We are making sure it is keeping pace with our new SDK releases, and we hope to be able to start enhancing it as soon as we can. There is still a lot of good and important work to be done on this library, but the App Engine team always prioritizes the reliability and availability of our product over feature-related work, and as of late, those of us working on the Datastore have been almost entirely focused on the former (did you see the mention of the High Replication Datastore in our latest blog posthttp://googleappengine.blogspot.com/2010/12/happy-holidays-from-app-engine-team-140.html ?) Finally, I'll point out that our DataNucleus plugin is completely open source. If you or anyone else in the community would like to submit a patch with thorough test cases we will be happy to work with you to get it submitted. Thanks, Max On Fri, Dec 3, 2010 at 1:32 PM, George Moschovitis george.moschovi...@gmail.com wrote: You're eager optimizing your support problem, when really the problem you should be solving is what do I need to build? How do I get there? I know what I want to build. My problem is that I (obviously) need a Datastore API. In the Google App Engine documentation the endorsed API was (until now) JDO (and maybe JPA). From your earlier post I learned that JDO/JPA support is ..kind of deprecated. I don't plan to create a new API myself. I would prefer to use a Google-endorsed API, but today there is no such thing. I find this annoying. I may be wrong, but this is my perspective, we can't all agree on everything. Still, you should keep developer concerns in mind when laying out the road map for future releases. regards, -g. PS: and yes, I 'll probably use Objectify after all... -- 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] no async queries on AsyncDatastoreService for 1.4.0?
Hi Luke, First the awesome news: As of 1.4.0, many queries are implicitly asynchronous. When you call PreparedQuery.asIterable() or PreparedQuery.asIterator(), we initiate the query in the background and then immediately return. This lets you do work while the first batch of results is being fetched. And, when the first batch has been consumed we immediately request the next batch. If you're performing a significant amount of work with each Entity as you iterate you will probably see a latency win as a result of this. Now the less awesome news: We didn't get around to making the List returned by PreparedQuery.asList() work this same magic, but you can expect this in a future release. Some deeper thoughts: The underlying RPCs between your app and the datastore fetch results in batches. We fetch an initial batch of results, and once that batch has been consumed we fetch the next batch. But, there's nothing in the API that maps to these batches - it's either a List containing the entire result set or an Iterable/Iterator that returns Entities one at a time. An API that provides async access to the individual results returned by an Iterable/Iterator (IteratorFutureEntity) doesn't really make sense since you don't know which call to hasNext() is going to require a new batch to be fetched, and without that knowledge, the knowledge of what is going to trigger something expensive, you can't really make appropriate use of an asynchronous API. Going forward, we're definitely interested in exposing these batches directly, and an explicitly async API for these batches makes a lot of sense since fetching these batches would map directly to something expensive on the server side. Hope this helps, Max On Fri, Nov 26, 2010 at 4:41 PM, Luke lvale...@gmail.com wrote: i was taking a look at the 1.4.0 javadoc for AsyncDatastoreService. i see the get, put and delete operations return a Future, but the prepare methods return a naked PreparedQuery object, and it doesn't look like PreparedQuery has any async get methods. does the AsyncDatastoreService not support asynchronous queries, or is there something i'm missing? glad to see at lets the get and put methods are async, hoping to get async queries too (as well as async interfaces to more services). -- 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] test inbound email with attachments on development server
I would like to see this also. Two of my app's basic functions involving receiving and processing email attachments. thx, MG On Nov 22, 2010, at 11:56 AM, john byrne wrote: Can the test web page http://localhost:/_ah/admin/inboundmail; be extended to include the ability to include an attachment? I would like to test a feature that includes email with attachments -- 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] How can i store an image to a blobstore without using a form?
I would like to do this also. I am currently storing files as byte[] but I receive corrupted files about 5% of the time and it is seemingly random. I'm using Objectify and I think it translates the byte[] to a Blob but doesn't use the Blobstore. I believe it would be possible using the Apache HTTP library (or URL Fetch). I use the Apache library to POST a file to a URL and retrieve the response. See below. If anyone has sample code, that would be great. thx MG HttpParams params = new BasicHttpParams(); HttpClient httpClient = new DefaultHttpClient(new GAEConnectionManager(), params); HttpPost post = new HttpPost(https://www.ocrterminal.com/api/submit.cgi?version=1.0username=password=y;); HttpProtocolParamBean paramsBean = new HttpProtocolParamBean(params); paramsBean.setUserAgent(APIClient:bdrenv); post.setParams(params); MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); mpEntity.addPart(upload, new InputStreamKnownSizeBody(new ByteArrayInputStream(body), body.length, contentType, filename)); post.setEntity(mpEntity); HttpResponse response = httpClient.execute(post); HttpEntity entity = response.getEntity(); String responseString = EntityUtils.toString(entity); On Nov 21, 2010, at 8:52 AM, acellam guy wrote: is it possible??? -- 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] Re: pdf
Hi, If anyone has been successful at using this with GAE, please let me know and as this would be great for my application. The application I have is an email and attachment parsing / routing application that organizes all of the documents. It currently relies on Apache POI, PDFBox (an older, manipulated version to support the JRE white list), and a REST connection to OCRTerminal.com if a PDF cannot be parsed with PDFBox. If the Google Docs Viewer can replace the other dependencies, that would be great. Please contact me if you have successful GAE code that serves these various file types and can get the text from them using Docs Viewer. thanks! Max On Nov 18, 2010, at 1:18 PM, Robert Lancer wrote: Try this http://docs.google.com/viewer On Nov 18, 7:23 am, thangavel s thangaveln...@gmail.com wrote: hi, how to use OCR in pdf and way to convert pdf to image conversion.any viewer for pdf show in browser for rotate. -- 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] How to send spreadsheet as an attachment on Google App Engine?
Vikas, I have a servlet that uses JXL to build an Excel spreadsheet and send it via email. Below is the code. However, I do not export any of the data from Google Spreadsheets. If the Google Spreadsheets API doesn't let you get the byte[], you'd probably need a JXL - Google Spreadsheets adapter that cycles through all sheets and all cells and duplicates them to the other format. Hope this helps, MG import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URLEncoder; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.mail.Address; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Part; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.util.ByteArrayDataSource; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import com.google.appengine.api.utils.SystemProperty; .. snip... public class SendMailTask extends HttpServlet { private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String requestId = request.getParameter(requestId); EmailTrackingRequest req = dao.getRequest(Long.valueOf(requestId)); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); WritableWorkbook workbookOut = Workbook.createWorkbook(outputStream); WritableSheet sheetOut = workbookOut.createSheet(First Sheet, 0); Label salesOrderIdLabel = new Label (0,0,Sales Order ID); Label shipDateLabel = new Label (1,0,Ship Date); Label trackingNumLabel = new Label (2,0, Tracking Number); Label scanDateLabel = new Label(3,0, Scan Date); Label scanTimeLabel = new Label(4,0, Scan Time); Label scanOffsetLabel = new Label(5,0, GMT Offset); Label scanStatusLabel = new Label(6,0, Scan Status); Label scanLocLabel = new Label(7,0, Location); Label scanCommentsLabel = new Label(8,0, Comments); try { sheetOut.addCell(salesOrderIdLabel); sheetOut.addCell(shipDateLabel); sheetOut.addCell(trackingNumLabel); sheetOut.addCell(scanDateLabel); sheetOut.addCell(scanTimeLabel); sheetOut.addCell(scanOffsetLabel); sheetOut.addCell(scanStatusLabel); sheetOut.addCell(scanLocLabel); sheetOut.addCell(scanCommentsLabel); int currentRow = 1; for (Shipment s : req.getShipments()) { sheetOut.addCell(new Label (0, currentRow, s.getSalesOrderId())); sheetOut.addCell(new Label (1, currentRow, s.getShipDate().toString())); sheetOut.addCell(new Label (2, currentRow, s.getTrackingNumber())); for (Scan scan : s.getScans()) { //_log.warning (scan status: + scan.getStatus()); Label scanDate = new Label(3, currentRow, scan.getScanDate()); Label scanTime = new Label(4, currentRow, scan.getScanTime()); Label scanOffset = new Label(5, currentRow, scan.getOffset()); Label scanStatus = new Label(6, currentRow, scan.getScanStatus()); Label scanLoc = new Label(7, currentRow, scan.getLoc()); Label scanComments = new Label(8, currentRow, scan.getComments()); sheetOut.addCell(scanDate); sheetOut.addCell(scanTime); sheetOut.addCell(scanOffset); sheetOut.addCell(scanStatus);
[appengine-java] Re: memcache package not in classpath
Thanks a lot for sharing this! -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.
Re: [appengine-java] SDK 1.3.8 released!
Guillaume, Which FetchOptions class are you looking at? The last update I see to either of them was back in April and they were backwards compatible changes. Thanks, Max On Fri, Oct 15, 2010 at 5:51 AM, Guillaume Laforge glafo...@gmail.comwrote: Excellent, thank you! The instances view is really nice and interesting! I just wanted to also mention that while upgrading one of my apps, one controller wasn't compiling against the new SDK, as there had been a little rename refactoring of a method: FetchOptions.Builder#withDefault is now: FetchOptions.Builder#withDefaults Notice the final 's'! Perhaps you could publish a list of API differences between releases? I know some OSS projects publish such documents for helping people upgrade to newer versions, or for showing users what the new APIs are. Anyhow, well done for this release! Guillaume On Fri, Oct 15, 2010 at 05:44, Takashi Matsuo tmat...@google.com wrote: Hello App Engine Developers! We're very happy to announce that SDK 1.3.8 is released today. There are many new cool features, so please download the new SDK and enjoy it! You can download the new SDK from: http://code.google.com/appengine/downloads.html Our blog post includes some screenshots of new features in admin console: http://googleappengine.blogspot.com/2010/10/new-app-engine-sdk-138-includes-new.html Here are release notes: Java --- Version 1.3.8 = - You can run task queue tasks immediately from the admin console. - Added an OutputSettings class to the Images API to specify the JPEG encoding quality when running in production. - Support for login of multiple Google accounts within an app, and longer login sessions. For more information see: http://www.google.com/support/accounts/bin/answer.py?answer=181599 - In queue.xml, the maximum allowed bucket size is now 100. - Removed limits on zigzag merge-join queries. Therefore the error The built-in indices are not efficient enough for this query and your data. Please add a composite index for this query. will no longer be thrown in most cases, enabling more types of queries without indexes. - The whitelist has been updated to include java.net.InetAddress and some interfaces and abstract classes in javax.xml.soap, including javax.xml.soap.SOAPMessage. - Fixed an issue reserving App Ids by owners of emails containing periods, multiple cases, and googlemail.com address. http://code.google.com/p/googleappengine/issues/detail?id=1196 - Fixed an issue where TaskOptions had no public getters, making testing impossible. http://code.google.com/p/googleappengine/issues/detail?id=3243 - Fixed an issue on the development server where PNGs were being returned as JPEGs. http://code.google.com/p/googleappengine/issues/detail?id=3661 Python - Version 1.3.8 == - Builtin app.yaml handlers are available for common application functions, such as appstats. http://code.google.com/appengine/docs/python/config/appconfig.html#Builtin_Handlers - The Admin Console now provides an experimental tool to delete all entities in the datastore or all entities of a given type. This is available only if enabled using the datastore_admin builtin. Deleting entities will count against application quota. http://code.google.com/appengine/docs/python/datastore/creatinggettinganddeletingdata.html#Deleting_Entities_in_Bulk - You can run task queue tasks immediately from the Admin Console. - You can now specify the quality of JPEG images via the Image API's execute_transforms function. Available in production only. - Support for login of multiple Google accounts within an app, and longer login sessions. For more information see: http://www.google.com/support/accounts/bin/answer.py?answer=181599 - In queue.yaml, the maximum allowed bucket size is now 100. - Precompilation is now enabled by default. To disable, use the --no_precompilation flag when updating your app. - BlobInfo now has an open() method that returns a BlobReader. - BlobReader now accepts a BlobInfo. - Removed limits on zigzag merge-join queries. Therefore the error The built-in indices are not efficient enough for this query and your data. Please add a composite index for this query. will no longer be thrown in most cases, enabling more types of queries without indexes. - Fixed an issue with task queue tasks not running on the dev_appserver when using Python 2.6. - Fixed an issue on the dev_appserver where auto task running wasn't working for BulkAdd. - Fixed an issue reserving App Ids by owners of similarly-named mails accounts containing periods, multiple cases, and googlemail.com address. http://code.google.com/p/googleappengine/issues/detail?id=1196 - Fixed an issue on the development server where PNGs were being
Re: [appengine-java] Any changes to access levels in com.google.appengine.api.datastore recently?
We refactored the internals of the DatastoreService implementation pretty heavily in the release we just pushed out but there shouldn't have been any backwards incompatible changes to the public API. I'm not familiar with appengine-clj. Does it use reflection to access non-public classes/methods/fields? If so that's not safe, since we only guarantee backwards compatibility for the public API. If not then I'll need more info. Thanks, Max On Thu, Oct 14, 2010 at 12:14 PM, Darren Clarke dar...@redaranj.com wrote: Has anything changed with class access levels (public vs. private) in the production datastore code in the last day or so? I've had a Clojure app running for several weeks and starting last night, whenever I try to access the datastore, I get the error below. It could be a bug in the library I'm using (appengine-clj) or even in Clojure's dispatch code, but I just want to understand if anything has changed server-side that might have triggered it. The application still works on the dev appserver v1.3.7. java.lang.IllegalArgumentException: Can't call public method of non-public class: public com.google.appengine.api.datastore.Transaction com.google.appengine.api.datastore.BaseDatastoreService.getCurrentTransaction(com.google.appengine.api.datastore.Transaction) at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:85) at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28) at appengine.datastore.service$current_transaction.invoke(service.clj:72) at appengine.datastore.service$put_entity.invoke(service.clj:131) at appengine.datastore.service$fn__176.invoke(service.clj:149) at appengine.datastore.service$fn__136$G__116__141.invoke(service.clj:10) at com.redaranj.ledes.service.servlet$fn__1902$fn__1903.invoke(servlet.clj:17) at compojure.core$routes$fn__1706$fn__1707.invoke(core.clj:72) at clojure.core$some.invokeStatic(core.clj:2297) at compojure.core$routes$fn__1706.invoke(core.clj:71) at ring.middleware.params$wrap_params$fn__1468.invoke(params.clj:77) at ring.middleware.cookies$wrap_cookies$fn__1559.invoke(cookies.clj:123) at ring.util.servlet$make_service_method$fn__1881.invoke(servlet.clj:117) at com.redaranj.ledes.service.servlet$_service.invoke(servlet.clj:19) at com.redaranj.ledes.service.servlet.service(Unknown Source) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:97) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:238) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135) at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:261) at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:8483) at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:8481) at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:24) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:418) at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:572
[appengine-java] Using Paging with Google Visualizations
Hi Folks, Has anyone used some of the paging techniques with the Google Table Visualization? I am trying to successfully combine the example provided at the below link with either Objectify cursors (also linked to) or another paging technique. If anyone has advice or an example, I would greatly appreciate it! Visualization Paging Example: http://code.google.com/apis/visualization/documentation/examples.html#tablequerywrapper Objectify Cursors: http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Cursors Paging Using Key: http://google-appengine.googlegroups.com/web/efficient_paging_using_key_instead_of_a_dedicated_unique_property.txt?gda=GlQOkXcAAADkKFVlorMMaZztUT6GVv9QP5JoIgcioI1DURz9j093fQQgER4RQV57mxjvIzAWBZmQ3TeCdbqm30Qz_AwgYlIpRbcWRj3jGGBm-fgbnPJIYc4-hXRRmo3Xgj6KgtSLBeZ45alvcyXc30EbEX-RNDZveV4duv6pDMGhhhZdjQlNAw thanks!! MG -- 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] OCR on Google App Engine
Hi, I'm trying to implement the capability to text extraction from images (TIF/PDF) on Google App Engine. Has anyone had success with this? Is the best option to utilize a web service? I was able to find OCRWebService.com, but that only has a SOAP interface and not REST. I found OCR Terminal (http://www.ocrterminal.com/partnerships/api.cgi), but I'm unable to find any specifics on how it works. I have tried to use Google Docs, but the OCR engine there was unable to read any of my images. Finally, I was able to get Asprise working locally, but it is only distributed in native libraries (plus it is very expensive). Has anyone had success with this? 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] JDO - How to Model a Transferable Relationship?
Hi, I'm having trouble getting JDO work in a situation of wanting to transfer child objects from one parent to another. Let's say that I would like to model an object called Team and an object called Player. A Player can be on only one team at a time, and a Team can have many Players. I can get the basics working, however I run into problems when I want to transfer (trade) an existing Player instance to an existing Team instance. Outside of that relationship, the objects are completely different. I have the problem that a child cannot be moved because apparently it isn't in the same entity group. I have tried to model it as SetKey in each class like the Favorite Foods example in the documentation, but that doesn't work. I don't get errors, but nothing is saved. The Sets saved are always empty. I have tried the same thing with ArrayListLong, where Long is the Key.getId() of the related object. I think I am missing something rather simple, but I can't get it working. Do I need other annotations? Can someone post a simple example? 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] Re: CloudCover: Cannot schedule instance of TestClass because of not an available class
Thanks for trying CloudCover! Unfortunately CloudCover's support for datastore tests rely on an App Engine feature called Namespaces that is not yet available to all apps. This feature should be widely available soon, at which point your error message will go away. Sorry for the trouble, Max On Sat, Jul 10, 2010 at 12:26 PM, luijar luis.j.aten...@gmail.com wrote: I have not been able to successfully run any tests that involve datastore access: I am seeing the following: Application (nepal-dev), attempting to use namespace (1002_877806974), is not permitted to use datastore namespaces. java.lang.IllegalArgumentException: Application (nepal-dev), attempting to use namespace (1002_877806974), is not permitted to use datastore namespaces. at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java: 34) at com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(DatastoreApiHelper.java: 67) at com.google.appengine.api.datastore.DatastoreServiceImpl $2.run(DatastoreServiceImpl.java:188) at com.google.appengine.api.datastore.TransactionRunner.runInTransaction(TransactionRunner.java: 30) at com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java: 176) at com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java: 156) at com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java: 148) at com.citrix.ws.nepal.gaetest.GAEUserTest.testCreateAndReadUser(GAEUserTest.java: 37) Any thoughts??? On Jul 1, 1:13 pm, luijar luis.j.aten...@gmail.com wrote: Not sure what the problem is, all my queries are failing with this message: Illegal argument javax.jdo.JDOFatalUserException: Illegal argument at org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(Nuc leusJDOHelper.java: 344) at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:252) at Environment: SDK 1.3.4 JUnit = 4 Is there a code sample we can use as reference?, with all of the required JAR files?. I haven't been able to run a single test that requires accessing datastore. On Jun 30, 5:58 pm, luijar luis.j.aten...@gmail.com wrote: I am seeing this however, Executing a simple query: Illegal argument javax.jdo.JDOFatalUserException: Illegal argument at org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(Nuc leusJDOHelper.java: 344) at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:252) at This query works when the actual application is running, and it works in the Local testing Helper, but not with the CloudCoverLocalServiceTestHelper. Is there a specific version of App Engine I should be using? I am using 1.3.2. On Jun 12, 11:57 pm, Max Ross (Google) maxr+appeng...@google.commaxr%2bappeng...@google.com wrote: This most likely means that your tests aren't available as part of your application. Are you certain you uploaded them? On Fri, Jun 11, 2010 at 11:31 PM, Art art...@gmail.com wrote: Dear group, I would like to know how to make CloudCover ( http://code.google.com/p/ cloudcover/) work. At cloudcover.html, even I clicked on the Start New Run button, the (default) test won't be executed. The cloudcover.html showed like: Run 1001: NOT_STARTED, Completed 0/0 (0%) Passed: 0 Too Slow: 0 Failed: 0 In Progress: 0 Not Started: 0 com.google.appengine.testing.cloudcover.harness.junit3.JUnit3TestHarness (0) I found the following logs in the GAE/J logs: W 06-11 10:45PM 49.387 com.google.appengine.testing.cloudcover.harness.junitx.JUnitTestRun getTestIds: 1001: Cannot schedule instance of class com.appspot.waversbeach.server.MemcacheTest for execution because its String represenation, testInsert1(com.appspot.waversbeach.server.MemcacheTest), is not an available class. W 06-11 10:45PM 49.395 com.google.appengine.testing.cloudcover.harness.junitx.JUnitTestRun getTestIds: 1001: Cannot schedule instance of class com.appspot.waversbeach.server.MemcacheTest for execution because its String represenation, testInsert2(com.appspot.waversbeach.server.MemcacheTest), is not an available class. MemcacheTest class is a really simple test class just for the trial purpose with CloudCover: public class MemcacheTest extends TestCase { public MemcacheTest( String name) { super( name); } protected static Cache cache = null; @Override protected void setUp() throws Exception { if ( cache == null) { CacheFactory cacheFactory = CacheManager.getInstance().getCacheFactory(); cache = cacheFactory.createCache( Collections.emptyMap
[appengine-java] Re: Application restart for almost every request? What happened?
This is really one of the core problems why you cannot use GAE for anything serious. Even if you get enough traffic, some users suffer from instance recycling every second (read the comments at the issue). -- 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] CloudCover: Cannot schedule instance of TestClass because of not an available class
This most likely means that your tests aren't available as part of your application. Are you certain you uploaded them? On Fri, Jun 11, 2010 at 11:31 PM, Art art...@gmail.com wrote: Dear group, I would like to know how to make CloudCover (http://code.google.com/p/ cloudcover/) work. At cloudcover.html, even I clicked on the Start New Run button, the (default) test won't be executed. The cloudcover.html showed like: Run 1001: NOT_STARTED, Completed 0/0 (0%) Passed: 0 Too Slow: 0 Failed: 0 In Progress: 0 Not Started: 0 com.google.appengine.testing.cloudcover.harness.junit3.JUnit3TestHarness (0) I found the following logs in the GAE/J logs: W 06-11 10:45PM 49.387 com.google.appengine.testing.cloudcover.harness.junitx.JUnitTestRun getTestIds: 1001: Cannot schedule instance of class com.appspot.waversbeach.server.MemcacheTest for execution because its String represenation, testInsert1(com.appspot.waversbeach.server.MemcacheTest), is not an available class. W 06-11 10:45PM 49.395 com.google.appengine.testing.cloudcover.harness.junitx.JUnitTestRun getTestIds: 1001: Cannot schedule instance of class com.appspot.waversbeach.server.MemcacheTest for execution because its String represenation, testInsert2(com.appspot.waversbeach.server.MemcacheTest), is not an available class. MemcacheTest class is a really simple test class just for the trial purpose with CloudCover: public class MemcacheTest extends TestCase { public MemcacheTest( String name) { super( name); } protected static Cache cache = null; @Override protected void setUp() throws Exception { if ( cache == null) { CacheFactory cacheFactory = CacheManager.getInstance().getCacheFactory(); cache = cacheFactory.createCache( Collections.emptyMap()); } } @Override protected void tearDown() throws Exception { cache.clear(); } private void doTest() { assertFalse( cache.containsKey( yar)); cache.put( yar, foo); assertTrue( cache.containsKey( yar)); } public void testInsert1() { doTest(); } public void testInsert2() { doTest(); } } My JUnit3Config class is like: public class CloudCoverRunnerConfig extends JUnit3Config { @Override public TestRun newTestRun( String arg0) { TestSuite suite = new TestSuite(); suite.addTest( new MemcacheTest( testInsert1)); suite.addTest( new MemcacheTest( testInsert2)); return new JUnit3TestRun( suite); } } I'm thinking of giving the CloudCover a shot for Wave robot testing if it's possible, since I have read in one of Wave docs that there is no existing mechanism currently to test Wave robot on local machine. Thank you -- 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] The API call datastore_v3.Put() is temporarily unavailable.
GAE is currently read-only for scheduled maintenance. I recommend subscribing to the google-appengine-downtime-notify group if you'd like to receive notifications of these events: http://groups.google.com/group/google-appengine-downtime-notify/browse_thread/thread/5302cb6b950ce215 http://groups.google.com/group/google-appengine-downtime-notify/browse_thread/thread/4857b46e4e6ff0f9 Thanks, Max On Wed, May 5, 2010 at 1:41 PM, hector hrov...@gmail.com wrote: Getting this error on Java 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.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.
Re: [appengine-java] Unable to update app: Error posting to URL: Error 500
GAE is currently read-only for scheduled maintenance. I recommend subscribing to the google-appengine-downtime-notify group if you'd like to receive notifications of these events: http://groups.google.com/group/google-appengine-downtime-notify/browse_thread/thread/5302cb6b950ce215 http://groups.google.com/group/google-appengine-downtime-notify/browse_thread/thread/4857b46e4e6ff0f9 Thanks, Max On Wed, May 5, 2010 at 1:45 PM, Rahul rahul.jun...@gmail.com wrote: Suddenly i have started getting the following exception exception when trying to deploy the application to appengine from eclipse. I was able to do this till 10 min before. What is the possible cause for this or there is something wrong on the server end ? com.google.appengine.tools.admin.AdminException: Unable to update app: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=thoughtclickshelpversion=dev-restfb; 500 Internal Server Error Server Error (500) A server error has occurred. at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java: 62) at com.google.appengine.eclipse.core.proxy.AppEngineBridgeImpl.deploy(AppEngineBridgeImpl.java: 271) at com.google.appengine.eclipse.core.deploy.DeployProjectJob.runInWorkspace(DeployProjectJob.java: 145) at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java: 38) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) Caused by: java.io.IOException: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=thoughtclickshelpversion=dev-restfb; 500 Internal Server Error Server Error (500) A server error has occurred. at com.google.appengine.tools.admin.ServerConnection.send(ServerConnection.java: 149) at com.google.appengine.tools.admin.ServerConnection.post(ServerConnection.java: 82) at com.google.appengine.tools.admin.AppVersionUpload.send(AppVersionUpload.java: 559) at com.google.appengine.tools.admin.AppVersionUpload.beginTransaction(AppVersionUpload.java: 376) at com.google.appengine.tools.admin.AppVersionUpload.doUpload(AppVersionUpload.java: 111) at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java: 56) ... 4 more Thanks, Rahul -- 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] Re: The API call datastore_v3.Put() is temporarily unavailable.
Hi Jerome, What error were you getting instead of ApiProxy.CapabilityDisabledException? Do you have a stack trace I can look at? Thanks, Max On Wed, May 5, 2010 at 1:57 PM, Jerome jerome.mou...@gmail.com wrote: Well... based on the announcement, we were supposed to receive a com.google.apphosting.api.ApiProxy.CapabilityDisabledException exception. For at least the first 10 minutes of the down time, it was not the case. We are sorting things out, but it looks like we lost a lot of data, as our system supposed to take over during the maintenance was based on getting the documented exception... Jerome On May 5, 3:47 pm, Max Ross (Google) maxr+appeng...@google.commaxr%2bappeng...@google.com wrote: GAE is currently read-only for scheduled maintenance. I recommend subscribing to the google-appengine-downtime-notify group if you'd like to receive notifications of these events: http://groups.google.com/group/google-appengine-downtime-notify/brows... http://groups.google.com/group/google-appengine-downtime-notify/brows.. . Thanks, Max On Wed, May 5, 2010 at 1:41 PM, hector hrov...@gmail.com wrote: Getting this error on Java 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 google-appengine-java%2bunsubscr...@googlegroups.comgoogle-appengine-java%252bunsubscr...@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 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.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] Error uploading project to App Engine
GAE is currently read-only for scheduled maintenance. I recommend subscribing to the google-appengine-downtime-notify group if you'd like to receive notifications of these events: http://groups.google.com/group/google-appengine-downtime-notify/browse_thread/thread/4857b46e4e6ff0f9 http://groups.google.com/group/google-appengine-downtime-notify/browse_thread/thread/4857b46e4e6ff0f9 Thanks, Max On Wed, Apr 28, 2010 at 1:42 PM, Rahul Ravikumar tikura...@gmail.comwrote: When i try to update my project using the Eclipse plugin - I see the following error message in my eclipse log. I am unable to update my application on GAE. eclipse.buildId=I20090611-1540 java.version=1.6.0_20 java.vendor=Sun Microsystems Inc. BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US Framework arguments: -product org.eclipse.epp.package.jee.product Command-line arguments: -os win32 -ws win32 -arch x86 -product org.eclipse.epp.package.jee.product Error Wed Apr 28 13:35:27 PDT 2010 Unable to update app: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=myappidversion=3500 Internal Server Error Server Error (500) A server error has occurred. See the deployment console for more details com.google.appengine.tools.admin.AdminException: Unable to update app: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=myappidversion=3; 500 Internal Server Error Server Error (500) A server error has occurred. at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java: 62) at com.google.appengine.eclipse.core.proxy.AppEngineBridgeImpl.deploy(AppEngineBridgeImpl.java: 271) at com.google.appengine.eclipse.core.deploy.DeployProjectJob.runInWorkspace(DeployProjectJob.java: 145) at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java: 38) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) Caused by: java.io.IOException: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=myappidversion=3; 500 Internal Server Error Server Error (500) A server error has occurred. at com.google.appengine.tools.admin.ServerConnection.send(ServerConnection.java: 149) at com.google.appengine.tools.admin.ServerConnection.post(ServerConnection.java: 82) at com.google.appengine.tools.admin.AppVersionUpload.send(AppVersionUpload.java: 559) at com.google.appengine.tools.admin.AppVersionUpload.beginTransaction(AppVersionUpload.java: 376) at com.google.appengine.tools.admin.AppVersionUpload.doUpload(AppVersionUpload.java: 111) at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java: 56) ... 4 more The deployment log is given below: Unable to update: java.io.IOException: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=myappidversion=3; 500 Internal Server Error Server Error (500) A server error has occurred. at com.google.appengine.tools.admin.ServerConnection.send(ServerConnection.java: 149) at com.google.appengine.tools.admin.ServerConnection.post(ServerConnection.java: 82) at com.google.appengine.tools.admin.AppVersionUpload.send(AppVersionUpload.java: 559) at com.google.appengine.tools.admin.AppVersionUpload.beginTransaction(AppVersionUpload.java: 376) at com.google.appengine.tools.admin.AppVersionUpload.doUpload(AppVersionUpload.java: 111) at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java: 56) at com.google.appengine.eclipse.core.proxy.AppEngineBridgeImpl.deploy(AppEngineBridgeImpl.java: 271) at com.google.appengine.eclipse.core.deploy.DeployProjectJob.runInWorkspace(DeployProjectJob.java: 145) at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java: 38) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) Any ideas as to why this could be happening ? Thanks, Rahul -- 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
Re: [appengine-java] Re: ApiProxyLocalImpl class not public
What aspect of the local datastore are you trying to configure that isn't covered by LocalDatastoreServiceTestConfig()? I don't think you should have to configure the ApiProxyLocal or the LocalServerEnvironment directly. On Sun, Apr 25, 2010 at 3:40 PM, mvsoares mavsoa...@gmail.com wrote: Indeed, ApiProxyLocalImpl is not public anymore in newer versions of google app engine. Find below one solution to the problem: import java.io.File; import java.util.Properties; import javax.jdo.JDOHelper; import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; import junit.framework.TestCase; import com.google.appengine.api.datastore.dev.LocalDatastoreService; import com.google.appengine.tools.development.ApiProxyLocal; import com.google.appengine.tools.development.ApiProxyLocalFactory; import com.google.appengine.tools.development.LocalServerEnvironment; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; import com.google.appengine.tools.development.testing.LocalTaskQueueTestConfig; import com.google.apphosting.api.ApiProxy; public class BaseTest extends TestCase { private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalTaskQueueTestConfig()); protected PersistenceManagerFactory pmf; protected PersistenceManager pm; @Override public void tearDown() { helper.tearDown(); } @Override public void setUp() throws Exception { super.setUp(); helper.setUp(); Properties newProperties = new Properties(); newProperties.put(javax.jdo.PersistenceManagerFactoryClass, org.datanucleus.store.appengine.jdo. + DatastoreJDOPersistenceManagerFactory); newProperties.put(javax.jdo.option.ConnectionURL, appengine); newProperties.put(javax.jdo.option.NontransactionalRead, true); newProperties.put(javax.jdo.option.NontransactionalWrite, true); newProperties.put(javax.jdo.option.RetainValues, true); newProperties.put(datanucleus.appengine.autoCreateDatastoreTxns, true); newProperties.put(datanucleus.appengine.autoCreateDatastoreTxns, true); pmf = JDOHelper.getPersistenceManagerFactory(newProperties); pm = pmf.getPersistenceManager(); ApiProxyLocalFactory factory = new ApiProxyLocalFactory(); ApiProxyLocal proxy = factory.create(new LocalServerEnvironment() { public void waitForServerToStart() throws InterruptedException { } public int getPort() { return 0; } public File getAppDir() { return new File(.); } public String getAddress() { return null; } }); proxy.setProperty( // LocalDatastoreService.BACKING_STORE_PROPERTY, LocalDatastoreService.NO_STORAGE_PROPERTY, Boolean.TRUE.toString()); ApiProxy.setDelegate(proxy); } } -- 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] Re: ApiProxyLocalImpl class not public
Your JDO config is not related to LocalServiceTestHelper or LocalDatastoreServiceTestConfig. If you create your PersistenceManager in the typical way after you create a LocalServiceTestHelper with a LocalDatastoreServiceTestConfig and then call helper.setUp() you should be all set. Max 2010/4/26 Marcos Vinícius Soares mavsoa...@gmail.com I just wanted an instance of PersistenceManager to use in unit tests and I was able to setup it up. I'm not sure how to get it through LocalDatastoreServiceTestConfig. Anyway, it is working now as per the code I sent earlier. Thanks On Mon, Apr 26, 2010 at 1:33 PM, Max Ross (Google) maxr+appeng...@google.com maxr%2bappeng...@google.com wrote: What aspect of the local datastore are you trying to configure that isn't covered by LocalDatastoreServiceTestConfig()? I don't think you should have to configure the ApiProxyLocal or the LocalServerEnvironment directly. On Sun, Apr 25, 2010 at 3:40 PM, mvsoares mavsoa...@gmail.com wrote: Indeed, ApiProxyLocalImpl is not public anymore in newer versions of google app engine. Find below one solution to the problem: import java.io.File; import java.util.Properties; import javax.jdo.JDOHelper; import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; import junit.framework.TestCase; import com.google.appengine.api.datastore.dev.LocalDatastoreService; import com.google.appengine.tools.development.ApiProxyLocal; import com.google.appengine.tools.development.ApiProxyLocalFactory; import com.google.appengine.tools.development.LocalServerEnvironment; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; import com.google.appengine.tools.development.testing.LocalTaskQueueTestConfig; import com.google.apphosting.api.ApiProxy; public class BaseTest extends TestCase { private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalTaskQueueTestConfig()); protected PersistenceManagerFactory pmf; protected PersistenceManager pm; @Override public void tearDown() { helper.tearDown(); } @Override public void setUp() throws Exception { super.setUp(); helper.setUp(); Properties newProperties = new Properties(); newProperties.put(javax.jdo.PersistenceManagerFactoryClass, org.datanucleus.store.appengine.jdo. + DatastoreJDOPersistenceManagerFactory); newProperties.put(javax.jdo.option.ConnectionURL, appengine); newProperties.put(javax.jdo.option.NontransactionalRead, true); newProperties.put(javax.jdo.option.NontransactionalWrite, true); newProperties.put(javax.jdo.option.RetainValues, true); newProperties.put(datanucleus.appengine.autoCreateDatastoreTxns, true); newProperties.put(datanucleus.appengine.autoCreateDatastoreTxns, true); pmf = JDOHelper.getPersistenceManagerFactory(newProperties); pm = pmf.getPersistenceManager(); ApiProxyLocalFactory factory = new ApiProxyLocalFactory(); ApiProxyLocal proxy = factory.create(new LocalServerEnvironment() { public void waitForServerToStart() throws InterruptedException { } public int getPort() { return 0; } public File getAppDir() { return new File(.); } public String getAddress() { return null; } }); proxy.setProperty( // LocalDatastoreService.BACKING_STORE_PROPERTY, LocalDatastoreService.NO_STORAGE_PROPERTY, Boolean.TRUE.toString()); ApiProxy.setDelegate(proxy); } } -- 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
Re: [appengine-java] Re: TaskOptions.countdownMillis not used
The dev server used to not execute tasks automatically at all but now the functionality emulates prod pretty closely. On Fri, Apr 23, 2010 at 6:02 AM, James jamesk...@gmail.com wrote: Are you seeing this on the dev server or in production? I vaguely recall reading somewhere that the dev server always executes immediately(??). James On Apr 22, 4:21 pm, Fabrizio fht...@gmail.com wrote: Hello, I need to add a task in the TaskQueue. But I need a small delay before exectution (2 seconds). I use countdownMillis(long) to delay the execution. But execution starts immediatelly. I don't understand if my code is wrong or if there is a problem with countdownMillis. My code is: Queue queue = QueueFactory.getQueue(queueName); TaskOptions taskOpts = TaskOptions.Builder.url(url); taskOpts.countdownMillis(delay); taskOpts.method(Method.GET); queue.add(taskOpts); Thank you for help fabrizio -- 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 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.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] Re: TaskOptions.countdownMillis not used
The difference between 2 seconds and immediate isn't much. How are you measuring? Do you have logs that show the time at which the task was enqueued and the time at which it executes? Thanks, Max On Fri, Apr 23, 2010 at 12:31 PM, Fabrizio fht...@gmail.com wrote: Production. On Apr 23, 3:02 pm, James jamesk...@gmail.com wrote: Are you seeing this on the dev server or in production? I vaguely recall reading somewhere that the dev server always executes immediately(??). James -- 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] QueueFactory and NoClassDefFoundError
Hi Felipe, Can you print out the value of System.getProperty(java.class.path) while the app is running and see if that jar is listed? On Fri, Apr 23, 2010 at 1:56 PM, Felipe Quintella Correia felipequintell...@gmail.com wrote: Hello again. Well, unless I'm overseeing something, I'm pretty sure that the appengine-api-labs.jar is on my runtime classpath... I'm joining 2 printscreens to confirm (if it is allowed), but I think that's it... I have App Engine SDK 1.3.2 on my classpath, and the App Engine SDK has appengine-api-labs-1.3.2.jar in it. Sorry for the newbie question, but I am stuck on it. Thank you again, Felipe Quintella PS: if joined files are not allowed, check the screens on this 2 links: http://dl.dropbox.com/u/5958704/Screen%20shot%202010-04-23%20at%2017.50.11.png http://dl.dropbox.com/u/5958704/Screen%20shot%202010-04-23%20at%2017.50.28.png 2010/4/22 Felipe Quintella Correia felipequintell...@gmail.com I'll be sure it's on the runtime classpath as soon as I am home. Thank you Felipe Quintella 2010/4/22 Max Ross (Google) maxr+appeng...@google.commaxr%2bappeng...@google.com Make sure appengine-api-labs.jar is on your runtime classpath. Max On Wed, Apr 21, 2010 at 9:00 PM, Felipe Quintella felipequintell...@gmail.com wrote: Hello there. I'm new to Google AppEngine, but I'm already searched and can't find the answer to my problem. I am trying to add a task to the default taskqueue, but i keep getting a NoClassDefFoundError with the QueueFactory class... I can't find what the problem is. I have App Engine SDK 1.3.2 added as a library, and have imported the QueueFactory successfully... Maybe you can enlighten me. Looking forward to your answer, Thank you. Felipe Quintella. Error: HTTP ERROR 500 Problem accessing /canalparser. Reason: com/google/appengine/api/labs/taskqueue/QueueFactory Caused by: java.lang.NoClassDefFoundError: com/google/appengine/api/labs/ taskqueue/QueueFactory at braziltvguide.ParseCanaisServlet.doGet(ParseCanaisServlet.java: 108) Part of the code with the problem: import com.google.appengine.api.labs.taskqueue.Queue; import com.google.appengine.api.labs.taskqueue.QueueFactory; import static com.google.appengine.api.labs.taskqueue.TaskOptions.Builder.*; if (req.getParameter(task) == null) { Queue queue = QueueFactory.getDefaultQueue(); queue.add(url(/canalparser?tipo=getProgramastask=1)); } -- 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.
Re: [appengine-java] QueueFactory and NoClassDefFoundError
Make sure appengine-api-labs.jar is on your runtime classpath. Max On Wed, Apr 21, 2010 at 9:00 PM, Felipe Quintella felipequintell...@gmail.com wrote: Hello there. I'm new to Google AppEngine, but I'm already searched and can't find the answer to my problem. I am trying to add a task to the default taskqueue, but i keep getting a NoClassDefFoundError with the QueueFactory class... I can't find what the problem is. I have App Engine SDK 1.3.2 added as a library, and have imported the QueueFactory successfully... Maybe you can enlighten me. Looking forward to your answer, Thank you. Felipe Quintella. Error: HTTP ERROR 500 Problem accessing /canalparser. Reason: com/google/appengine/api/labs/taskqueue/QueueFactory Caused by: java.lang.NoClassDefFoundError: com/google/appengine/api/labs/ taskqueue/QueueFactory at braziltvguide.ParseCanaisServlet.doGet(ParseCanaisServlet.java: 108) Part of the code with the problem: import com.google.appengine.api.labs.taskqueue.Queue; import com.google.appengine.api.labs.taskqueue.QueueFactory; import static com.google.appengine.api.labs.taskqueue.TaskOptions.Builder.*; if (req.getParameter(task) == null) { Queue queue = QueueFactory.getDefaultQueue(); queue.add(url(/canalparser?tipo=getProgramastask=1)); } -- 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] TaskOptions.countdownMillis not used
What is the value of the delay variable? On Thu, Apr 22, 2010 at 1:21 PM, Fabrizio fht...@gmail.com wrote: Hello, I need to add a task in the TaskQueue. But I need a small delay before exectution (2 seconds). I use countdownMillis(long) to delay the execution. But execution starts immediatelly. I don't understand if my code is wrong or if there is a problem with countdownMillis. My code is: Queue queue = QueueFactory.getQueue(queueName); TaskOptions taskOpts = TaskOptions.Builder.url(url); taskOpts.countdownMillis(delay); taskOpts.method(Method.GET); queue.add(taskOpts); Thank you for help fabrizio -- 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] Google: Please, stop using the Builder pattern in the Low-Level API!
Hi Jeff, Note that DatastoreServiceConfig exposes a withDefaults() method. FetchOptions has one too but it's package protected. We didn't expose it because FetchOptions isn't required for many low level datastore calls and we didn't see why users would want to create one if they didn't plan to adjust the offset, the limit, the prefetch size, etc. We didn't consider your use case though, and it makes perfect sense. Unless there's some other aspect of the Builder pattern that is getting in your way that you have explained, I think we could easily address your concern if we exposed FetchOptions.withDefaults(). Is that right? Thanks, Max On Thu, Apr 1, 2010 at 3:07 AM, Jeff Schnitzer j...@infohazard.org wrote: This is a genuine, heartfelt plea: The Builder pattern (DatastoreServiceConfig, FetchOptions) makes code extra annoying when layering an API on top of the low-level API. Let's say you are writing some code by hand that creates a FetchOptions with a limit and an offset: FetchOptions opts = FetchOptions.Builder.withLimit(100).offset(20); Pretty straightforward when typing it out by hand, but the lack of orthogonality between withLimit() and limit() is a PITA when you're trying to automate the creation of a builder. The problem is, you can't start with a blank FetchOptions. The result is we end up writing lots of code like this: if (limit != null) { if (opts == null) opts = FetchOptions.Builder.withLimit(limit); else opts = opts.limit(limit); } This wouldn't be necessary if FetchOptions.Builder had a create() method that would produce a blank FetchOptions. Or if FetchOptions had a public constructor. Or if FetchOptions was an interface or even a nonfinal class. I notice that DatastoreServiceConfig is following in the path of FetchOptions. My initial reaction was Noo! :-) Thanks for listening, Jeff -- 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] com.google.appengine.api.datastore.DatastoreServiceConfig; not resolved by Eclipse with GAE plugin v1.3.2
Hi Didier, I can't say what's going on with your plugin but this is almost certainly a classpath issue. DatastoreServiceConfig was introduced in 1.3.2 so make sure you have the appengine-api.jar that shipped with SDK 1.3.2 in your classpath. Max On Thu, Apr 1, 2010 at 4:01 AM, Didier Durand durand.did...@gmail.comwrote: Hello, I need to use com.google.appengine.api.datastore.DatastoreConfig - works fine under Eclipse The Javadoc at http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/DatastoreConfig.html recommends to switch to com.google.appengine.api.datastore.DatastoreServiceConfig; When I do this change under Eclipse: I get an import com.google.appengine.api.datastore.DatastoreServiceConfig cannot be resolved a) Is there something missing in my plugin v1.3.2? b) Can some of you do the same test and let me know if they get the same error ? regards didier -- 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] Google: Please, stop using the Builder pattern in the Low-Level API!
The 2 options you listed are indeed better, but they don't work if your goal is to prevent access to an uninitialized FetchOptions object. That was our original intent, so that's how we ended up steering you through the Builder at the start. At one point before we launched we had a more standard Builder that you had to call build() on at the end. I liked it because it meant that all the FetchOptions members could be final, but there was some debate within the team and we ultimately decided that in this case conciseness trumps immutability, so we dropped the explicit build() call and moved the setters to FetchOptions itself. We also considered putting the with constructors directly on FetchOptions and getting rid of the Builder entirely, but we decided that a static method named FetchOptions.withLimit(int limit) and an instance method named FetchOptions.limit(limit) wouldn't give enough of a hint about the intended usage. So here we are. API design is hard. Max On Thu, Apr 1, 2010 at 12:14 PM, Jeff Schnitzer j...@infohazard.org wrote: Oh, I wasn't suggesting a constructor that takes all the arguments, I'm just wondering why this: FetchOptions opts = FetchOptions.Builder.withLimit(10).offset(200); ...is better than this... FetchOptions opts = new FetchOptions().limit(10).offset(200); ...or even... FetchOptions opts = FetchOptions.create().limit(10).offset(200); Adding the Builder with duplicate-but-differently-named methods seems awkward. Jeff On Thu, Apr 1, 2010 at 11:43 AM, Max Ross (Google) maxr+appeng...@google.com maxr%2bappeng...@google.com wrote: Ok, we'll expose that method. With a public constructor it's very easy to mix up your args, especially when you have args of the same type. For example, someone is pretty much guaranteed to mix up the offset, limit, and prefetch args. A Builder prevents this. Josh Bloch has a nice chapter on this in the 2nd edition of Effective Java. Max On Thu, Apr 1, 2010 at 11:10 AM, Jeff Schnitzer j...@infohazard.org wrote: Yes, that would solve the problem. Although I have to wonder, how is this any better than having a public constructor? Jeff On Thu, Apr 1, 2010 at 10:08 AM, Max Ross (Google) maxr+appeng...@google.com maxr%2bappeng...@google.com wrote: Hi Jeff, Note that DatastoreServiceConfig exposes a withDefaults() method. FetchOptions has one too but it's package protected. We didn't expose it because FetchOptions isn't required for many low level datastore calls and we didn't see why users would want to create one if they didn't plan to adjust the offset, the limit, the prefetch size, etc. We didn't consider your use case though, and it makes perfect sense. Unless there's some other aspect of the Builder pattern that is getting in your way that you have explained, I think we could easily address your concern if we exposed FetchOptions.withDefaults(). Is that right? Thanks, Max On Thu, Apr 1, 2010 at 3:07 AM, Jeff Schnitzer j...@infohazard.org wrote: This is a genuine, heartfelt plea: The Builder pattern (DatastoreServiceConfig, FetchOptions) makes code extra annoying when layering an API on top of the low-level API. Let's say you are writing some code by hand that creates a FetchOptions with a limit and an offset: FetchOptions opts = FetchOptions.Builder.withLimit(100).offset(20); Pretty straightforward when typing it out by hand, but the lack of orthogonality between withLimit() and limit() is a PITA when you're trying to automate the creation of a builder. The problem is, you can't start with a blank FetchOptions. The result is we end up writing lots of code like this: if (limit != null) { if (opts == null) opts = FetchOptions.Builder.withLimit(limit); else opts = opts.limit(limit); } This wouldn't be necessary if FetchOptions.Builder had a create() method that would produce a blank FetchOptions. Or if FetchOptions had a public constructor. Or if FetchOptions was an interface or even a nonfinal class. I notice that DatastoreServiceConfig is following in the path of FetchOptions. My initial reaction was Noo! :-) Thanks for listening, Jeff -- 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
Re: [appengine-java] Re: Errors after updating to 1.3.2
The method that can't be found was added in 1.3.2 so, as John says, this is almost certainly a classpath problem. My guess is that you have an old version of appengine-api.jar on your classpath somewhere. On Tue, Mar 30, 2010 at 8:26 PM, Featheast Lee featheast@gmail.comwrote: I tried to do what you mentioned here, but seems no lucky. On Mar 31, 1:21 pm, John Patterson jdpatter...@gmail.com wrote: Looks like you have a class path problem. Do you have different versions of the app engine jars in your WEB-INF/lib dir? On 31 Mar 2010, at 09:18, Featheast Lee wrote: I have updated my app engine to 1.3.2 a couple of days ago, and it runs well on the cloud. Today, when I trying to some testing on my local machine, an exception throws out whenever I try to use the PMF code: PersistenceManager pm = PMF.get().getPersistenceManager(); Basically the exceptions stacks are: Internal Server Error (500) - The server encountered an unexpected condition which prevented it from fulfilling the request Caused by: java.lang.NoSuchMethodError: com .google .appengine .api.datastore.DatastoreServiceFactory.getDatastoreService(Lcom/ google/appengine/api/datastore/DatastoreServiceConfig;)Lcom/google/ appengine/api/datastore/DatastoreService; At first, I thought it is the problem of my newly added code, however, after several attempts, all failed no matter what change i made. Then I thought it might be the issue of SDK, after I switched back my app engine to 1.3.1, it works perfect. But how can the same code runs well in the cloud, but failed in my local machine with different versions? Anyone can give me some idea? Thanks. PS: my test code is a pretty simple client code generate a GET method to the app engine project, and a datastore query will be called, the exception happens when the PMF is called. -- 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.comgoogle-appengine-java%2bunsubscr...@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.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: How to query objects with criterias defined in child entities
Hi John, Thanks for your reply. To be honest I am quite disappointed that GAE can not perform such query directly. According do your suggestion, to query with n filters on one relation index entity, we need to: 1, perform n separate queries to obtain n cursors of UserSkill entities by some sorting order 2, use in-memory zig-zag method to obtain User keys match all query 3, use a batch get to obtain all User entities Please correct me if my understanding is wrong. Best regards, Max On Mar 16, 10:53 am, John Patterson jdpatter...@gmail.com wrote: Hi Max, in that case definitely the model suggested by Jeff would be perfect. So something like: class User { String name; } class UserSkill { String skill; int ability; } When you store them make sure the User is the parent of the UserSkill so they can be updated in a single transaction. datastore.store(aUser); datastore.store(aSkill, aUser); // set the parent relationship Twig has support for this Relation Entity pattern like so: // return all high skilled java developers datastore.find().type(UserSkill.class) .addFilter(skill, EQUAL, java) .addFilter(ability, GREATER_THAN, 4) .returnParentsNow(); To find Users with Java 4 and C++ 2 you still need to do two queries. To avoid having to load all the results into memory make sure you sort by ability and key then stream the results using the zig-zag method. This will soon be built into Twig. Also do parallel queries to speed up the response. datastore.find().type(UserSkill.class) .addSort(ability) .addSort(Entity.KEY_RESERVED_PROPERTY) .addFilter(skill, EQUAL, java) .addFilter(ability, GREATER_THAN, 4) .returnParentsLater(); If you are expecting a lot of results you should tune this query by setting fetchResultsBy(100) or something similar to reduce the number of trips to the datastore. The default is 20 results returned at a time. Hope this helps! John On 16 Mar 2010, at 01:06, Max wrote: We have already done some testings on RDBMS and the performance is not acceptable to us. (for the second query, that means self join a table with 10 million records for n times). That's why we try GAE now. Thank you. On Mar 16, 1:54 am, Max thebb...@gmail.com wrote: Hi John, I am designing a quite similar data model of cited *User-Skill* problem, but not exactly the same. People may not be familiar with our domain. Basically it will be a track record system. User can perform different tasks and same task can be done by many users. According to historical data, more than 5000 different users will finish the same task, and it is possible for some users to finish more than 5000 tasks within the data archive period. Additionally, following queries will be performed frequently: 1, given 2 user, A and B, find out common tasks they have done (less important) 2, given several tasks, find out users who have done all these tasks (more important) Translate our problem into user-skill scenario, in this case, one user can have more than 5000 skills and there could be more than 5000 users having the same skill. 1, given 2 user, A and B, how to find out their mutual skills 2, given n skills, how to find full list of users having all n skills Best regards, Max On Mar 15, 5:59 pm, John Patterson jdpatter...@gmail.com wrote: I was meaning just put the UserSkills of the two people into the set. Each person only has a small number of skills yeah? Perhaps I mis understood your last requirement similarity between user A and User B On 15 Mar 2010, at 14:23, Max wrote: Hi John, Thanks for your reply. I need some time to study and test your codes. For the last point, Sets.intersection() means we need to load all keys into memory and perform an in memory Sets.intersection(). Is that possible to do this by a query directly. In other words, is that possible to use more than one equality filter on a list property of a relation entity index for their parents? Best regards, Max On Mar 15, 2:45 pm, John Patterson jdpatter...@gmail.com wrote: Hi Max, Regarding your original question, a more efficient solution would be to embed the UesrSkill in the User instance which would allow you to find all results in a single query. Th problem is that embedded instances can only be queried on a single value. There would be no way to query skill and ability on the same UserSkill - just java and c ++ with any skill over 3 and any skill over 5 To solve this you could create a combined property in UserSkill for querying skillAbility which would hold values such as java: 5, c ++: 4. This will only work with skill from 0-9 because it depends on lexical ordering (or e.g. 000 - 999) Both Twig and Objectify but not JDO support embedded
[appengine-java] Re: How to query objects with criterias defined in child entities
to query with n filters on one relation index entity *should be* to query with n filters on User with many UserSkill entity children On Mar 16, 2:05 pm, Max thebb...@gmail.com wrote: Hi John, Thanks for your reply. To be honest I am quite disappointed that GAE can not perform such query directly. According do your suggestion, to query with n filters on one relation index entity, we need to: 1, perform n separate queries to obtain n cursors of UserSkill entities by some sorting order 2, use in-memory zig-zag method to obtain User keys match all query 3, use a batch get to obtain all User entities Please correct me if my understanding is wrong. Best regards, Max On Mar 16, 10:53 am, John Patterson jdpatter...@gmail.com wrote: Hi Max, in that case definitely the model suggested by Jeff would be perfect. So something like: class User { String name; } class UserSkill { String skill; int ability; } When you store them make sure the User is the parent of the UserSkill so they can be updated in a single transaction. datastore.store(aUser); datastore.store(aSkill, aUser); // set the parent relationship Twig has support for this Relation Entity pattern like so: // return all high skilled java developers datastore.find().type(UserSkill.class) .addFilter(skill, EQUAL, java) .addFilter(ability, GREATER_THAN, 4) .returnParentsNow(); To find Users with Java 4 and C++ 2 you still need to do two queries. To avoid having to load all the results into memory make sure you sort by ability and key then stream the results using the zig-zag method. This will soon be built into Twig. Also do parallel queries to speed up the response. datastore.find().type(UserSkill.class) .addSort(ability) .addSort(Entity.KEY_RESERVED_PROPERTY) .addFilter(skill, EQUAL, java) .addFilter(ability, GREATER_THAN, 4) .returnParentsLater(); If you are expecting a lot of results you should tune this query by setting fetchResultsBy(100) or something similar to reduce the number of trips to the datastore. The default is 20 results returned at a time. Hope this helps! John On 16 Mar 2010, at 01:06, Max wrote: We have already done some testings on RDBMS and the performance is not acceptable to us. (for the second query, that means self join a table with 10 million records for n times). That's why we try GAE now. Thank you. On Mar 16, 1:54 am, Max thebb...@gmail.com wrote: Hi John, I am designing a quite similar data model of cited *User-Skill* problem, but not exactly the same. People may not be familiar with our domain. Basically it will be a track record system. User can perform different tasks and same task can be done by many users. According to historical data, more than 5000 different users will finish the same task, and it is possible for some users to finish more than 5000 tasks within the data archive period. Additionally, following queries will be performed frequently: 1, given 2 user, A and B, find out common tasks they have done (less important) 2, given several tasks, find out users who have done all these tasks (more important) Translate our problem into user-skill scenario, in this case, one user can have more than 5000 skills and there could be more than 5000 users having the same skill. 1, given 2 user, A and B, how to find out their mutual skills 2, given n skills, how to find full list of users having all n skills Best regards, Max On Mar 15, 5:59 pm, John Patterson jdpatter...@gmail.com wrote: I was meaning just put the UserSkills of the two people into the set. Each person only has a small number of skills yeah? Perhaps I mis understood your last requirement similarity between user A and User B On 15 Mar 2010, at 14:23, Max wrote: Hi John, Thanks for your reply. I need some time to study and test your codes. For the last point, Sets.intersection() means we need to load all keys into memory and perform an in memory Sets.intersection(). Is that possible to do this by a query directly. In other words, is that possible to use more than one equality filter on a list property of a relation entity index for their parents? Best regards, Max On Mar 15, 2:45 pm, John Patterson jdpatter...@gmail.com wrote: Hi Max, Regarding your original question, a more efficient solution would be to embed the UesrSkill in the User instance which would allow you to find all results in a single query. Th problem is that embedded instances can only be queried on a single value. There would be no way to query skill and ability on the same UserSkill - just java and c ++ with any skill over 3 and any skill over 5 To solve
[appengine-java] Re: How to query objects with criterias defined in child entities
Hi John, I am designing a quite similar data model of cited *User-Skill* problem, but not exactly the same. People may not be familiar with our domain. Basically it will be a track record system. User can perform different tasks and same task can be done by many users. According to historical data, more than 5000 different users will finish the same task, and it is possible for some users to finish more than 5000 tasks within the data archive period. Additionally, following queries will be performed frequently: 1, given 2 user, A and B, find out common tasks they have done (less important) 2, given several tasks, find out users who have done all these tasks (more important) Translate our problem into user-skill scenario, in this case, one user can have more than 5000 skills and there could be more than 5000 users having the same skill. 1, given 2 user, A and B, how to find out their mutual skills 2, given n skills, how to find full list of users having all n skills Best regards, Max On Mar 15, 5:59 pm, John Patterson jdpatter...@gmail.com wrote: I was meaning just put the UserSkills of the two people into the set. Each person only has a small number of skills yeah? Perhaps I mis understood your last requirement similarity between user A and User B On 15 Mar 2010, at 14:23, Max wrote: Hi John, Thanks for your reply. I need some time to study and test your codes. For the last point, Sets.intersection() means we need to load all keys into memory and perform an in memory Sets.intersection(). Is that possible to do this by a query directly. In other words, is that possible to use more than one equality filter on a list property of a relation entity index for their parents? Best regards, Max On Mar 15, 2:45 pm, John Patterson jdpatter...@gmail.com wrote: Hi Max, Regarding your original question, a more efficient solution would be to embed the UesrSkill in the User instance which would allow you to find all results in a single query. Th problem is that embedded instances can only be queried on a single value. There would be no way to query skill and ability on the same UserSkill - just java and c ++ with any skill over 3 and any skill over 5 To solve this you could create a combined property in UserSkill for querying skillAbility which would hold values such as java:5, c ++: 4. This will only work with skill from 0-9 because it depends on lexical ordering (or e.g. 000 - 999) Both Twig and Objectify but not JDO support embedded collections of instances. In Twig it would be defined like this class User { @Embed ListUserSkill skills; } class UserSkill { String skillAbility; Skill skill; // direct reference to Skill instance int ability; } Disclaimer: I have not tried any of this code - it is just off the top of my head You would then do a single range query to find java-5, java-6, java-7... // find java developers with ability over 5 in a single query datastore.find().type(User.class) .addFilter(skillAbility, GREATER_THAN_EQUAL, java: 5) // range start .addFilter(skillAbility, LESS_THAN, java- + Character.MAX_VALUE) // range end .returnResultsNow(); But that doesn't fully answer your question which includes an AND on multiple property values which is not supported by the datastore. To do this you will need to perform two queries and merge the results. Twig has support for merging only OR queries right now so you can do: // find users with c++ ability 2 OR java ability 5 RootFindCommand or = datastore.find().type(User.class); // default (only) operator is OR or.addChildCommand() .addFilter(skillAbility, GREATER_THAN_EQUAL, java: 5) // range start .addFilter(skillAbility, LESS_THAN, java- + Character.MAX_VALUE); // range end or.addChildCommand() .addFilter(skillAbility, GREATER_THAN_EQUAL, java: 5) // range start .addFilter(skillAbility, LESS_THAN, java- + Character.MAX_VALUE); // end // merges results from both queries into a single iterator IteratorUser results = or.returnResultsNow(); Supporting AND merges is coming! Add a feature request if you like. But for now you will have to do two separate queries as in the first example and join the results in your own code. You should make sure both queries are sorted by key then you can stream the results without loading them all into memory at once. // find java developers with ability over 5 datastore.find().type(User.class) .addSort(skillAbility) // first sort required to be inequality filter .addSort(Entity.KEY_RESERVED_PROPERTY) // ensure results in same order .addFilter(skillAbility, GREATER_THAN_EQUAL, java: 5) // range start .addFilter(skillAbility, LESS_THAN, java- + Character.MAX_VALUE) // range
Re: [appengine-java] Re: Memory Leak in the EntityManagerFactory?
No problem David, these things happen, and I'm glad to hear you've found the culprit. Thanks for doing all the digging. Max On Mon, Mar 15, 2010 at 2:19 PM, David Fuelling sappe...@gmail.com wrote: Hey Max, I'm eating crow now. Turns out this is *not* a bug in the datastore code. I discovered that one of my DAO parent classes was doing a lookup before it actually created the Entity, and this lookup was getting an EntityManager but not closing it. Turns out my own code was the leak. DOH! Appologies for the false alarm and the waste of time david On Mar 15, 8:00 pm, David Fuelling sappe...@gmail.com wrote: Hey Max, Took a heap dump using two different scenarios. In test 1, I set the - Xmx to 100M, and in test 2 I set the max to 512M, and am comparing the difference between the number of objects across the two memory scenarios. In my code, I'm running a for-loop that executes 5000 times, and most of the objects present in JHat show up no more than 500 times, and in equal amounts, in either memory scenario (leads me to believe these are not the culprits). However, there are a handful of datastore classes that show a 1:1 relationship between the amount of memory I allow in each test. Following are the outputs from JHat: TEST #1 (100M Max) 101489 instances of class com.google.storage.onestore.v3.OnestoreEntity $PropertyValue 101488 instances of class com.google.storage.onestore.v3.OnestoreEntity $Property 52846 instances of class com.google.storage.onestore.v3.OnestoreEntity $Path$Element 43623 instances of class com.google.storage.onestore.v3.OnestoreEntity $Path 29782 instances of class com.google.storage.onestore.v3.OnestoreEntity $Reference 15944 instances of class com.google.apphosting.api.DatastorePb$Query 13839 instances of class com.google.storage.onestore.v3.OnestoreEntity $EntityProto 9237 instances of class com.google.appengine.api.datastore.dev.LocalCompositeIndexManager $IndexComponentsOnlyQuery 6705 instances of class com.google.appengine.api.datastore.dev.LocalDatastoreService $LiveQuery 4613 instances of class com.google.appengine.api.datastore.dev.LocalDatastoreService$Profile $EntityGroup TEST #2 (512M Max) 579558 instances of class com.google.storage.onestore.v3.OnestoreEntity $Property 579558 instances of class com.google.storage.onestore.v3.OnestoreEntity $PropertyValue 25863 instances of class com.google.storage.onestore.v3.OnestoreEntity $Path$Element 24805 instances of class com.google.storage.onestore.v3.OnestoreEntity $Path 17683 instances of class com.google.storage.onestore.v3.OnestoreEntity $Reference 10564 instances of class com.google.apphosting.api.DatastorePb$Query 8441 instances of class com.google.appengine.api.datastore.dev.LocalDatastoreService $LiveQuery 6065 instances of class com.google.storage.onestore.v3.OnestoreEntity $EntityProto 5002 instances of class com.google.appengine.api.datastore.dev.LocalDatastoreService$Profile $EntityGroup From what I can tell, the OnestoreEntity$Property and OnestoreEntity $PropertyValue classes are growing the most (and somewhat linearly) with the number of Datastore operations I execute (capped only by the amount of memory I allow the JVM). Now, my first inclination is to explain my error away on the grounds that the local datastore is in- memory, and so if I don't allow enough JVM memory for my datastore, this is expected behavior. However, I'm only persisting 5,000 User entities (and not even getting that far). My User is not terribly complicated (6 properties, 4 Lists, and a Preferences object). The lists and preferences are Lazy and empty -- I'm not creating anything for these in my test -- just a Userplus I'm only populating one of the field properties (username) with a very short string. For me to run out of 512MB of memory after creating only 4k-ish users means that each of my User entities is taking up around 125k each. Accounting for other datastore components taking up memory, we could say that my entities are only taking up 100k each, leaving the datastore the other 25k, or 100MB of memory. That still seems like my entities are taking up way too much memory (hence some sort of leak?), though I guess I don't know what's going on with the OnestoreEntity class to simulate the datastore, so I can't say for sure. Any thoughts here would be much appreciated. If I can provide any more data for you, please let me know. Thanks! David On Mar 12, 9:37 pm, Max Ross (Google) maxr+appeng...@google.commaxr%2bappeng...@google.com wrote: Thanks for the report David, this certainly seems suspicious. There is at least one memory leak I'm aware of but it's related to transactions so that's probably not what you're bumping into. Have you tried taking a heap dump to see what exactly is building up
[appengine-java] Re: How to query objects with criterias defined in child entities
Thanks Jeff, If I would like to find all users that have java level 5 and c++ level 2, then how to write a query in your suggested data model? Best regards, Max On Mar 10, 12:18 pm, Jeff Schnitzer j...@infohazard.org wrote: Create a UserSkill entity with a parent key of User. Do a keysOnly query for UserSkill objects that match your criteria, then get the parent keys out of the UserSkill key, then do a batch get on the parent keys. The Objectify code: class UserSkill { @Id Long id; @Parent KeyUser user; String skill; // could also be KeySkill skill if you model Skill entities int ability; } ListKeyUser userKeys = new ArrayListKeyUser(); for (KeyUserSkill key: ofy.query(UserSkill.class).filter(skill, java).filter(ability , 5).fetchKeys()) userKeys.add(key.getParent()); CollectionUser users = ofy.get(userKeys).values(); Jeff On Tue, Mar 9, 2010 at 7:53 PM, Max thebb...@gmail.com wrote: I start a new thread to recall this issue because the origin one can not be replied any more. http://groups.google.com/group/google-appengine-java/browse_thread/th... Rusty Wright suggested a list of user keys to be stored in skill entity. But that means only 5000 users can have the same skill. http://groups.google.com/group/google-appengine-java/browse_thread/th... Any other suggestions on this kind of problem? Many 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 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.
Re: [appengine-java] can not remove with @Order annotation
Please post your model object definitions and the stack trace. Thanks! Max On Sun, Mar 14, 2010 at 8:51 PM, Philip Tucker ptuc...@gmail.com wrote: If I annotate a dependent 1:many relationship with @Order(mappedBy = foo), I get a NPE when I try to remove something from the list. When I remove the annotation everything works fine. Is this a known limitation? If not I can post a stack trace and more details. -- 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: How to query objects with criterias defined in child entities
Thanks John, Bret Slatkins' talk is impressive. Let's say we have m skills with n levels. (i.e., m x n SkillLevel entities). Each SkillLevel entity consists of at least one SkillLevelIndex. We define similarity between user A and User B as number of skills with same level. i.e., number of SkillLevel entities of query: from SkillLevel where userKeyList contains A and userKeyList contains B It works fine if userKeyList contains all user keys. However, after we applied relation index pattern, we have more than one user keys lists, then how to perform a query to calculate similarity between two users? On Mar 10, 12:21 pm, John Patterson jdpatter...@gmail.com wrote: On 10 Mar 2010, at 10:53, Max wrote: Rusty Wright suggested a list of user keys to be stored in skill entity. But that means only 5000 users can have the same skill. If you use the Relation Index Entity pattern as described in Bret Slatkins talk you can store 5000 users per index entity and an unlimited number of index entities. This will actually give you much better query performance too because you will not need to load the list of 5000 Keys every time you read your main entity. The new release of Twig has direct support for RIE's and can actually let you query for multiple skills *in parallel* then merge the results and return the parents : http://code.google.com/p/twig-persist/wiki/Using#Relation_Index_Entities -- 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] Memory Leak in the EntityManagerFactory?
Thanks for the report David, this certainly seems suspicious. There is at least one memory leak I'm aware of but it's related to transactions so that's probably not what you're bumping into. Have you tried taking a heap dump to see what exactly is building up? On Fri, Mar 12, 2010 at 1:27 PM, David Fuelling sappe...@gmail.com wrote: I have a JUnit test class that is attempting to test some JPA datastore create operations, and I'm getting results that *seem* to indicate a memory leak in the EntityManagerFactory (?) Basically, if I use test1a (see below), the heap in use by the JUnit test process continually increases until the JUnit test fails with an OutOfMemory error. Test1b suffers from no such problem. I would not expect this type of behavior from test1a because even though I'm creating a new EntityManager upon every for-loop iteration, that em should go away after every for-loop iteration since the variable reference is replaced with a new EntityManager each time. Now, one might argue that my test is just going too fast, and the GC isn't getting a chance to Garbage Collect. However, Test1a takes a pretty long time to execute on my machine ( 120 seconds), so I *should* be getting some GC, right? Unless the EntityManagerFactory is holding onto a reference to each created EntityManager? Any input here would be much appreciated... Thanks! david ps - my UserImpl is a standard JPA entity. /// //Begin JUnit Test #1a /// User user = null; EntityManager em = null; for (int i = 0; i 5000; i++) { //See how I get an em here: http://code.google.com/appengine/docs/java/datastore/usingjpa.html#Getting_an_EntityManager_Instance em = EMF.get().createEntityManager(); user = new UserImpl(test + i); em.persist(user); em.close(); } /// //End Test #1b /// /// //Begin JUnit Test #1b /// User user = null; EntityManager em = EMF.get().createEntityManager(); for(int i = 0; i 5000; i++) { user = new UserImpl(test + i); em.persist(user); } em.close(); /// //End Test #1b /// -- 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] Re: Error when deleting entities - Id cannot be zero
What version of the sdk are you using? On Fri, Mar 12, 2010 at 1:36 PM, Pavel Byles pavelby...@gmail.com wrote: Anyone? On Fri, Mar 12, 2010 at 8:41 AM, Pavel Byles pavelby...@gmail.com wrote: I'm trying to delete all entities in my datastore but I receive the following error: javax.jdo.JDOUserException: One or more instances could not be deleted... NestedThrowablesStackTrace: java.lang.IllegalArgumentException: id cannot be zero... Caused by:java.lang.IllegalArgumentException: id cannot be zero For the following code: public void deleteAllMyType() { PersistenceManager pm = PMF.get().getPersistenceManager(); Query query = pm.newQuery(MyType.class); try { query.deletePersistentAll(); //ListMyType clist = (ListMyType) query.execute(); //pm.deletePersistentAll(clist); // This doesn't work either } finally { query.closeAll(); pm.close(); } } My entity class looks like this: @PersistenceCapable(identityType = IdentityType.APPLICATION)//, detachable = false) public class MyType implements Serializable { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id; @Persistent private String name; . . . } -- -Pav -- -Pav -- 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] Re: Error when deleting entities - Id cannot be zero
Which version of the App Engine SDK? On Fri, Mar 12, 2010 at 1:43 PM, Pavel Byles pavelby...@gmail.com wrote: GWT: 2.0.3 On Fri, Mar 12, 2010 at 4:38 PM, Max Ross (Google) maxr+appeng...@google.com maxr%2bappeng...@google.com wrote: What version of the sdk are you using? On Fri, Mar 12, 2010 at 1:36 PM, Pavel Byles pavelby...@gmail.comwrote: Anyone? On Fri, Mar 12, 2010 at 8:41 AM, Pavel Byles pavelby...@gmail.comwrote: I'm trying to delete all entities in my datastore but I receive the following error: javax.jdo.JDOUserException: One or more instances could not be deleted... NestedThrowablesStackTrace: java.lang.IllegalArgumentException: id cannot be zero... Caused by:java.lang.IllegalArgumentException: id cannot be zero For the following code: public void deleteAllMyType() { PersistenceManager pm = PMF.get().getPersistenceManager(); Query query = pm.newQuery(MyType.class); try { query.deletePersistentAll(); //ListMyType clist = (ListMyType) query.execute(); //pm.deletePersistentAll(clist); // This doesn't work either } finally { query.closeAll(); pm.close(); } } My entity class looks like this: @PersistenceCapable(identityType = IdentityType.APPLICATION)//, detachable = false) public class MyType implements Serializable { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id; @Persistent private String name; . . . } -- -Pav -- -Pav -- 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. -- -Pav -- 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 query objects with criterias defined in child entities
I start a new thread to recall this issue because the origin one can not be replied any more. http://groups.google.com/group/google-appengine-java/browse_thread/thread/4998ef3a9f2a0016/ec718da641a58ea7?lnk=gstq=+how+to+query+objects+with+criterias+defined+in+child+entities#ec718da641a58ea7 Rusty Wright suggested a list of user keys to be stored in skill entity. But that means only 5000 users can have the same skill. http://groups.google.com/group/google-appengine-java/browse_thread/thread/cf7ee19917c897b6/d91c7cd836d0ea2c#d91c7cd836d0ea2c Any other suggestions on this kind of problem? Many 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] TransactionalTaskException when enqueuing more than 5 tasks
Yes, the limit is 5: http://code.google.com/appengine/docs/python/datastore/transactions.html#What_Can_Be_Done_In_a_Transaction On Mon, Mar 8, 2010 at 4:10 AM, JD liva...@gmail.com wrote: I am enqueuing tasks within a transaction. tx.begin() for (int i=0;i10;i++) { Queue queue = QueueFactory.getDefaultQueue(); TaskOptions task = url(/taskurl); task.param(param, value); queue.add(task); } tx.commit(); I constantly get TransactionalTaskException when enqueuing task number #6 (everything until number 5 goes through without issues). Is there a limit on the number of tasks which can be enqueued within a transaction ? com.google.appengine.api.labs.taskqueue.TransactionalTaskException at com.google.appengine.api.labs.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java: 50) at com.google.appengine.api.labs.taskqueue.QueueApiHelper.makeSyncCall(QueueApiHelper.java: 32) at com.google.appengine.api.labs.taskqueue.QueueImpl.add(QueueImpl.java: 241) at com.google.appengine.api.labs.taskqueue.QueueImpl.add(QueueImpl.java: 231) Caused by: java.lang.IllegalArgumentException: at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java: 33) at com.google.appengine.api.labs.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java: 51) ... 51 more -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.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] TransactionalTaskException when enqueuing more than 5 tasks
Oops, that was the python link. Java link is http://code.google.com/appengine/docs/java/datastore/transactions.html#What_Can_Be_Done_In_a_Transaction On Mon, Mar 8, 2010 at 10:02 AM, Max Ross (Google) maxr+appeng...@google.com maxr%2bappeng...@google.com wrote: Yes, the limit is 5: http://code.google.com/appengine/docs/python/datastore/transactions.html#What_Can_Be_Done_In_a_Transaction On Mon, Mar 8, 2010 at 4:10 AM, JD liva...@gmail.com wrote: I am enqueuing tasks within a transaction. tx.begin() for (int i=0;i10;i++) { Queue queue = QueueFactory.getDefaultQueue(); TaskOptions task = url(/taskurl); task.param(param, value); queue.add(task); } tx.commit(); I constantly get TransactionalTaskException when enqueuing task number #6 (everything until number 5 goes through without issues). Is there a limit on the number of tasks which can be enqueued within a transaction ? com.google.appengine.api.labs.taskqueue.TransactionalTaskException at com.google.appengine.api.labs.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java: 50) at com.google.appengine.api.labs.taskqueue.QueueApiHelper.makeSyncCall(QueueApiHelper.java: 32) at com.google.appengine.api.labs.taskqueue.QueueImpl.add(QueueImpl.java: 241) at com.google.appengine.api.labs.taskqueue.QueueImpl.add(QueueImpl.java: 231) Caused by: java.lang.IllegalArgumentException: at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java: 33) at com.google.appengine.api.labs.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java: 51) ... 51 more -- You received this message because you are subscribed to the Google Groups Google App Engine for Java group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.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: Tag search
I guess no. There was 20 - 50 - 1000 unique tags Tags were added using random algorythm. Some tags were more popular then other. We used Normal distrubution. The most popular tag was added to 10-50% of entities. (We had several tests) Every object had 10 tags. Thanks On Feb 17, 12:48 am, Ikai L (Google) ika...@google.com wrote: How many different kinds of tags are there? Is this an exploding indexes situation? http://code.google.com/appengine/docs/python/datastore/queriesandinde... On Tue, Feb 16, 2010 at 12:34 PM, Max max.seven@gmail.com wrote: I am sorry but it does not work. With 1 objects and searching for 2 tags we got following error. com.google.appengine.api.datastore.DatastoreNeedIndexException: The built-in indices are not efficient enough for this query and your data. Please add a composite index for this query.. Unable to determine what index is missing. This is probably a bug in the App Engine SDK. Solution I have proposed is not effecient enough when inserting data. It may take ~5 seconds per object. May be we have to host tag search server outside of google app engine. :( or decrease number of tags to minimum On Feb 12, 2:22 pm, Max max.seven@gmail.com wrote: Thank You very much it works! correct code is:- query.setFilter(tags == 'hello' tags == 'world'); I hope it will work with thousands and millions of records as well. I have not tested with large number of data yet. Thanks again! On Feb 12, 2:46 am, John Patterson jdpatter...@gmail.com wrote: On 12 Feb 2010, at 06:53, Max wrote: I have not coded much in native API but I think it will search first for hello and then for world then mix results. No, it does a merge join - only returning entities that match all filters - not separate queries like the JDO contains() creates. -- 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] Max length of a list property
When I am trying to persist a ArrayListString with size = 5000. The app-engine throws following exception. Any ideas on the max length of listProperties? Nested in javax.servlet.ServletException: java.lang.IllegalArgumentException: Too many indexed properties for entity: app: testing0601,path Element {type: newTestingEntity,id: 0x1272eb520ae }, Element {type: newTestingEntity }: java.lang.IllegalArgumentException: Too many indexed properties for entity: app: testing0601,path Element {type: newTestingEntity,id: 0x1272eb520ae }, Element {type: newTestingEntity } 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.complexity.demo.server.GreetingServiceImpl.init(GreetingServiceImpl.java: 57) at javax.servlet.GenericServlet.init(GenericServlet.java:215) at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java: 433) at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java: 342) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: 463) 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 $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
[appengine-java] Re: Max length of a list property
Thx John. Has google officially documented this constraint? On Mar 5, 11:06 pm, John Patterson jdpatter...@gmail.com wrote: There is a max 5000 indexed properties for any Entity. http://groups.google.com/group/google-appengine/browse_thread/thread/... On 5 Mar 2010, at 21:48, Max wrote: When I am trying to persist a ArrayListString with size = 5000. The app-engine throws following exception. Any ideas on the max length of listProperties? Nested in javax.servlet.ServletException: java.lang.IllegalArgumentException: Too many indexed properties for entity: app: testing0601,path Element { type: newTestingEntity, id: 0x1272eb520ae }, Element { type: newTestingEntity }: java.lang.IllegalArgumentException: Too many indexed properties for entity: app: testing0601,path Element { type: newTestingEntity, id: 0x1272eb520ae }, Element { type: newTestingEntity } 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 .complexity .demo.server.GreetingServiceImpl.init(GreetingServiceImpl.java: 57) at javax.servlet.GenericServlet.init(GenericServlet.java:215) at org .mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java: 433) at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java: 342) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: 463) 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 $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