All entities in the datastore belong to an entity group. Entities in the same group are
stored in the same part of Google's distributed network. Better distribution across
database nodes improves performance when creating and updating data. When
creating a new entity, you can assign an existing entity as its parent so that the new
entity becomes part of that entity group. If you do not specify a parent for an entity, it
is considered a root entity.
The datastore places restrictions on what operations can be performed inside a
Your application can perform a query inside a transaction but only
if the query includes an ancestor filter to retrieve all descendants of
the specific entity.
A transaction must operate only on entities in the same entity
If your transaction fails, your application must try again
programmatically. JDO will not attempt to retry the transaction
automatically, like most systems with optimistic concurrency.
A transaction can only update an entity once.
Finishing Up Your Application
Now that you have a good understanding of the App Engine datastore and how to use
JDO to interact with it, you can finish up the application. You'll need to tie various
parts of your application into the datastore using GWT RPC to create a fully
functioning application, following these steps:
Populate your Projects picklist with values.
Populate your Milestones picklist with values based on the selected
Implement your Save handler to persist your timecard entries to
Display the current user's timecard entries from the datastore.
Making Remote Procedure Calls with GWT RPC
Similar to your authentication service, your data service will use GTW RPC to
communicate with your server (see Figure 7-1). You'll create a server-side service that