[appengine-java] Re: Problem with exception on server startup when GAE sdk is in svn

2012-02-22 Thread Max Ross (Google)
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

2011-12-09 Thread Max
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

2011-12-08 Thread Max
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

2011-12-08 Thread Max
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

2011-11-26 Thread Max
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?

2011-11-20 Thread Max
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

2011-11-20 Thread Max
+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

2011-11-18 Thread Max
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?

2011-11-18 Thread Max
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

2011-11-18 Thread Max
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

2011-11-17 Thread Max
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

2011-11-17 Thread Max
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

2011-11-16 Thread Max
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

2011-11-16 Thread Max
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

2011-11-16 Thread Max
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

2011-11-07 Thread Max Ross (Google)
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

2011-11-01 Thread Max Ross (Google)
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

2011-10-18 Thread Max Ross (Google)
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

2011-10-13 Thread Max Ross (Google)
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

2011-10-12 Thread Max Ross (Google)
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!

2011-08-29 Thread Max Hwang
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

2011-08-02 Thread Max
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

2011-08-01 Thread Max
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

2011-08-01 Thread max
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

2011-07-22 Thread Max
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?

2011-07-22 Thread Max
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

2011-07-12 Thread Max
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?

2011-07-10 Thread Max
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?

2011-07-09 Thread Max
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

2011-07-04 Thread Max
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

2011-06-22 Thread Max Pfeiffer
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

2011-06-22 Thread Max Pfeiffer
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

2011-05-31 Thread Max
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?

2011-05-26 Thread Max Ross (Google)
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

2011-05-23 Thread Max
+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

2011-05-18 Thread Max
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.

2011-05-12 Thread Max Ross
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

2011-05-12 Thread Max Ross
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

2011-05-12 Thread Max Ross
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?

2011-04-10 Thread Max
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

2011-01-05 Thread Max
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)

2011-01-04 Thread Max
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

2011-01-04 Thread Max
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

2011-01-04 Thread Max
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

2011-01-04 Thread Max
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

2011-01-04 Thread Max
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

2011-01-04 Thread Max
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

2011-01-04 Thread Max
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

2011-01-01 Thread Max
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

2010-12-30 Thread Max
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

2010-12-20 Thread Max
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?

2010-12-17 Thread Max Ross (Google)
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

2010-12-13 Thread Max
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

2010-12-04 Thread Max
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

2010-12-03 Thread Max Ross (Google)
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?

2010-11-29 Thread Max Ross (Google)
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

2010-11-22 Thread Max
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?

2010-11-21 Thread Max

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

2010-11-18 Thread Max
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?

2010-11-14 Thread Max
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

2010-10-26 Thread Max
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!

2010-10-15 Thread Max Ross (Google)
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?

2010-10-15 Thread Max Ross (Google)
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

2010-09-28 Thread Max
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

2010-08-04 Thread Max
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?

2010-07-18 Thread max
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

2010-07-14 Thread Max Ross (Google)
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?

2010-06-29 Thread Max
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

2010-06-12 Thread Max Ross (Google)
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.

2010-05-05 Thread Max Ross (Google)
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

2010-05-05 Thread Max Ross (Google)
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.

2010-05-05 Thread Max Ross (Google)
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

2010-04-28 Thread Max Ross (Google)
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

2010-04-26 Thread Max Ross (Google)
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

2010-04-26 Thread Max Ross (Google)
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

2010-04-23 Thread Max Ross (Google)
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

2010-04-23 Thread Max Ross (Google)
 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

2010-04-23 Thread Max Ross (Google)
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

2010-04-22 Thread Max Ross (Google)
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

2010-04-22 Thread Max Ross (Google)
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!

2010-04-01 Thread Max Ross (Google)
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

2010-04-01 Thread Max Ross (Google)
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!

2010-04-01 Thread Max Ross (Google)
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

2010-03-31 Thread Max Ross (Google)
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

2010-03-16 Thread Max
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

2010-03-16 Thread Max
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

2010-03-15 Thread Max
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?

2010-03-15 Thread Max Ross (Google)
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

2010-03-14 Thread Max
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

2010-03-14 Thread Max Ross (Google)
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

2010-03-14 Thread Max
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?

2010-03-12 Thread Max Ross (Google)
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

2010-03-12 Thread Max Ross (Google)
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

2010-03-12 Thread Max Ross (Google)
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

2010-03-09 Thread Max
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

2010-03-08 Thread Max Ross (Google)
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

2010-03-08 Thread Max Ross (Google)
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

2010-03-08 Thread Max
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

2010-03-05 Thread Max
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

2010-03-05 Thread Max
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

  1   2   3   >