En la carrera entre JDO vs JPA solo puedo estar de acuerdo con los carteles de datanucleus.
En primer lugar, y también lo más importante, los carteles de datanucleus saben lo que están haciendo. Después de todo, están desarrollando una biblioteca persistente y están familiarizados con modelos de datos distintos del relacional, por ejemplo, Big Table. Estoy seguro de que si un desarrollador para hibernate estuviera aquí, diría: "todas nuestras suposiciones al construir nuestras bibliotecas centrales están estrechamente acopladas al modelo relacional, hibernate no está optimizado para GAE".
En segundo lugar, JPA es, sin duda, de uso más generalizado, ser parte de la pila oficial de Java EE ayuda un poco, pero eso no significa necesariamente que sea mejor. De hecho, JDO, si lees sobre él, corresponde a un nivel más alto de abstracción que JPA. JPA está estrechamente acoplado al modelo de datos RDBMS.
Desde el punto de vista de la programación, usar las API de JDO es una opción mucho mejor, porque conceptualmente está comprometiendo mucho menos. Teóricamente, puede cambiar a cualquier modelo de datos que desee, siempre que el proveedor que utilice sea compatible con la base de datos subyacente. (En la práctica, rara vez logra un nivel tan alto de transparencia, porque se encontrará configurando sus claves primarias en el objeto de GAE y se vinculará a un proveedor de base de datos específico, por ejemplo, Google). Sin embargo, aún será más fácil migrar.
En tercer lugar, puede usar Hibernate, Eclipse Link e incluso Spring con GAE. Google parece haber hecho un gran esfuerzo para permitirle utilizar los marcos en los que está acostumbrado a crear sus aplicaciones. Pero lo que la gente se da cuenta cuando crea sus aplicaciones GAE como si se ejecutaran en RDBMS es que son lentas. La primavera en GAE es LENTA. Puede buscar en Google videos de IO de Google sobre este tema para ver que es cierto.
Además, adherirse a las normas es algo muy sensato, en principio lo aplaudo. Por otro lado, el hecho de que JPA sea parte de la pila Java EE hace que la gente, a veces, pierda la noción de opciones. Tenga en cuenta, si lo desea, que Java Server Faces también forma parte de la pila Java EE. Y es una solución increíblemente ordenada para el desarrollo de GUI web. Pero al final, ¿por qué la gente, las personas más inteligentes si puedo decirlo, se desvían de este estándar y usan GWT en su lugar?
En todo esto, tengo que decir que hay algo muy importante para JPA. Eso es Guice y su conveniente soporte para JPA. Parece que Google no fue tan inteligente como de costumbre en este punto y están contentos, por ahora, de no ser compatible con JDO. Sigo pensando que pueden permitírselo, y eventualmente Guice también engullirá a JDO ... o tal vez no.