Please see the answer i sent out yesterday for a proper solution. Duong BaTien DBGROUPS and BudhNet
On Sat, 2010-01-30 at 01:14 -0800, digitalsam007 wrote: > I failed to make this code work. It seems that the MessageIndex object > is not getting persisted when i call tx.commit(). > > Any help in this regard will be appreciated. > > Thanks > > On Jan 17, 12:26 am, Duong BaTien <[email protected]> wrote: > > Hi: > > > > Following is my sketch for the Message and MessageIndex. Please advise > > and if possible, sketch out the Java version of set intersection from > > the presentation. Have not time to try anything yet; but the design is > > very significant for proper data modeling. The JDO version of the > > presentation uses query.setFilter("receivers == 'foo'") which i do not > > see in the API. > > > > public class MessageIndex { // create MessageIndex to the parent Message > > private Key parent; private String keyKind; private long id; > > > > @PrimaryKey > > @Persistent(ValueStrategy = IdGeneratorStrategy.IDENTITY) > > private KeyFactory.createKey(parent, keyKind, id) key; > > > > @Persistent private List<String> receivers; > > > > // constructor to create MessageIndex linked to Message > > public MessageIndex(Key parent, String keyKind, long id) { > > this.parent = parent; this.keyKind = keyKind; this id = id; > > > > } > > > > public class Message { > > @PrimaryKey > > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > > private Key key > > > > @Persistent private String sender; > > @Persistent private String body; > > > > // a user create a message to a list of receivers > > public static Message createMessage(String userId, String body, > > List<String> receivers) { > > tx.begin() > > this.body = body; > > MessageIndex index = new MessageIndex(key, key,getKind(), key.getId > > ()); > > index.setReceivers(receivers); > > tx.commit(); > > } > > > > // query to get all messages sent to a user "foo" > > public List<Message> getMessagesSentToUserId(String userId) { > > List<Message> results = null > > tx.begin(); > > Query q = pm.newQuery(MessageIndex.class); > > q.addFilter("receivers", Query.FilterOperator.EQUAL, "foo"); > > q.setKeyOnly(); > > // query the Message for all messages filtered by parent of > > MessageIndex key > > Query query = pm.newQuery(Message.class); > > query.addFilter("key", Query.FilterOperator.EQUAL, "q.execute > > ().getParent()"); > > results = (List<Message>) query.execute(); > > tx.commit(); > > } > > > > } > > > > Thanks > > Duong BaTien > > DBGROUPS and BudhNet > > > > On Wed, 2010-01-13 at 16:26 -0800, Jason (Google) wrote: > > > It's been awhile since I've seen this video, so I'll have to go back > > > to re-watch it in order to answer your question completely, but I'd be > > > interested in seeing what you've sketched out so far and happy to give > > > you my feedback on it. > > > > > - Jason > > > > > On Tue, Jan 12, 2010 at 3:52 PM, Duong BaTien <[email protected]> > > > wrote: > > > Hi Jason, the author Brett Slatkin and others: > > > > > 1) For the list property, the video shows simple example of > > > standard 1:n > > > Message Receivers in python and Java. It then demonstrates a > > > very > > > efficient technique of Message and MessageIndex with the query > > > of > > > MessageIndex in python (NO Java from then on). I look at both > > > the low > > > level datastore with Query.setKeyOnly() and the query "select > > > id from" > > > to get the results of List<Key>, then go through the loop to > > > get the > > > receivers. I may miss something, since the python code looks > > > so clean. > > > But once you are in any environment, it is very expensive to > > > switch. > > > This technique has major impact in data modeling. > > > > > 2) Again for the set intersection, the python code looks so > > > clean. I > > > roughly sketch what need to be done on the Java side with > > > either low > > > level of datastore or with JDO. It is still not elegant as the > > > shown > > > codes. The demos are also in python. Again, the technique of > > > merge join > > > will have very significant impact on data modeling that GAE > > > may surpass > > > other platforms. > > > > > Haven't put enough time in it yet, I wonder if any one has > > > worked out > > > the demos in Java and suggested best practices in data > > > modeling for a > > > complex large application. The job Brett Slatkin sets out to > > > do has not > > > completed without the Java codes since GAE now supports Java. > > > > > Thanks > > > Duong BaTien > > > DBGROUPS and BudhNet > > > > > On Tue, 2010-01-12 at 14:13 -0800, Jason (Google) wrote: > > > > Can you be more specific about what you're trying to > > > accomplish so we > > > > don't have to search through the video to find what you're > > > looking > > > > for? Or, at least provide a timeline reference that we can > > > refer to in > > > > the video. :) > > > > > > Thanks, > > > > - Jason > > > > > > On Mon, Jan 11, 2010 at 7:29 AM, Duong BaTien > > > <[email protected]> > > > > wrote: > > > > Hi: > > > > > > Is there any blog and/or note to apply list > > > properties and > > > > merge-join in > > > > python as in the following talk and demos > > > > > > > > http://code.google.com/events/io/2009/sessions/BuildingScalableComple...using > > > Java and JDO? > > > > > > Thanks > > > > Duong BaTien > > > > DBGROUPS and BudhNet > > > > > > -- > > > > You received this message because you are subscribed > > > to the > > > > Google Groups "Google App Engine for Java" group. > > > > To post to this group, send email to google- > > > appengine- > > > > [email protected]. > > > > To unsubscribe from this group, send email to > > > google- > > > > [email protected]. > > > > 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- > > > > [email protected]. > > > > To unsubscribe from this group, send email to google- > > > appengine-java > > > > [email protected]. > > > > 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- > > > [email protected]. > > > To unsubscribe from this group, send email to google- > > > [email protected]. > > > 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- > > > [email protected]. > > > To unsubscribe from this group, send email to google-appengine-java > > > [email protected]. > > > 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 [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.
